Wie kann ich eine entfernte Datei unter Linux wiederherstellen?


63

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


@Nav, rm ist ein "gefährlicher" UNIX / Linux Befehl (read $ man rm ). Verwenden Sie es mit äußerster Vorsicht . Trotzdem ist es eine schnelle Möglichkeit, Dateien zu löschen, bei denen Sie sich sicher sind. Moderne Linux- und Unix-Desktop-Umgebungen bieten eine Lösung von "Mülleimer" , so dass der Benutzer versehentlich gelöschte Dateien leicht wiederherstellen kann.
Jose Elera

1
Noch ein paar aktuelle Antworten: unix.stackexchange.com/questions/122305/…
Ben Crowell

Verwenden Sie nicht "rm", wenn Sie die Dateien in Zukunft wiederherstellen möchten. Verwenden Sie stattdessen das Dienstprogramm "rm-trash": github.com/nateshmbhat/rm-trash
Natesh bhat

Antworten:


48

Im Folgenden sind allgemeine Schritte zum Wiederherstellen von Textdateien aufgeführt.

  1. Verwenden Sie zuerst den Befehl wall, um dem Benutzer mitzuteilen, dass das System in einem Einzelbenutzermodus heruntergefahren wird:

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

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

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

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

    Verwenden Sie die 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" auf / dev / sda1 beginnt, können Sie folgenden Befehl ausführen:

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

    Diese Methode ist NUR nützlich, wenn es sich bei der gelöschten Datei um eine Textdatei handelt. Wenn Sie das ext2-Dateisystem verwenden, probieren Sie den Befehl recover aus.

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


15
Es ist zu beachten, dass Sie diesen Einzelbenutzermodus NICHT FERN TUN KÖNNEN, um das Netzwerk zu deaktivieren
Quinma

1
Diese Methode wirkt Wunder für Textdateien, danke! Was ich daran mag, ist, dass es nicht auf das Journal des Dateisystems angewiesen ist (wie Extundelete), sondern stattdessen die unformatierten Bytes des gesamten Laufwerks durchsucht. Wenn dieser Befehl Ihre Datei nicht findet, geschieht nichts.
Benjamin B.

1
@Quinma, diese Methode können Arbeiten Sie aus der Ferne mit nur geringfügigen Änderungen ... Anstatt zu laufen init 1, töte manuell alle System-Daemons außer sshd. Ich denke auch, an diesem Punkt sollten Sie alle Dateisysteme RO wieder einbinden und auf tmpfs speichern (vorausgesetzt, Ihre temporären Dateien passen in RAM), um zu vermeiden, dass die Dateien mit den temporären Daten überschrieben werden. Sie müssen es natürlich später an eine andere Stelle kopieren, entweder auf einen Remote-Server oder zurück in ein lokales Dateisystem, nachdem Sie RW erneut gemountet haben.
Thomas Guyot-Sionnest

was ist deine_partition ??? Ich habe Fehler: / dev / sda1: Keine solche Datei oder Verzeichnis
coolcool1994

1
@ Qback, ich weiß es wirklich nicht. Wie gesagt, ich bin nur Schritt für Schritt gefolgt. Aber der init 1 ist für administrative Aufgaben gedacht und kann einen Prozess beenden, der nicht mit diesem Runlevel-Szenario zusammenhängt. Dies kann dazu beitragen, die Verwendung der Festplatte zu verhindern und die wiederherzustellende Datei zu überschreiben.
Gabriel L. Oliveira

13
  • Wenn es sehr, sehr wichtig ist, nehmen Sie den Datenträger aus dem Computer und beauftragen Sie eine Firma, dies für Sie zu tun.
  • Wenn es nur sehr wichtig ist, mounten Sie die Festplatte schreibgeschützt und kopieren Sie die gesamte Partition mit in eine Datei dd und versuchen Sie, die Datei darin zu finden (mit grepoder einen Editor).

Bearbeiten: manchmal ddrescue funktioniert besser als dd.


