Linux: Versehentlich gelöschte Dateien wiederherstellen

  • Hallo ihr da draussen ;)



    Meine gestrige Problemstellung war: Ich hatte in einem Ordner auf meiner externen Festplatte (mit dem Dateisystem ext3 formatiert) eine ISO-Datei und eine Datei ohne Dateiendung (Die Datei hiess nur Unbenanntes Textdokument).


    Ich war in der Konsole am daddeln und wollte diese Unbenanntes Textdokument löschen - allerdings ohne den Dateinamen auszuschreiben sondern habe einfach angegeben: rm * ( In der Annahme die ISO-Datei würde dadurch ja erhalten bleiben, sonst hätte ich ja gleich angeben können rm *.iso - falsch gedacht, Denkfehler passieren ).


    Bei der ISO-Datei handelte es sich um die gerade einen Tag zuvor heruntergeladene DVD 1 der Debian-Distribution in der aktuellen Version.


    Soweit, so unangenehm. Wie stelle ich jetzt diese Datei wieder her?
    Ich bin ja nun nicht ganz so dämlich, für wie man mich manchmal halten kann. Ich habe die Synaptic-Paketverwaltung mal gestartet und einfach mal als Suchwort "undelete" eingegeben - und wurde daraufhin fündig auf das Programmchen "extundelete" (ist ein Konsolenprogramm).


    So - und wie stellt man damit nun gelöschte Dateien wieder her? =) Es geht, und ich verrate euch jetzt, wie.



    Das Programm installieren.
    Wer das über die Konsole installieren möchte:


    sudo apt-get install extundelete


    Wer es über seine Paketverwaltung machen möchte, einfach mal extundelete im Suchformularfeld eingeben. Das Programm befindet sich bei Debian in den offiziellen Repos - es ist also keine Änderung der sources.list erforderlich.



    Für eine sinnvolle Nutzung des Programms scheint es erforderlich zu sein, dass die zu verwendende Festplatte/Diskette/Stick/was auch immer NICHT gemountet ist - denn nur dann funktionierte das überhaupt bei mir ohne dass er eine Warnung ausgespuckt hat ;)


    Die externe Festplatte, um die es geht, ist bei mir /dev/sdb1
    Da das Programm eh ein Konsolenprogramm ist, habe ich auch den Unmount über die Konsole bewerkstelligt:


    umount /dev/sdb1


    Für die Wiederherstellung der Datei reichte es für mich aus, einfach mal zu versuchen, ALLE gelöschten Dateien wiederherzustellen.


    extundelete --restore-all /dev/sdb1


    Die so wiederhergestellten Dateien werden allerdings nicht auf der betreffenden Festplatte gespeichert (sie ist ja nicht gemountet), sondern im Homeverzeichnis des Benutzers in einem Unterordner namens RECOVERED_FILES.


    Von dort kann man sie dann nachdem man seine Festplatte/Stick/Whatever wieder gemountet hat, kann man die Dateien aus dem RECOVERED_FILES Unterordner ganz gewöhnlich wieder auf die Platte / den Stick / Whatever verschieben


    extundelete Funktioniert für ext3- und ext4 - Partitionen.


    Bearbeitung by Ratgeber 07.03.2014:
    Bild hier hochgeladen, damit es immer zusammen mit dem Beitrag erreichbar ist

    "Ich weiß nicht, wer mich in die Welt gesetzt hat, und auch nicht, was mein Körper, meine Seele, meine Sinne und jener Teil meines Ichs sind, der denkt. Ich sehe überall nur Unendlichkeiten, die mich wie ein Atom und wie einen Schatten einschließen." (Blaise Pascal)

    3 Mal editiert, zuletzt von Ratgeber ()

  • Korrektur : Der Unterordner RECOVERED_FILES wird nicht per Default im home-Ordner angelegt, sondern dort, von wo aus extundelete aufgerufen wird.


    Heisst :


    Wenn ich auf den Stammordner einer weiteren Festplatte wechsel :


    cd /media/ZweitePlatte/
    extundelete --restore-all /dev/sdb1


    Wird im Ordner /media/ZweitePlatte der Unterordner RECOVERED_FILES anzulegen versucht.


    Also immer von dort starten, wo auch genügend Speicherplatz für die voraussichtlich wiederherzustellenden Daten ist UND wo auch Schreibrechte für vorhanden sind.

    "Ich weiß nicht, wer mich in die Welt gesetzt hat, und auch nicht, was mein Körper, meine Seele, meine Sinne und jener Teil meines Ichs sind, der denkt. Ich sehe überall nur Unendlichkeiten, die mich wie ein Atom und wie einen Schatten einschließen." (Blaise Pascal)

  • Eine kleine Erklärung dazu, warum die Partition/Festplatte nicht gemountet sein darf (betrifft auch neuere Windows-Versionen)


    Die wiederherzustellenden Dateien befinden sich in einem Bereich, der für das erneute Beschreiben freigegeben ist.
    Sobald die Platte eingehängt/gemounted ist, besteht die Gefahr, dass die freigegebenen Speicherbereiche vom Betriebssystem durch neue Dateien überschrieben werden.


    Beispiel:
    Während man eine Datei wieder herstellt, wird der Speicherbereich der nächsten wiederherzustellenden Datei durch die wiederhergestellte Datei bereits erneut überschrieben.
    Das Betriebssystem bemerkt diese Überschreibung aber nicht, sondern macht munter weiter, die anfangs gefunden Dateien wieder herzustellen.
    Irgendwann ist es dann an dem Punkt angekommen, an dem eine der bereits überschriebenen Bereiche wieder hergestellt werden sollen. Hier liegen dann andere Dateien und die Wiederherstellung ist in diesem Durchgang nicht mehr möglich. Die Datei kann nicht mehr gefunden werden.


    Das Linux-Programm berücksichtigt das also nur und lässt deshalb die Wiederherstellung nur zu, wenn die freien Bereiche nicht mehr direkt überschrieben werden können.


    Benutzt man ein anderes Programm oder Windows, sollte man bei der Wiederherstellung immer darauf achten, dass sich sowohl das Rettungsprogramm als auch der Bereich, in dem die wiederhergestellten Dateien abgelegt werden, auf einer anderen Partition befinden, um irrtümliches Überschreiben zu verhindern.


    Wer einen Löschfehler gemacht hat, sollte immer sofort das entsprechende Laufwerk aushängen/unmounten und den Rechner bis dahin nicht weiter nutzen. Jede Aktion mit/auf der betreffenden Partition sorgt sonst für ein Überschreiben der freigegebenen Speicherbereiche.


    Solltet ihr doch einmal den Fehler gemacht haben, dass die wiederherzustellenden Dateien überschrieben werden, müsst ihr die Rettung der gewünschten Dateien immer noch nicht aufgeben.
    Auch mit dem Überschreiben ist die zu rettende Datei immer noch nicht endgültig verloren. Man kann sie, mit entsprechender Software, immer noch retten.
    Mit jedem Überschreiben wird es aber immer schwerer sie komplett herzustellen. Die Qualität der zu rettenden Datei nimmt immer weiter ab und immer mehr Daten der Datei gehen verloren.


    Ein gutes Rettungstool versucht nicht nur die erste Ebene der Dateien wieder herzustellen, sondern greift auch auf die "nächsttieferen" zu. Das kann dann dazu führen, dass man aus einer ein paar Hundert MB großen Partition, zig GB an wiederhergestellten Dateien in allen Qualitätsstufen erhält.
    Der Platz, in dem die wiederhergestellten Dateien abgelegt werden, sollte also immer um einiges größer sein als die Dateien, die man gelöscht hat.

  • Es gibt unter Linux allerdings auch folgende Möglichkeit ( nutze ich mitunter auch - funktioniert aber nicht partitionsübergreifend )



    Einen versteckten Ordner anlegen (mkdir .ordnername - Datei- und Ordnernamen, die mit einem Punkt beginnen, sind unter Linux versteckt - erinnert euch an .htaccess ^^ ), der - von mir aus auch in angelegten Unterordnern, eure Dateien beherbergt


    Das Terminal öffnen


    In den (sichtbaren) Ordner wechseln, in dem ihr die Datei sichtbar finden wollt


    ln .versteckterOrdner/Dateien/Datei.txt


    Schon liegt eure Datei in beiden ( also dem versteckten und dem sichtbaren ) Ordnern vor, nimmt aber nur EINMAL Platz weg. Das ganze nennt sich "Link" - ist aber nicht mit der Verknüpfung zu vergleichen, die man auf dem Windows-Desktop anlegt.


    So kann also auch ein und die gleiche Datei tausend verschiedene Dateinamen haben und in tausend verschiedenen Ordnern sicht- und aufrufbar sein - aber dennoch nimmt sie nur für 1 einziges Exemplar den Speicherplatz - und können auch jeweils umbenannt werden, das tut nichts zur Sache, sie bleibt trotzdem erreichbar.


    Als Beispiel :


    Ich lege einen versteckten Ordner auf meiner externen Festplatte an ( bei mir unter /media/MyDrive/ erreichbar ) :


    cd /media/MyDrive


    # Ordner anlegen und in den Ordner wechseln:


    mkdir .hidden
    cd .hidden


    touch test.txt // legt eine leere Datei unter dem Namen test.txt an


    Jetzt gehe ich in einen vorliegenden Ordner auf dieser Festplatte namens Textdateien. Da ich mich im Ordner .hidden befinde, mache ich also folgendes:


    cd ../Textdateien


    Dort gebe ich dann folgendes ein :


    ln ../.hidden/test.txt


    Diese test.txt darf umbenannt werden, der Dateiname im .hidden-Ordner bleibt gleich.
    Was aber bei Veränderung NICHT gleich bleibt, ist deren Inhalt.


    Das heisst, wenn ihr auf diese Art 5.000 Dateien "verlinkt", jede anders heisst und 1 MB gross ist, so klaut ihr Eurer Festplatte keine 5 GB, sondern 1 MB - es handelt sich also NICHT um Kopien.


    Lösche ich irgendwo eine solche Datei versehentlich, ist das kein Problem, ich kann sie jederzeit wieder dort hinpflanzen - mit dem ln


    Eine Datei ist erst dann wirklich von der Festplatte verschwunden, wenn der letzte Link, der auf sie zeigt, gelöscht wird.

    "Ich weiß nicht, wer mich in die Welt gesetzt hat, und auch nicht, was mein Körper, meine Seele, meine Sinne und jener Teil meines Ichs sind, der denkt. Ich sehe überall nur Unendlichkeiten, die mich wie ein Atom und wie einen Schatten einschließen." (Blaise Pascal)