$ cat important_file > /dev/null &
[1] 9711
$ rm important_file
$ killall -STOP cat
[1]+ Stopped cat important_file > /tmp/p
$ ls -l /proc/`pidof cat`/fd/
total 0
lrwx------ 1 vi vi 64 May 13 20:32 0 -> /dev/pts/29
l-wx------ 1 vi vi 64 May 13 20:32 1 -> /tmp/p
lrwx------ 1 vi vi 64 May 13 20:32 2 -> /dev/pts/29
lr-x------ 1 vi vi 64 May 13 20:32 3 -> /home/vi/important_file (deleted)
Wie kann ich das wiederherstellen important_file
?
Ich habe so etwas versucht
injcode -m dup2 -ofd=3 -ofilename=/tmp/recovered_file -oflags=O_CREAT $PID_OF_CAT
aber es tut nichts.
linux
file-recovery
Vi.
quelle
quelle
readlink /proc/13381/fd/3
-> "/ home / vi / important_file (deleted)" und existiert/home/vi/important_file\ \(deleted\)
offensichtlich nicht.... besser als zu einem bestimmten Zeitpunkt zu kopieren (und nur die Momentaufnahme des Dateiinhalts zu diesem Zeitpunkt zu erfassen), ist es, "
tail -f
" diese Datei in eine neue Datei zu kopieren :(Dank der vorsichtigen Programmierer von Tail funktioniert das sogar mit Binärausgabe.)
Während der Laufzeit
tail -f
hält das Programm die Datei selbst geöffnet und verhindert so, dass sie beim Beenden des ursprünglichen Programms von der Festplatte gelöscht wird. Stoppen Sie also nichttail -f
gleich nach dem Ende Ihres ursprünglichen Programms - prüfen Sie/new/path/to/file
zuerst, ob es das ist, was Sie wollen. Wenn es nicht (oder nicht zufriedenstellend aus einem anderen Grunde) ist, können Sie die ursprüngliche Datei erneut kopieren, aber diesmal nach allen schriftlich es wird von „Programm“ und aus dem noch laufenden fertigtail -f
‚s / proc / PIDoftail / fd / verzeichnis.quelle
Invalid cross-device link
.Verwenden Sie lsof, um die Inode-Nummer zu ermitteln, und debugfs, um eine feste Verknüpfung zu dieser wiederherzustellen. Beispielsweise:
Bevor Sie sich beschweren, habe ich das obige Protokoll gefälscht, da ich momentan keine gelöschte Datei zur Hand habe ;-)
Ich
mi
setze die Löschzeit und die Linkanzahl auf sinnvolle Werte zurück (0 bzw. 1), aber es funktioniert nicht richtig - Sie können sehen, dass die Linkanzahl bei Null in bleibtls
. Ich denke, der Kernel könnte die Inode-Daten zwischenspeichern. Sie sollten wahrscheinlich frühestens nach der Verwendung von debugfs prüfen, um auf der sicheren Seite zu sein.Nach meiner Erfahrung sollten Sie den Link mit einem temporären Dateinamen erstellen und dann in den richtigen Namen umbenennen. Das direkte Verknüpfen mit dem ursprünglichen Dateinamen scheint zu einer Beschädigung des Verzeichnisses zu führen. YMMV!
quelle
Sie können nur
cp
die Datei, dh:Wenn die Datei noch geändert wird, kann dies natürlich zu Problemen führen.
quelle