Wie kann ich eine entfernte Datei unter Linux wiederherstellen?

249269
HaiYuan Zhang

Zufällig habe ich rmeine Datei verwendet, die ich nicht löschen wollte. Gibt es eine Möglichkeit, wie ich es unter Linux zurückbekomme?

63
@Nav, `rm` ist ein" gefährlicher "UNIX / Linux-Befehl (lese` $ man rm`). ** Verwenden Sie es mit äußerster Vorsicht **. Damit können Sie sicher Dateien löschen, die Sie sicher sind. Moderne Linux- und Unix-Desktop-Umgebungen bieten eine Lösung von * "Trash Can" *, sodass der Benutzer versehentlich gelöschte Dateien problemlos wiederherstellen kann. Jose Elera vor 11 Jahren 0
Weitere aktuelle Antworten: http://unix.stackexchange.com/questions/122305/undelete-a-just-deleted-file-on-ext4-with-extundelete Ben Crowell vor 9 Jahren 1
Verwenden Sie "rm" nicht, wenn Sie die Dateien in Zukunft wiederherstellen möchten. Verwenden Sie stattdessen das Dienstprogramm "rm-trash": https://github.com/nateshmbhat/rm-trash Natesh bhat vor 5 Jahren 0

15 Antworten auf die Frage

47
Gabriel L. Oliveira

Es folgen allgemeine Schritte zum Wiederherstellen von Textdateien.

  1. Verwenden Sie zunächst den Befehl wall, um dem Benutzer mitzuteilen, dass das System in einem Einzelbenutzermodus heruntergefahren ist:

    # wall System is going down to .... please save your work. 

    Drücken Sie STRG + D, um die Nachricht zu senden.

  2. Verwenden Sie anschließend den Befehl init 1, um das System in einen Einzelbenutzermodus zu bringen:

    # init 1 
  3. Verwenden von grep (herkömmliche UNIX-Methode) zum Wiederherstellen von Dateien

    Verwenden Sie folgende Grep-Syntax:

    grep -b 'search-text' /dev/partition > file.txt 

    ODER

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt 

    Woher,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character. -a : Process a binary file as if it were text -B Print number lines/size of leading context before matching lines. -A: Print number lines/size of trailing context after matching lines. 

    Um eine Textdatei wiederherzustellen, die mit dem Wort "nixCraft" in / dev / sda1 beginnt, können Sie den folgenden Befehl versuchen:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt 
  4. Als nächstes verwenden Sie vi, um file.txt anzuzeigen.

    Diese Methode ist NUR nützlich, wenn die gelöschte Datei eine Textdatei ist. Wenn Sie das Dateisystem ext2 verwenden, probieren Sie den Befehl restore aus.

Gefunden bei http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html

