Linux-Datei gelöschte Wiederherstellung

8

Gibt es eine Möglichkeit, unter Linux eine Datei zu erstellen, die auf einen bestimmten iNode verweist? Nehmen Sie dieses Szenario: Es gibt eine Datei, die gerade geschrieben wird (ein Protokoll vielleicht) und die spezifische Datei wird gelöscht , aber ein Link im Verzeichnis dir / proc zeigt immer noch darauf hin. In diesem Fall benötigen wir keine Kopie , sondern eine feste Verbindung, damit wir die zukünftigen Änderungen und die letzte Änderung vor dem Schließen des Prozesses vornehmen können und das System sie löschen kann.

Wenn wir die iNode-Nummer haben, gibt es eine Möglichkeit, dieses Ziel zu erreichen?

    
poe84it 12.08.2013, 21:59
quelle

3 Antworten

14

Da es keinen Syscall gibt, der iNode beinhaltet, weil es ein Konzept von extX fs ist und keine gute Praxis ist, ein Ofenrohr zu machen, aber es ist eine Kette von Verantwortlichkeit (wie MEL suggeriert), gibt es nur ein NO Antwort für diese Frage, weil wir auf VFS-Ebene Dateien Pfad und Namen und nicht andere interne Darstellungen behandeln.

ABER Um das Ziel zu erreichen, die letzte Änderung zu verfolgen, können wir eine kontinuierliche Überwachung und Duplizierung mit tail :

verwenden %Vor%

wobei PID die PID des Prozesses ist, bei der die gelöschte Datei noch geöffnet ist und FD die Dateideskriptornummer ist. Mit -f tail öffnen und halten Sie die Datei, um weitere Änderungen anzuzeigen, wobei -c + 1 vom ersten Byte bis zum Ende und mit - pid beginnt = PID Tail wird informiert, um zu beenden, wenn der Pid austritt.

    
poe84it 14.08.2013 17:10
quelle
4

Sie können lsof verwenden, um gelöschte Dateien wiederherzustellen (manchmal) ...

%Vor%

Lesen Sie unbedingt den Originalartikel, bevor Sie es versuchen, es sei denn, Sie sind ein Maveric wie ich.

%Vor%

Ссылка

Genießen

    
UberDoyle 12.08.2013 22:27
quelle
3

Es ist immer schwierig, eine Frage wie "kann ich tun" selbstbewusst zu verneinen. Aber soweit ich sehe, bieten weder / sys / nor / proc noch eine Zuordnung von offenen Dateideskriptoren, die keine Symlinks sind. Ich nehme an, mit "ABER ein Link im dir / proc zeigt immer noch darauf" meinst du, dass die / proc // fd / Einträge wie Symlinks aussehen? Ich bin mir fast sicher, dass Sie die Originaldatei nicht wiederherstellen können.

Ich nehme das zurück: Wie Benutzer user2676075 darauf hingewiesen hat, funktioniert das Kopieren. Nur hardlinking nicht ...

UPDATE : Wenn Sie darüber nachdenken, ist es ziemlich logisch.

  • / proc und / sys sind Dateisysteme, die sich von Ihrer Festplatte unterscheiden. Sie können also keine dateiähnlichen Verzeichniseinträge bereitstellen, die man mit einem Ziel auf der Festplatte verbinden könnte.
  • Die Einträge / proc / * / fd / geben vor, Symlinks zu sein, aber eigentlich sind sie anders, sonst würde das Kopieren nicht funktionieren. Ich denke, sie geben vor, symlinks zu sein, um mit 'ln -l' aussagekräftige Informationen zu liefern.

  • Was die (fehlende) Fähigkeit betrifft, auf einen Inode zu verlinken (sagen wir mal mit einem Systemaufruf): Dies kann aus folgenden Gründen nicht Teil des Kernels oder der VFS-Schnittstelle sein:

    • Es würde die Integrität des Dateisystems verletzen. Das Dateisystem sollte die Festplattenblöcke von Dateien, die vollständig gelöscht werden, nicht auf die gleiche Weise beibehalten wie Dateien, die persistent sind.

    • Die Inodes könnten ein vollständig virtuelles Konzept zur Identifizierung eines "Slots, in dem ein Datenstrom gespeichert ist" sein. Ich nehme an, dass es Implementierungen geben kann, die ein Problem haben, einen Slot zu konvertieren, der keinen Bezug zu einem Slot hat mit einem Namen im Dateisystem bezeichnet.

    Ich gebe zu, der Fall gegen die Möglichkeit eines solchen Systemaufrufs ist nicht wasserdicht. Aber angesichts des aktuellen Zustands der VFS-Schnittstelle (die AFAIR für einen solchen Aufruf nicht vorsieht), wäre es eine große Belastung für jede Dateisystemimplementierung (einschließlich z. B. verteilter Dateisysteme), einen Aufruf zum Verknüpfen einer Datei mit einer Verzeichnis nach Inode.

ATM Ich frage mich, ob der Aufruf von fstat vor und nach dem Löschen der letzten Referenz tatsächlich die gleichen Inode-Informationen zurückgeben muss ... t

    
M.E.L. 12.08.2013 22:27
quelle

Tags und Links