1
"versuche die Datei darin zu finden" Ich bin verwirrt, wie würde man eine Datei mit mehr als 15 GB vernünftigerweise öffnen und dieses Biest in grep suchen oder pfeifen? Und was würdest du tun, wenn du den Text gefunden hast? Wie um alles in der Welt ist diese Erholung?
TheLQ

1
Das erste, was Sie tun müssen, ist, einige gängige Tools auszuprobieren, bevor Sie eine Menge Geld für ein ungewisses Ergebnis verbrauchen. Übrigens wird grep nicht wirklich helfen, photorec oder ext3grep.
wazoox



5

Wenn es der Standard ist rm Ich hoffe du hast ein Backup. Das Verfahren zum Wiederherstellen einer gelöschten Datei ist für jedes Dateisystem unterschiedlich, sofern dies überhaupt möglich ist. Linux hat keinen eingebauten "Papierkorb"; Sobald Sie eine Datei löschen, ist sie so gut wie verschwunden.

Wie auch immer Sie es tun, Sie möchten den Computer vom Stromnetz trennen - sobald es möglich ist, da das Fortfahren des Computers (auch das Herunterfahren) Schreibvorgänge auf den Datenträger verursacht und die Wahrscheinlichkeit erhöht, dass einige Blöcke zuvor vom Computer belegt wurden Datei wird überschrieben. Sobald Sie dies getan haben, stecken Sie es entweder in einen anderen Computer, und starten Sie a neu Live-CD (Stellen Sie sicher, dass Sie das Laufwerk nur aktivieren, wenn Sie es schreibgeschützt aktivieren), oder entfernen Sie das Festplattenlaufwerk und bringen Sie es zu einem Datenrettungsspezialisten.


4
  • Die einzig richtige Antwort lautet: Stellen Sie Ihre Datei von einem Backup wieder her. Jeder muss ein Backup haben. Für wirklich wichtige Dateien sollten Sie zwei Backups haben. Sie nicht? Nun, schade, hier ist eine Lektion gelernt (Entschuldigung, das hört sich hart an, aber ich bin in der Datenspeicherung und die Leute sichern nicht, bis sie einige wichtige Daten verloren haben, das ist eine gegebene Tatsache. Also ja, du siehst dumm aus, aber so ist fast jeder andere).

  • OK, Sie haben keine Sicherung. du musst halt Verwenden des Dateisystems, in dem sich die Datei befindet JETZT SOFORT . Jede Schreibaktivität kann definitiv die Dateidaten zerstören kann (nur kann ) bleiben auf der Festplatte.

  • Wenn Sie den tragischen Fehler gemacht haben, nur eine Partition als Root-Dateisystem und / home zu verwenden, bedeutet dies, dass Sie Muss Booten Sie von einem anderen Gerät. JETZT .

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

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

  • Wenn Ihre Datei ein spezielles Format hat, haben Sie Pech. Ich habe einmal ein Perl-Programm geschrieben, um ein Laufwerk nach bestimmten Dateien zu durchsuchen, und es hat ziemlich gut funktioniert. Aber Sie müssen einige Programmierkenntnisse haben, um dies zu tun, und Sie müssen auch mit Linux vertraut sein.


4

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

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

um eine Sicherungsdatei mit dem genauen Status der Partition zu haben. Anschließend können Sie die Partition erneut bereitstellen und wie gewohnt 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, sodass das Speichern möglicherweise ein praktisches Problem darstellt.

Dann war es nur eine langweilige Suche nach Textausschnitten, von denen ich erwartet hatte, dass sie irgendwo in der Suppe der Partitionsinhalte stecken. Z.B. um 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, die manuell durchsucht werden kann. Ich habe einen so großen Kontext gedruckt, da die Suche nach dem Bild so lange gedauert hat, dass ich es lieber nicht öfter als nötig machen würde.

Auch der Befehl strings war hilfreich beim Entfernen von binärem Müll aus der Ausgabe, aber wenn ich mich richtig erinnere, wurden auch alle Zeilenumbrüche entfernt, was ein Problem sein könnte.