Beachten Sie, dass dies nicht möglich ist. Der Einzelbenutzermodus schaltet das Netzwerk aus Quinma vor 10 Jahren 15
Diese Methode funktioniert wunderbar für Textdateien, danke! Was mir dabei gefällt, ist, dass es nicht auf das Journal des Dateisystems angewiesen ist (wie extundelete), sondern tatsächlich die rohen Bytes des gesamten Laufwerks durchsucht. Wenn dieser Befehl Ihre Datei nicht findet, wird nichts angezeigt. Benjamin B. vor 9 Jahren 1
@Quinma, diese Methode * kann * mit nur geringfügigen Änderungen remote arbeiten ... Anstatt 'init 1' auszuführen, müssen Sie alle System-Daemons mit Ausnahme von 'sshd' manuell beenden. Ich denke auch, dass Sie an diesem Punkt alle Dateisysteme RO neu mounten und in tmpfs speichern sollten (vorausgesetzt, Ihre temporären Dateien passen in RAM), um ein Überschreiben der Dateien mit den temporären Daten zu vermeiden. Sie müssen ihn natürlich später an einen anderen Ort kopieren, entweder auf einen Remote-Server oder zurück in lokale Dateisysteme, nachdem er RW erneut gemountet hat. Thomas Guyot-Sionnest vor 8 Jahren 1
was ist deine_partition ??? Ich habe Fehler: / dev / sda1: Keine solche Datei oder Verzeichnis coolcool1994 vor 7 Jahren 0
@ coolcool1994 Ich habe dieses System nicht mehr, kann also nicht vollständig testen. Versuchen Sie es mit "/ dev / sda" und prüfen Sie auch, ob Sie eine Partition mit dem Namen "/ dev / sda1" innerhalb von "/ dev" haben Gabriel L. Oliveira vor 7 Jahren 0
Ich habe ein Mac-System. Ich habe in disk0, disk0s1 und allen anderen Datenträgerdateien nachgesehen, konnte jedoch die verlorene Datei nicht finden (vielleicht, weil ich die Datei überschrieben habe). coolcool1994 vor 7 Jahren 0
Es tut mir leid, aber ich kann nicht mehr helfen. Beim Durchsuchen habe ich diesen Link [1] gefunden, der Ihnen bei der Verwendung von Time Machine oder Free Recovery-Software helfen kann. [1] http://www.wikihow.com/Recover-AccidentallyDeleted-Files-in-OS-X Gabriel L. Oliveira vor 7 Jahren 0
Kann ich den zweiten Schritt `# init 1` überspringen? Qback vor 6 Jahren 0
@Qback, ich weiß es wirklich nicht. Wie gesagt, ich bin einfach Schritt für Schritt gefolgt. Aber der init 1 ist für administrative Aufgaben gedacht und möglicherweise ist der Kill-Prozess nicht mit diesem Runlevel-Szenario verbunden. Dies kann dazu beitragen, die Verwendung von Festplatten zu verhindern, indem die wiederherzustellende Datei überschrieben wird. Gabriel L. Oliveira vor 6 Jahren 1
13
Sjoerd
  • Wenn es sehr wichtig ist, nehmen Sie die Diskette vom Computer und beauftragen Sie eine Firma, die dies für Sie erledigt.
  • Wenn es nur sehr wichtig ist, mounten Sie die Festplatte schreibgeschützt, kopieren Sie die gesamte Partition mithilfe von in eine Datei ddund versuchen Sie, die Datei darin zu finden (mit grepoder einem Editor).

Edit: ddrescuefunktioniert manchmal besser als dd.

"versuche die Datei darin zu finden" Ich bin verwirrt, wie würde man vernünftigerweise eine 15-GB-Datei öffnen und dieses Biest in grep suchen oder pfeifen? Und was würden Sie tun, wenn Sie den Text gefunden hätten? Wie in aller Welt ist diese Erholung? TheLQ vor 13 Jahren 1
Als Erstes sollten Sie einige gängige Tools ausprobieren, bevor Sie für ein unsicheres Ergebnis viel Geld verbrennen. Übrigens, grep wird nicht wirklich helfen, photorec oder ext3grep werden es tun. wazoox vor 13 Jahren 1
9
zaynyatyi

Wenn Ihr Dateisystem ext3 ist, verwenden Sie ext3grep .

7
James T

Testdisk hat eine undelete-Option, die unter Linux funktionieren sollte.

Es gibt eine Komplettlösung für Linux . Beachten Sie, dass es für ext2, ext3 und ext4 funktioniert .

Extundelete ist auch praktisch, wenn die Partition ext3 / 4 ist. Zuerst müssen Sie jedoch die Partition aushängen. billc.cn vor 12 Jahren 0
5
cHao

Wenn es der Standard - rm, hoffe ich, dass Sie eine Sicherung haben. Das Verfahren zum Wiederherstellen einer gelöschten Datei ist für jedes Dateisystem unterschiedlich, wenn dies überhaupt möglich ist. Linux hat keinen eingebauten "Papierkorb"; Wenn Sie eine Datei löschen, ist sie fast vollständig weg.

Sie müssen den Computer auf jeden Fall vom Computer trennen. Sobald der Computer weiter betrieben wird (auch wenn er heruntergefahren wird), führt dies zu Schreibzugriffen auf die Festplatte Die Datei wird überschrieben. Wenn Sie dies getan haben, legen Sie es entweder in einen anderen Computer ein, starten Sie es von einer Live-CD neu (stellen Sie sicher, dass das Laufwerk nicht eingebunden ist, wenn Sie es nicht schreibgeschützt bereitstellen), oder entfernen Sie die Festplatte und bringen Sie sie zu einem Spezialisten für Datenwiederherstellung.

