FrançaisEnglishDeutsch

Mehr Infos zum Kopierproblem mit dem RAID5-Controller

Beim Kopieren von Daten im Modus "Kopiermethode für grosse Dateien" treten beim Controller Adaptec 2400A mit einem 4 Disk RAID5 Array reproduzierbar Bytefehler auf. Ob andere Controller betroffen sind kann ich nicht sagen, doch bisher gab es keine Meldungen.

Die Unverträglichkeit fällt sehr schnell auf, weil alle Dateien nach dem Kopieren fehlerhafte Bytes enthalten, wenn sie mit dem Modus "Kopiermethode fuer grosse Dateien" kopiert werden. Dieser Modus ist standardmaessig nicht aktiv, und muss von Hand eingeschaltet werden. Bei "normalen" IDE- und SCSI-Controllern gibt es keine Probleme. Durch eine kleine Aenderung beim Anlegen des Kopierpuffers funktioniert das Kopieren nun korrekt.

Die Unverträglichkeit ist in Total Commander 6.03 behoben. Ein Update wird dringend empfohlen, falls Sie den Kopiermodus für grosse Dateien verwenden.

Wer sich für die technischen Gründe interessiert:

Der Fehler liegt nach meinen Erkenntnissen nicht am Total Commander, sondern am Treiber des Adaptec-Controllers. Gemäss der Dokumentation der Windows-Kopierfunktionen _sollte_ der Kopierpuffer an einer Sektorgrenze ausgerichtet sein, doch würde das nicht in jedem Fall erzwungen.

Siehe: Die Dokumentation für CreateFile unter FILE_FLAG_NO_BUFFERING:

"Buffer addresses for read and write operations _should_ be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). Depending on the disk, this requirement may not be enforced."

Diese Formulierung lässt nicht erwarten, dass beim Kopieren Schreibfehler gemacht werden - Total Commander übergibt alle Daten korrekt an die Kopierfunktion. Mit allen anderen Controllern funktioniert es ausserdem völlig einwandfrei.

Wir gingen davon aus, dass mit Delphi angelegte grosse Puffer immer auf Speicherseiten ausgerichtet sind, weil es mit allen Controllern funktioniert hat. Leider sind mit Delphi angelegte Puffer aber immer um 4 Bytes verschoben, weil Delphi offenbar die Puffergrösse in diesen ersten 4 Bytes speichert.