Um Binärdateien auf die gleiche Weise zu finden, ist es vielleicht erfolgreich, einen charakteristischen Header oder etwas von einer bestimmten Datei zu finden, aber ich stelle es mir als ein ziemlich großes Abenteuer vor.


Kurze technische Hinweise: Es gibt technische Probleme mit der Festplattenwiederherstellung und Ext3 / 4. Es ist eine lange Sache zu erklären, aber kurz (und unzulänglich): Ext3 / 4 entfernt die "Marker", die dem Betriebssystem mitteilen, wo sich Dateien auf der Festplatte befinden, wenn Sie sie löschen. Die Dateien werden nicht gesäubert, aber niemand weiß mehr, wo sie auf der Festplatte beginnen und enden, und manchmal sind sie sogar an mehreren Stellen fragmentiert. Einige andere Dateisysteme setzen lediglich den Status der Dateien auf "gelöscht", behalten jedoch die Standortdaten bei. Dann ist das Wiederherstellen nicht schwieriger, als Dateizeiger mit diesem Flag zu betrachten (sie sollten immer noch verfügbar sein, wenn nicht zu viel Aktivität stattgefunden hat), und dann zu hoffen, dass ihr Inhalt nicht überschrieben wurde.

Was ist das beste? Meiner Meinung nach rhetorisch. Häufiges Backup ist die Antwort auf all diese Probleme. Wichtige Daten ohne automatisiert Backup-System ist ein Unfall, der darauf wartet, passieren zu können, IMHO.


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

rm -r foo<Tab>*

, die leider seit foo anscheinend war ein symlink und die einzige datei die dazu passte, die shell in gemacht

rm -r foo\ foo *

Ich drückte die Eingabetaste und schaute auf den Befehl, der höchstens eine Sekunde hätte dauern sollen. Nach etwas längerer Zeit rm fragte mich, ob ich "die schreibgeschützte Datei" etwas "entfernen wolle. Ziemlich schnell spürte ich die Schüttelfrost und drückte sanft und sehr kontrolliert Ctrl+c. ~ Die Hälfte von mir ~ wurde gelöscht, aber ich habe es geschafft, durch das oben beschriebene Greifen und einige mehr oder weniger aktuelle Backups alles wieder von Wert zu bekommen. Ich hatte einige persönlich sehr wertvolle (gelesen: zeitaufwendige) und sehr aktuelle Messdaten auf der Festplatte, die verloren gingen, aber ich hatte vierfache Backups erstellt. Einer verschwand hier, ein anderer wegen eines Systemausfalls in der Schule, ein anderer war korrupt, und der vierte konnte ich zunächst nicht finden, da ich ihn versehentlich in den falschen Ordner gelegt hatte :-D. Hatte nicht rm -r steckte auf einer schreibgeschützten Datei, der vierte wäre gegessen worden, da dieser Ordner über sshfs in meinem eingehängt wurde ~. Ich bin da viel vorsichtiger mit solchen Sachen.


4

Setze deine Erwartungen niedrig. Wenn etwas über die 'gelöschten' Daten geschrieben wurde, werden Sie es verlieren.

Ich habe eine kleine Menge an Wiederherstellungen durchgeführt und die besten Tools, die ich gefunden habe, wurden häufig für bestimmte Formate entwickelt. Zum Beispiel war 'photorec' großartig, als ich Zehntausende von JPEGs retten wollte.

Recuva hat mir auch schon mal geholfen und könnte deine beste wahl sein. (Es ist kostenlos, lassen Sie sich nicht dazu verleiten, durch ihre Anzeigen zu bezahlen.)

Wenn das, was Sie verloren haben, am Ende des Tages wichtig ist, schalten Sie das Laufwerk aus und hören Sie auf, darauf zu schreiben. Verwenden Sie jede Wiederherstellungssoftware, die Sie finden, bis Sie Ihre Daten zurückbekommen oder sie sich nicht mehr lohnen. Wenn es wirklich wichtig ist, senden Sie es zu einem hohen Preis an Profis.

