EXT2 – Versehentlich gelöschte Dateien wiederherstellen

Dateien: Versehentlich gelöschte Dateien wiederherstellen
Bezieht sich auf: SUSE LINUX
Anliegen
Sie haben auf einem Linux ext2 Dateisystem versehentlich eine oder mehrere Dateien gelöscht. Sie haben kein Backup und wollen den Inhalt dieser Datei wiederherstellen.
Hintergrund
Wie auch unter anderen Betriebssystemen üblich wird auch auf dem Linux ext2 Dateisystem eine Datei dadurch `gelöscht’, daß entsprechende Verweise in der Folderdatei gelöscht werden. Die eigentlichen Daten der Datei sind nach dem eigentlichen `löschen’ zwar zum Überschreiben freigegeben, aber noch auf der Festplatte lesbar. Erst beim Anlegen weiterer Dateien werden diese nun freigegebenen Datenblöcke überschrieben.
Zudem existiert auch nach dem Löschen die sog. Inode in der die logische Verkettung der Blöcke und die ganzen Zugriffsrechte gespeichert sind. Hier wird hier auch der Zeitpunkt des Löschens (`Deletion time’) festgehalten. Was wirklich durch das Löschen endgültig verloren gegangen ist ist der Dateiname.
Durch Setzen eines Flags mit Hilfe des Kommandos chattr kann man auf dem ext2 Dateisystem auch ein `sicheres’ Löschen beim Absetzen eines Löschkommandos bewirken. Hierdurch wird die Datei vom Kernel beim Löschen vollständig mit Nullen überschrieben. Solchermassen gelöschte Daten sind nur u.U. mit speziellen Geräten, keinesfalls aber mit der hier beschriebenen Methode wiederherstellbar.
Eine Warnung vorneweg Mit dem im folgenden beschriebenen Programm debugfs können Sie sehr systemnahe Zugriffe auf das Dateisystem durchführen. Ohne genaue Kentniss der Interna des ext2 Dateisystems ist es sehr gefährlich für Ihre restlichen Daten mit den in der Hilfe bzw. in der Man-Page zu `debugfs’ beschriebenen Kommandos zu `experimentieren’. Falls Sie experimentieren möchten, so legen Sie sich am besten eine Übungspartition an.
Vorgehen
Führen Sie keine Schreibzugriffe mehr auf das Dateisystem aus auf dem Sie Dateien wiederherstellen möchten. Insbesondere das Neuanlegen von Dateien kann fatal für Ihre zu rettenden Daten sein. Falls Sie nur eine Partition `/’ verwenden so fahren Sie den Rechner am besten geordnet herunter und booten mit einem Rettungssystem. Ansonsten reicht es wenn Sie auch die betroffene(n) Partition(en) mit dem Kommando umount aushängen. Zur Verwendung von mount und umount beachten Sie bitte das Handbuchkapitel “Einstieg in Linux”.
Nehmen wir einfach an Sie haben folgende Datei versehentlich gelöscht und wollen Sie wiederherstellen.
erde:/mnt/Versuch # ls -la Protokoll_2009.txt
-rw-r–r– 1 cg suse 1050 Dec 29 13:31 Protokoll_2009.txt
erde:/mnt/Versuch # rm Protokoll_2009.txt

Sie umounten die betreffende Partition sofort.
erde:~# umount /mnt

In meinem Beispiel handelt es sich um die Partition /dev/sdc1 die auf den Mountpoint /mnt gemounted ist. Sie müssen natürlich den Devicenamen in Ihrem System in den unten aufgeführten Beispielen einsetzen. Geben Sie bitte das Kommando debugfs devicename ein um den Filesystemdebugger aufzurufen. Dieser meldet sich nach dem Start mit dem Prompt debugfs: an dem Sie Kommandos zum direkten Zugriff auf das Dateisystem eingeben können.
erde:/# debugfs /dev/sdc1
debugfs 1.17, 26-Oct-1999 for EXT2 FS 0.5b, 95/08/09
debugfs: lsdel
1 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
25794 515 100644 1050 2/ 2 Wed Dec 29 13:32:32 1999

Mit dem Kommando lsdel kann man sich also die gelöschten Inodes auflisten lassen. An den Dateirechten Mode, dem Eigentümer (Hier als numerische User id), dem Zeitpunkt des Löschens und der ehemaligen Dateigrösse Size können Sie recht gut die wiederherzustellende Datei auffinden falls Sie mehrere Dateien gelöscht haben (und beispielsweise nur eine wiederherstellen möchten). Wichtig ist hier für das folgende dump Kommando vor allem die Inode Nummer, im obigen Beispiel 25794.
Geben Sie folgendes Kommando ein um die oben gelöschte Datei mit den gleichen Dateirechten als neue Datei `gerettet’ im Verzeichniss /tmp wiederzubeleben. Beachten Sie bitte, daß Sie die spitzen Klammern < und > mit eingeben!
debugfs: dump -p <25794> /tmp/gerettet
debugfs: quit
erde:/# ls -l /tmp/gerettet
-rw-r–r– 1 cg suse 1050 Dec 29 13:31 /tmp/gerettet

Nach dieser Aktion können Sie das Dateisystem wieder mounten und die Datei aus dem /tmp Verzeichniss zurückspielen.
Es gibt noch weitere Methoden diese Datei wiederherzustellen, doch diese Methode hat den Vorteil keine Schreibzugriffe über debugfs oder nach vollzogener Wiederherstellung einen Dateisystemcheck zu benötigen.

Veröffentlicht am
Kategorisiert in Linux

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert