Es ist wohl jedem Linux-Admin schon einmal passiert, dass man eine Datei versehentlich gelöscht hat. Mit entsprechenden Recovery-Tools lässt sich diese eventuell wiederherstellen, ob und wie gut das funktioniert ist allerdings die Frage. Allerdings kann man sich diesen Aufwand mit etwas Glück sparen. Wenn nämlich ein Prozess noch einen offenen File Descriptor für diese Datei hat, ist darüber noch ein Zugriff auf die Datei möglich.
Mittwoch, 19. August 2020
Gelöschte Datei über offenen File Descriptor wiederherstellen
Im folgenden Beispiel wurde die Datei /root/testfile gelöscht und soll nun wiederhergestellt werden. Dazu muss erst einmal geprüft werden, ob noch ein Prozess die Datei geöffnet hat, da dies ja die Grundvoraussetzung für die im Folgenden beschriebene Vorgehensweise ist.
root@test01:~# lsof | grep /root/testfile
tail 5904 root 3r REG 252,0 6 1140 /root/testfile (deleted)
Die Ausgabe zeigt den Prozess und dessen PID (zweite Spalte), der die Datei noch geöffnet hat. Mit der PID kann man sich nun alle File Descriptors des Prozesses anzeigen lassen:
root@test01:~# ls -l /proc/5904/fd/
total 0
lrwx------ 1 root root 64 Aug 19 17:51 0 -> /dev/pts/0
lrwx------ 1 root root 64 Aug 19 17:51 1 -> /dev/pts/0
lrwx------ 1 root root 64 Aug 19 17:51 2 -> /dev/pts/0
lr-x------ 1 root root 64 Aug 19 17:51 3 -> /root/testfile (deleted)
lr-x------ 1 root root 64 Aug 19 17:51 4 -> anon_inode:inotify
Im letzten Schritt kopiert man nun noch den entsprechenden File Descriptor an eine geeignete Stelle und kann so wieder ganz normal auf die Datei zugreifen:
root@test01:~# cp /proc/5904/fd/3 testfile_recovered
root@test01:~# cat testfile_recovered
Dies ist eine Testdatei.
Kommentar schreiben