Wenn Sie schon einmal Glück mit einem Werkzeug hatten, versuchen Sie es noch einmal, da Sie damit vertraut sind. Am Ende des Tages sollten sie nicht auf die Festplatte schreiben, und so können Sie Software verwenden, bis Sie eine finden, die funktioniert.


2

Hier ist ein tolles dokumentieren für dich. 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 in Gruppe 2 befördert. ;-)


2

Wenn Sie eine Anwendung geöffnet haben, die gerade die Datei liest, z. B. VLC oder LibreOffice, dann Diese großartige L & amp; U.SO-Antwort half mir aus diesem Chaos heraus. Hier ist eine alternative Methode dafür, dasselbe zu tun.

Die allgemeine Idee ist, den Link in zu finden /proc/PID/fd/DESCRIPTOR_NUMBER und kopieren Sie es zurück an seinen ursprünglichen Speicherort. Benutzen ps aux | grep APP_NAME um die PID zu finden und dann ls -la /proc/PID/fd/ um die richtige DESCRIPTOR_NUMBER zu finden.


1

Die "richtige" Antwort ist, anzunehmen, dass es keine Methode gibt, um zuverlässig wiederherzustellen, und stattdessen von Backups oder einem geklonten System wiederherzustellen oder neu zu installieren.

TestDisk ist ein großartiges Tool. Abhängig vom Dateisystem und der Aktualität des Löschvorgangs gibt es auch andere Möglichkeiten, Daten vom physischen Laufwerk zu retten HALTEN SIE DIE RÜCKEN (und testen Sie auch, ob sie gültig und wiederherstellbar sind)!


1

Wenn es nicht von anderen Benutzern überschrieben wird, haben Sie Glück. Ich habe versehentlich meine cpp-Quelldatei gelöscht und ein Tool namens verwendet zuallererst , was mir geholfen hat, 60G cpp-Trümmer von der Festplatte wiederherzustellen. Schließlich stellte ich meine Akte wieder her, indem ich diese Trümmer Stück für Stück zusammensetzte. Ich denke, es scannt bestimmte Muster für bestimmte Dateitypen und durchläuft alle Inodes auf der Festplatte, um Dateien wiederherzustellen! Probieren Sie es einfach aus!


0

Wenn Sie die Datei versehentlich von Linux gelöscht haben, können Sie diesen Befehl verwenden:

find /root -name "search text" -type f  -exec mv {} "/home" \;

anstelle von search text Sie können den Dateinamen und das Verzeichnis angeben, in dem Sie wiederherstellen möchten, anstatt /home.


2
Hallo Santosh. Bitte fügen Sie Ihren Posts keine irreführenden Links hinzu. Es wurde entfernt.
ᔕᖺᘎᕊ

0

Sie können dieses Skript ausprobieren. Funktioniert gut und soll anstelle von rm verwendet werden und ich benutze es jetzt ausgiebig.

https://github.com/nateshmbhat/safe-rm

Eigenschaften :

  • soll anstelle von rm verwendet werden
  • behandelt alle Argumente, die rm annehmen kann
  • behandelt die Kollisionen von Dateinamen mit den Dateien, die sich bereits im Papierkorb befinden
  • behandelt einige Berechtigungsprobleme automatisch
  • Wird rm von einem anderen Skript oder indirekt aufgerufen, wird automatisch der Systembefehl 'rm' verwendet
  • zeigt die entsprechenden Fehlermeldungen an, wie sie in auftreten rm

-2

Ich hatte letzte Woche das gleiche Problem und habe viele Programme ausprobiert, wie Debugfs, Photorec, Ext3Grep und Extundelete. ext3grep war das beste Programm, um Dateien wiederherzustellen. Die Sintax ist sehr einfach:

ext3grep image.img --restore-all

oder:

ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’

Dieses Video shows ist ein Mini-Tutorial, das Ihnen helfen kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.