:: Home :: Computing :: Downloads :: Scooter :: Links :: Music :: Nonsense :: Mail :: |
---|
Entgegen gängiger Meinungen ist es durchaus möglich, auch unter Linux versehentlich gelöschte Dateien wieder herzustellen. Dabei ist allerdings folgendes zu beachten:
Des weiteren sollte man beachten, dass die Möglichkeit, eine versehentlich gelöschte Datei zu retten, proportional zur Dauer der seit dem Löschvorgang verstrichenen Zeitspanne sinkt. Je eher man Rettungsversuche unternimmt, desto grösser ist die Chance, die Daten zu retten.
Und immer im Hinterkopf behalten: Ein funktionierendes Backup ist durch nichts zu ersetzen und erspart so manchen "Klimmzug" der gleich beschriebenen Form!
BTW: Ich habe hier etwas über meine derzeitige Datensicherungsmethode geschrieben.
Und der Krimi geht los: Retten einer versehentlich gelöschten Datei unter ext2 (Tragödie in 3 Akten).
Das Home-Verzeichnis des Users "jimbob" befindet sich im Verzeichnisbaum unter '/home/jimbob'. Das Verzeichnis 'home' wiederum ist auf dem Device '/dev/sdd3' (bei IDE-Systemen möglicherweise unter '/dev/hdd3') ins Dateisystem eingebunden.
Die entsprechende Zeile in der Datei '/etc/fstab' lautet also:
/dev/sdd3 /home/jimbob ext2 rw 0 2
Der User 'jimbob' hat in seinem Home-Verzeichnis eine Datei namens 'test' mit folgendem Inhalt angelegt:
# cat /home/jimbob/test Der Fisch fliegt...
Die Datei hat folgende Attribute:
# ls -l /home/jimbob/test -rw-r--r-- 1 jimbob walton 20 Jul 6 23:42 test
Das Unheil nimmt seinen Lauf: 'jimbob' löscht versehentlich die Datei 'test', deren Inhalt für ihn (niemand weiss so recht wieso, but anyway) eminent wichtig ist. Ein zeitnahes Backup steht natürlich nicht zur Verfügung.
Die Rettung der gelöschten Datei läuft mit folgenden Schritten ab:
# su - # umount /home
Das Programm 'debugfs' ist ein interaktiver Debugger für das ext2-Dateisystem, der nach seinem Aufruf über einen eigenen Prompt vedienbar ist. Ein Übersicht der an diesem Prompt verfügbaren Befehle kann man sich mittels folgende Befehles ausgeben lassen:
debugfs: help
Zuerst setzt man 'debugfs' auf das eben ausgebundene Dateisystem an:
# debugfs /dev/sdd3
Am Prompt des interaktiven Befehles 'debugfs' lässt man sich eine Liste der gelöschten Dateien ausgeben:
debugfs: lsdel
Aus der nun folgenden - üblicherweise mehrere Bildschirmseiten füllenden - Ausgabe, die leider nicht die jeweiligen Namen der gelöschten Dateien enthält, muss die zu rettende Datei herausgepfriemelt werden.
Die Ausgabe könnte folgendermassen aussehen:
4711 0 93678 6/ 6 Sat Jul 6 17:23:29 2002 239 1000 20 1/ 1 Sat Jul 6 15:27:15 2002 184 1000 4377 1/ 1 Mon Jul 1 23:22:57 2002
Die Spalten enthalten folgende wesentlichen Angaben:
Spalte | Angabe |
---|---|
1 | Inode Nummer |
2 | User-ID |
4 | Dateigrösse |
6 | Datum des Löschens |
Da die Ausgabe leider keine Dateinamen, sondern nur die inodes mit den gelöschten Dateien enthält, sollte man sinnvoller Weise zuerst Dateien mit der eigene User-ID "herausfischen" und bei diesen dann auf die Dateigrösse und das Datum des Löschens achten. Detailwissen über das, was das Dateisystem von der gelöschte Datei wusste, ist jetzt also äusserst hilfreich.
Im Beispiel hat es sich um eine relativ kleine gelöschte Datei gehandelt, die erst vor Kurzem von 'jimbob' (User-ID 1000) gelöscht wurde.
Mit folgenden Befehlen wird der Inhalt des inodes 239, der die gelöschte Datei '/home/jimbob/test' beinhaltet, in die Datei '/tmp/saved' ausgegeben und das Programm wieder verlassen:
debugfs: dump <239> /tmp/saved debugfs: quit
# cat /tmp/saved Der Fisch fliegt...
Zu guter Letzt bindet man das zwecks Wiederherstellung ausssgebundene Dateisystem wieder ein und wird wieder User:
# mount /home # bye
Und alles ist noch einmal gut gegangen, weil unter den gängigen Linux-Dateisystemen Recovery-Aktionen durchaus möglich sind.
Es gibt folgende Alternativen zu der beschriebenen Methode:
Zurück zur Main-Site |