Abenteuer mit Laufwerk A:
« | 20 Jun 2020 | »Endlich, nach vielen Jahren (ähm schon fast Jahrzehnten), sind es Disketten, die mir bei einer wichtigen Problemstellung helfen konnten:
Wie simuliert man Datenträgerfehler?
Alte Disketten aus den vor-2000ern haben dieses “Feature” inzwischen häufig integriert, also ab ins USB-Laufwerk und los…
vBinCopy
ist aktuell mein liebstes GATE-Referenzprojekt, weil es nicht nur
wichtige Features des Frameworks nutzt und abtestet, sondern weil es auch
einen guten praktischen Nutzen hat:
Das Kopieren und Beschreiben von SD-Karten
für SOC Geräte.
Aber was passiert eigentlich, wenn ein Sektor fehlerhaft ist?
Genau diesen Fall möchte ich schließlich auch abdecken, aber Festplattenfehler sind schwer zu simulieren.
Bei SD-Karten ist das auch mühsam, weil diese zwar gerne Daten verlieren, sich aber nicht als “fehlerhaft” beim OS anmelden.
Disketten hingegen kriegen leicht einen Kratzer ab und schon meldet das OS unterschiedlichste Fehlercodes, wenn ein Sektor nicht gelesen werden kann.
So kam also mein USB-Floppy-Disk-Drive wieder mal zum Einsatz, um das Verhalten beim Lesen und Schreiben von Disketten zu beobachten.
Folgende Erkenntnisse durfte ich dabei machen:
Kein Windows Device-Link im globalen Namensraum
Festplatten haben im Windows Object-Manager einen Device-Eintrag z.B.:
\Device\HarddiskN
und dieser ist im globalen Namensraum dann mit
\\.\PhysicalDriveN
verlinkt und das ist der Pfad, den wir mit
CreateFile
auch öffnen können.
Floppy-Disk-Drives haben (meines Wissensstandes) einen solchen Eintrag nicht, man
kann aber den Gerätepfad, den man von der Setup-API bekommt ebenso mit
CreateFile
öffnen und dann direkt die Sektoren per ReadFile
und WriteFile
bearbeiten.
USB-Floppys sind in Linux “entfernbare” Festplatten
Dass sich mein USB-Floppy-Drive im sysfs
und in /dev
als sda
meldet hat
mich schon etwas überrascht. Zwar kann ich das gerade nicht nachprüfen, aber
ich erinnere mich noch, dass früher die nativ verbauten Floppy-Controller als
/dev/fdN
ansprechbar waren um sich von den IDE Festplatten mit /dev/hdX
zu
unterscheiden.
/dev/sdX
steht doch eigentlich für SCSI und/oder SATA … keine Ahnung
warum sich das so abbildet.
However, open
kann den Floppydisk Pfad problemlos ansprechen.
Ergebnisse
Nun, bei einem Lesefehler wird das wie erwartet bei ReadFile
und
read
zurückgeliefert.
Um solche Sektoren zu umgehen, setzt man den Datenzeiger einfach auf die Startadresse des nächsten Sektors und versucht dort weiterzulesen. Den übersprungenen Sektor muss man eben durch Füllbytes repräsentieren.
Und schon hat man ein primitives Reparatur-Tool, das auch defekte Medien lesen kann und nicht einfach abbricht (was eine Tools leider machen).
Fazit
Ich freue mich mit vBinCopy
ein kleines Tool zum binären Lesen,
Schreiben und reparieren von Laufwerken, Partitionen und einfachen
Dateien im Sortiment zu haben, das ausschließlich auf dem GATE
Framework aufbaut.
Gespannt bin ich vor allem, ob die genutzte Implementierung auch auf älteren Windows Plattformen oder exotischen Unix-Derivaten anwendbar ist.
Die Zukunft wird es zeigen …
PS: Hier noch ein schöner Ausschnitt, der mich an vergangene Zeiten erinnert:
1C:\Windows\system32>format a: 2Legen Sie eine neue Diskette in Laufwerk A: ein, 3und drücken Sie die EINGABETASTE. 4Der Typ des Dateisystems ist RAW. 5Das neue Dateisystem ist FAT. 6Überprüfung von 1.44 MB 7Die Dateizuordnungstabelle (FAT) wird initialisiert... 8Volumebezeichnung (11 Zeichen, EINGABETASTE für keine)? 9Formatieren beendet. 10 1,4 MB Speicherplatz auf dem Datenträger insgesamt. 11 1,4 MB sind verfügbar. 12 13 512 Bytes in jeder Zuordnungseinheit 14 2 847 Zuordnungseinheiten auf dem Datenträger verfügbar 15 16 12 Bits in jedem FAT-Datensatz. 17 18Volumeseriennummer : 4884-4783 19 20Weiteren Datenträger formatieren (J/N)?