4
wazoox
  • Die einzig richtige Antwort ist: Wiederherstellen Sie Ihre Datei von der Sicherung. Jeder muss eine Sicherung haben. Für wirklich wichtige Dateien sollten Sie zwei Sicherungen haben. Du nicht Tja, zu schade, hier ist eine Lektion gelernt (Tut mir leid, hart zu klingen, aber ich bin in der Datenspeicherung, und die Leute sichern sich nicht, bis sie wichtige Daten verloren haben, das ist eine Tatsache so ist fast jeder andere).

  • OK, du hast keine Sicherung. Sie müssen aufhören, das Dateisystem zu verwenden, in dem sich JETZT die Datei befindet . Jede Schreibaktivität kann definitiv die Dateidaten zusammenfügen, die ( möglicherweise ) nur auf der Festplatte verbleiben können.

  • Wenn Sie den tragischen Fehler gemacht haben, nur eine Partition als Root-Dateisystem und / home zu verwenden, müssen Sie von einem anderen Gerät booten. JETZT .

  • Wenn Ihre Datei ein allgemeines Format hat (Word-Datei, JPG usw.), verwenden Sie Photorec . Photorec kann die gängigsten Dateiformate abrufen.

  • Sie können die zuvor vorgeschlagene "ext3 undelete" -Methode ausprobieren, aber Sie müssen mit der Befehlszeile vertraut sein, die grundlegenden Funktionen von Linux verstehen usw.

  • Wenn Ihre Datei ein spezielles Format hat, ist das ein Pech. Ich habe einmal ein Perl-Programm geschrieben, um ein Laufwerk nach speziellen Dateien zu durchsuchen, und es hat ziemlich gut funktioniert; Sie müssen jedoch einige Programmierkenntnisse haben, um das zu tun, und auch mit Linux können Sie sich gut auskennen.

4
PriceChild

Setzen Sie Ihre Erwartungen niedrig. Wenn etwas über die gelöschten Daten geschrieben wurde, verlieren Sie diese.

Ich habe eine kleine Menge der Wiederherstellung durchgeführt und die besten Tools, die ich gefunden habe, waren oft auf bestimmte Formate ausgerichtet. Zum Beispiel war 'photorec' großartig, als ich Zehntausende von JPEG-Dateien wiederherstellen wollte.

Recuva hat mir auch schon früher geholfen und könnte Ihre beste Wahl sein. (Es ist kostenlos, lassen Sie sich nicht durch ihre Anzeigen bezahlen)

Wenn das, was Sie verloren haben, am Ende des Tages wichtig ist, schalten Sie das Laufwerk offline und hören Sie mit dem Schreiben auf. Verwenden Sie jede Wiederherstellungssoftware, die Sie finden können, bis Sie Ihre Daten zurückerhalten haben oder es sich nicht mehr lohnt. Wenn es wirklich wichtig ist, senden Sie es zu einem hohen Preis an Profis.

Wenn Sie zuvor mit einem Werkzeug Glück hatten, versuchen Sie es erneut, wenn Sie es kennen. Am Ende des Tages sollten sie nicht auf die Festplatte schreiben. Sie können also Software verwenden, bis Sie eine gefunden haben, die funktioniert.

4
Daniel Andersson

Ich habe das vor ein paar Jahren gemacht. Mein Ansatz war es, keine Zeit zu verlieren, die Partition aufzuheben und dann

dd if=/dev/hda1 of=backup_image.ext3 

eine Sicherungsdatei mit dem genauen Status der Partition. Dann können Sie die Partition erneut einbinden und wie gewohnt weiterarbeiten, während Sie nach der gelöschten Datei in Ihrem erstellten Image suchen. Das Bild wird wahrscheinlich SEHR groß sein, da Sie den gesamten "leeren" Speicherplatz benötigen. Daher kann es ein praktisches Problem sein, das Bild zu speichern.

Dann waren es nur langweilige Suchen nach Textausschnitten, von denen ich erwartet hatte, dass sie sich irgendwo in der Suppe des Partitionsinhalts befinden. Um zB .tex-Dateien zu finden, lief ich

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles 

Dabei wurde ein großer Kontext um den Ausdruck "Unterabschnitt" gedruckt und die Ausgabe in einer Datei gespeichert, um sie manuell zu durchsuchen. Ich habe einen so großen Kontext gedruckt, da das Suchen so lange dauerte, dass ich es lieber nicht öfter als nötig machen würde.

