Hauptsächlich als Erinnerung für
den nächsten Notfall für mich:
Infos von ca. 2006
Daten von Festplatten retten:
In diesem Fall: Eine Partition mit einem FAT32-Dateisystem, der Anfang und damit
speziell die erste FAT war beschädigt. Funktioniert so nicht, wenn der MBR
beschädigt ist. Dann muss man den erst wiederherstellen, da kann evtl.
testdisk helfen.
Vorgehensweise:
Vorbereitend:
- Der Rechner bootet, und erkennt die Platte. (Also ist sie wahrscheinlich
physisch OK)
0. Von z.B. Knoppix-CD booten
1. Rauskriegen, welche Platte man eigentlich will:
# cat /proc/ide/hdc/model
# echo $((`cat /proc/ide/hdc/capacity` * 512 / 1024 / 1024)) Mb
Capacity ist in Sektoren, die sind eigentlich immer 512 Byte.
Weiter vorbereitend:
- smartctl -a /dev/hdc
So kann man rauskriegen, ob die Platte doch wegen Alter/Hitze den Geist
aufgibt. Wenn Reallocated_Sector_Count 0 ist, ist die Platte fast sicher in
Ordnung. Der UDMA_CRC_Error_Count ist noch interessant, wenn der sehr hoch
ist, ist wahrscheinlich das Kabel zu lang oder zu schlecht, oder eben doch
Elektronik bei Platte oder Motherboard hin. Man kann auch noch die Platte
einen Self-test machen lassen.
Jetzt aber:
ddrescue / gddrescue benutzen, um ganze Platte zu kopieren:
# ddrescue /dev/hdc /mnt/hdb1/platten-image
2. Erzeugtes Image an loopback binden:
# losetup /dev/loop0 /mnt/hdb1/platten-image
3. Gucken, ob der Bootsektor / die erste FAT in Ordnung sein kann:
# dd if=/dev/loop0 bs=512 count=48 |hexdump -C
Wenn da in der ersten Zeile MSWIN (4.1), sowie später der Name des
Dateisystems und danach der Typ, also FAT32 steht ist der Bootsektor
wahrscheinlich OK. Das ist wichtig weil hier (natürlich) für das
Dateisystem wichtige Daten gespeichert sind (z.B. seine Länge). Bei mir
gabs davon auch ein Backup an 00000c00; eins von beiden war in Ordnung. Ab
Hexoffset 00004000 (bei mir) geht die erste FAT los. Sie sollte mit "f8 ff
ff 0f" anfangen. Wenn das passt, mit der ersten FAT probieren, sonst mit der
Kopie der FAT probieren. (Die befand sich bei mir bei 301400, also z.B. dd
if=/dev/loop0 bs=512 skip=14346 count=1) Die Kopie ist direkt hinter der
ersten FAT, aber die Größe der FATs ist natürlich der
Größe des Dateisystems abhängig.
Bei NTFS steht btw. NTFS an Byte 4-7.
Wie da das Dateisystem ausschaut hab ich keine Ahnung :-)
Bei meinem Linux sehe ich nur ein
GRUB .Geom.Hard Disk.Read. Error
als lesbare Strings am Anfang dieser Ausgabe.
In einen Bootloader gehören auch keine Dateisysteminformationen :-)
Bei mir war offenbar der Plattenanfang irgendwie geändert worden.
Das meiste war noch lesbar, nur ab und zu ein Bit geändert.
4. Wenn man also weiß, welcher Bootsektor / FAT besser ist:
dosfsck/fsck.vfat funktioniert echt schlecht, wenn Bootsektor oder FAT
kaputt ist :-) Also erstmal evtl. Bootsektor, dann FAT wiederherstellen, und
diese Änderung auch _sofort_, bevor fsck weitermacht, schreiben.
Ansonsten schreibt fsck erst am Schluß, und versucht daher mit der
alten kaputten FAT zu arbeiten.
# fsck.vfat -wr /dev/loop0
Zweite FAT ausgewählt, der fsck sieht viel besser aus als vorher (es
kommen wieder sinnvolle Dateinamen), aber das fsck-Programm stürzt ab.
Es hatte Cluster angemeckert, die in zwei Dateien vorkamen, man sollte die
zu verkürzende Datei auswählen, danach haben aber wohl
irgendwelche Cluster in irgendeiner Liste gefehlt, und fsck.vfat hat sich
ungnädig beendet. Jetzt ist aber mindestens die richtige FAT
geschrieben, also kann man jetzt so lange mit fsck testen, bis es
durchläuft. Ich hab immer die kürzere Möglichkeit
gewählt, das hat dann funktioniert. Im Endeffekt waren dann 5 Dateien
kaputt.
5. Dateisystem lebt wieder.
Sollte jetzt mountbar sein.
Irgendwann evtl. noch ein losetup -d /dev/loop0
Und jetzt wo man weiß, wie's geht kann man das mit der Originalplatte
machen, und spart sich Daten rumzukopieren.