#root - rootuser.eu

Ich bin root, ich darf das!
Posts getagged als filesystem

Gelöschte Datei wiederherstellen

2012-06-21, getagged als cli, filesystem, linux
Wie kann man eine gelöschte Datei eines noch aktiven Prozesses wiederherstellen?
Vor kurzem habe ich versehentlich eine wichtige Log-Datei gelöscht. War diese Datei von einem aktiven Prozess geöffnet und ist dieser Prozess noch nicht gestorben, ist es sehr einfach diese Datei wiederherzustellen.
Alles was man dazu braucht ist das Werkzeug lsof.

Hier ein Beispiel:

Nehmen wir an, ich habe versehentlich die Datei /var/log/messages gelöscht und möchte sie wiederherstellen. Unter Linux weiß man, dass diese Datei in der Regel vom rsyslogd (oder auf älteren Systemen von syslogd) geöffnet wird. Mittels lsof kann ich mir das bestätigen und die zuständige PID erfahren:
root@host:~# lsof | grep var/log/messages
rsyslogd  1009   syslog   2w   REG   252,0   73541   6160750 /var/log/messages (deleted)
Hier gibt es ein paar Informationen über die vermeindlich gelöschte Datei. In der letzten Spalte gibt es auch den Hinweis, dass es sich um eine bereits gelöschte Datei handelt. Mit Hilfe der PID (hier 1009) und der Nummer des FileDescriptors (hier 2w, das 'w' steht für schreibenden Zugriff) kann man nun die Datei aus dem /proc-Dateisystem zurückholen:
root@host:~# cp /proc/1009/fd/2 messages.backup
Und schon hat man die Datei wieder zurück.

Anders sieht das aus, wenn man eine Datei wiederherstellen möchte für die es KEINEN aktiven Prozess mehr gibt. Hier kann ein Blick auf das Tool extundelete nicht schaden.