Der Befehl stringswar auch hilfreich beim Entfernen von Binärmüll aus der Ausgabe, aber wenn ich mich richtig erinnere, wurden auch alle Zeilenumbrüche entfernt, was ein Problem darstellen könnte.

Um Binärdateien auf die gleiche Art und Weise zu finden, könnte es gelingen, einen charakteristischen Header oder etwas von einer bestimmten Datei zu finden, aber ich stelle mir vor, dass dies ein ziemlich großes Abenteuer ist.


Kurze technische Anmerkungen: Es gibt technische Probleme bei der Festplattenwiederherstellung und bei Ext3 / 4. Es ist eine lange Sache, aber kurz (und unzureichend) zu erklären: Ext3 / 4 entfernt die "Markierungen", die dem Betriebssystem mitteilen, wo sich Dateien auf der Festplatte befinden, wenn Sie sie löschen. Die Dateien werden nicht gelöscht, aber niemand weiß, wo auf der Festplatte sie beginnen und enden, und manchmal sind sie sogar an mehreren Stellen fragmentiert. Einige andere Dateisysteme setzen den Status der Dateien auf "Gelöscht", behalten jedoch die Standortdaten bei. Undelete ist dann nicht schwieriger als Dateizeiger mit diesem Flag zu betrachten (sie sollten noch verfügbar sein, wenn nicht zu viele Aktivitäten stattgefunden haben) und hoffen, dass der Inhalt nicht überschrieben wurde.

Was ist das beste? Aus meiner Sicht rhetorisch. Häufige Backups sind die Antwort auf all diese Probleme. Wichtige Daten ohne ein automatisiertes Backup-System sind laut IMHO ein zufälliger Unfall.


Obligatorische persönliche Anekdote: Ich wollte entfernen foo\ foo*aus ~. Ich hab geschrieben

rm -r foo<Tab>* 

, was leider, da fooanscheinend ein Symlink war und die einzige dazu passende Datei war, die Shell gemacht

rm -r foo\ foo * 

Ich drückte die Eingabetaste und saß da ​​und schaute auf den Befehl, der höchstens eine Sekunde hätte dauern sollen. Nach einiger Zeit rmfragte ich mich, ob ich "die schreibgeschützte Datei etwas entfernen" wollte. Ziemlich schnell spürte ich die Schüttelfrost und leise und sehr kontrolliert drückte ich Ctrl+c. ~ Die Hälfte von mir ~wurde gelöscht, aber es gelang mir, alles durch das oben beschriebene Grepping und einige mehr oder weniger aktuelle Sicherungen wiederherzustellen. Ich hatte einige sehr wertvolle (gelesen: zeitraubende) und sehr kürzlich gemessene Messdaten auf der Festplatte, die verloren gingen, aber ich hatte vierfache Sicherungen gemacht. Eines verschwand hier, ein anderes wegen eines Systemausfalls in der Schule, ein anderes war korrupt, und ich konnte das vierte nicht finden, da ich es aus Versehen in den falschen Ordner gelegt hatte :-D. Hatte nichtrm -rblieb eine schreibgeschützte Datei hängen, die vierte wäre gegessen worden, seit dieser Ordner über sshfs in meinem eingebunden wurde ~. Ich bin seit dem sehr viel vorsichtiger.

2
Michał Šrajer

Hier ist ein großartiges Dokument für Sie. Dort finden Sie viele praktische Tipps.

Übrigens gibt es zwei Gruppen von Menschen:

  1. diejenigen, die Backups machen
  2. diejenigen, die Backups machen werden

Herzlichen Glückwunsch, Sie haben sich gerade für Gruppe 2 befördert. ;-)

2
dotancohen

Wenn Sie eine Anwendung geöffnet haben, die gerade die Datei liest, wie z. B. VLC oder LibreOffice, hat mir diese großartige Antwort von L & U.SO aus diesem Schlamassel geholfen. Hier ist eine alternative Methode, um dasselbe zu tun.

Die allgemeine Idee ist, den Link in zu finden /proc/PID/fd/DESCRIPTOR_NUMBERund ihn an seinen ursprünglichen Ort zu kopieren. Verwenden Sie ps aux | grep APP_NAMEdiese Option, um die PID zu suchen und anschließend ls -la /proc/PID/fd/die richtige DESCRIPTOR_NUMBER zu finden.