Wie kann man eine offene, aber gelöschte Datei unter Linux mit ln anstelle von cp wiederherstellen?

8

Ich habe eine Datei, die heruntergeladen wird (von einer Quelle, von der es schwierig ist, sie erneut herunterzuladen), die jedoch versehentlich aus dem Dateisystem-Namespace (/ tmp / blah) gelöscht wurde, und ich möchte diese Datei wiederherstellen.

Normalerweise könnte ich nur cp /proc/$PID/fd/$FD /tmp/blah, aber in diesem Fall würde mir das nur einen Teilschnappschuss bringen, da die Datei noch heruntergeladen wird. Sobald der Download abgeschlossen ist, wird der FD durch den Downloadvorgang (z. B. Chrome) geschlossen.

Gibt es eine Möglichkeit, durch Inode wiederherzustellen / eine feste Verbindung herzustellen? Irgendwelche anderen Lösungen? Wenn es einen Unterschied macht, beschäftige ich mich hauptsächlich mit ext4.

Yang
quelle

Antworten:

11

Versuchen Sie, die Datei mit tail fortlaufend zu kopieren:

tail -c +0 -f /proc/$pid/fd/$fd > filename

Natürlich müssen Sie den Tail-Prozess von Hand (oder auf andere externe Weise) stoppen, wenn der Download abgeschlossen ist.

Stijn Hoop
quelle
Klappt wunderbar. Ich denke, das war viel einfacher als ich dachte, da alles, was Sie brauchen, wirklich nur ein anderes Programm ist, das dieselbe Datei öffnet, um sie zu behalten.
Yang
4

Das fdlink- Projekt, das aus einem Linux-Kernelmodul und einer einfachen Anwendung besteht, soll einen neuen Link zu einem offenen Dateideskriptor erstellen. Ich habe es nicht versucht.

Coneslayer
quelle
1

Dadurch wird die Aufgabe erledigt, jedoch nicht durch Wiederherstellen des Inodes:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

Oder stoppen Sie den Download in Chrome einfach manuell, wenn Sie nicht den gesamten Browser beenden möchten.

Pavel
quelle
Wenn nur das Problem so einfach wäre, dass ich es einfach wieder aufnehmen / herunterladen könnte! Ich habe die Frage geklärt, um anzuzeigen, dass ich nicht davon ausgehen kann, dass ich sie erneut herunterladen kann.
Yang
Klingt nach Ärger :-) Es scheint, dass alle Inode-basierten Hacks viel zu niedrig und dateisystemspezifisch sind.
Pavel
Ja, ich habe dies auch zu meiner Frage hinzugefügt: Wenn es einen Unterschied macht, beschäftige ich mich hauptsächlich mit ext4.
Yang
1

Wenn Sie einen festen Link dazu erstellen möchten, müssen Sie die Option -s (siehe man ln) verwenden, also im fd-Verzeichnis ausführen ls -fund die Dateinummer (meistens zweistellige Zahlen) herausfinden und aln NUMBER destination-file -s

meisterlei
quelle