Da ich heute für jemanden auf einer Festplatte ein gelöschtes Video wiederherstellen wollte, habe ich auch gleich parallel diese Anleitung geschrieben. Falls ich das nochmal machen muss, kann ich dann hier gucken und mir viel Arbeit ersparen :)

Gesucht war ein Film, der irgendwann in den letzten Jahren gelöscht wurde und mindestens 5 MiB groß war. Der Datenträger ist eine Festplatte, die vor Jahren gegen eine SSD getauscht wurde. Der Datenträger ist mit NTFS formatiert und es lief Windows darauf.

Ich habe dazu photorec (Website) verwendet. Dieses überprüft entweder den als frei angegebenen Speicherplatz eines Datenträgers oder den gesamten Speicherplatz auf “gelöschte” Dateien. Also solche, die im “Inhaltsverzeichnis” des Dateisystems nicht mehr eingetragen sind, deren Daten aber weiterhin im Dateisystem verfügbar sind, da sie bisher nicht überschrieben wurden.

Alles oder nichts

In Photorec kann man meines Wissens nach nicht einstellen, welche Dateien wiederhergestellt werden sollen und welche nicht. Daher muss man leider alle Dateien wiederherstellen lassen und nur die benötigten daraus filtern und die restlichen wieder löschen.

Im vorliegenden Fall ist die Festplatte 650 GiB groß und beim Wiederherstellen wurden insgesamt über 600.000 Dateien wiederhergestellt.

Tip
Nutzt man KDE/Plasma und ist die Dateisuche aktiv, sollte man diese für diesen Vorgang entweder abschalten mit balooctl disable oder das Verzeichnis /home/user/recover/ in der Konfiguration für die Indexierung verbieten. Sonst wird die Desktopsuche jede neue Datei indexieren und ein Prozess mit dem Namen baloo_file_extractor die ganze Zeit das System belasten.

Das Setup

Warnung

Generell sollte man nie irgendwelche Kommandozeilenbefehle einfach so von einer Webseite kopieren und ungeprüft in eine Shell einfügen.

Details, weshalb das gefährlich sein könnte.
Es könnten zusätzliche Befehle enthalten sein, die mit CSS unsichtbar gemacht wurden, aber beim Einfügen direkt ausgeführt werden. Ich kopiere deshalb Befehlszeilen von Webseiten immer erst in einen Editor, um zu sehen, ob nicht doch etwas versteckt war. Im Editor markiere ich die Befehlszeile dann erneut und nutze das dann zum Einfügen in die Shell.

Fast alles wird sich im Verzeichnis /home/user/recover/ abspielen. Die wiederhergestellten Dateien werden am Ende nach /home/user/recovered_videos/ verschoben und das erst genannte Verzeichnis wird wieder gelöscht.

mkdir /home/user/recover/
mkdir /home/user/recovered_videos/

Wiederherstellung starten

Dieses Kommando muss als root ausgeführt werden und wird je nach Größe des Dateisystems und der Anbindung an den PC sehr lange dauern (bei mir circa 12 Stunden). Am besten führt man das in einer Tmux-Session oder in einer Screen-Session aus:

photorec /d /home/user/recover/r /dev/sdb2

Das Tool Photorec erstellt jetzt in /home/user/recover/ ganz viele durchnummerierte Verzeichnisse r.1, r.2, […], r.99 usw. und legt darin die wiederhergestellten Dateien ab.

Optional zwischendurch löschen (nur falls Speicherplatz begrenzt ist)

Wenn man genug Speicherplatz hat, kann man warten, bis Photorec fertig ist und dann die benötigten Dateien herausfiltern. Wenn nicht, kann man zwischendurch unbenötigte Dateien löschen.

Da ich nicht abschätzen konnte, was da insgesamt an Datenvolumen zusammen kommen würde, wollte ich schon zwischendurch die nicht benötigten Dateien löschen.

Hier klicken, um zwischendurch unbenötigte Dateien zu löschen.

Folgende Kommandos kann man alle x Zeit mal ausführen:

Als root:

chown -R user: /home/user/recover/

Und direkt im Anschluss als Benutzer user:

find /home/user/recover -type f -size -5M -execdir rm -f '{}' \;

find /home/user/recover -type f ! \( -iname *.mpg -o -iname *.mpeg -o -iname *.mp4 -o -iname *.mp2 -o -iname *.avi -o -iname *.vob -o -iname *.wmv -o -iname *.mkv -o -iname *.mov -o -iname *.flv -o -iname *.webm -o -iname *.f4v -o -iname *.ogv -o -iname *.3gp -o -iname *.3g2 -o -iname *.3gpp -o -iname *.m2p -o -iname *.ts -o -iname *.asf -o -iname *.m2t \) -execdir rm -f '{}' \;

find /home/user/recover -type d -empty -delete

Zuerst werden hier Dateien gelöscht, die kleiner sind als 5 MiB sind, da die gesuchte Datei größer ist.

Dann werden Dateien gelöscht, die keine typische Dateiendung von Videodateien haben.

Zuletzt werden leere Verzeichnisse gelöscht.

Warnung
Mir ist nicht bekannt, ob Photorec in bereits wiederhergestellte, aber noch nicht vollständige Dateien hinein schreibt, wenn es zu einem späteren Zeitpunkt welche findet. Ich gehe aber nicht davon aus, da ich in den wiederhergestellten Dateien z. B. immer wieder die selben Videos gefunden habe, die jedoch unterschiedliche Längen hatten.

Wiederherstellung abgeschlossen – Aufräumen

Jede wiederhergestellte Datei hat einen Dateinamen bestehend aus f, einer fortlaufenden Nummer und bei Verfügbarkeit dem ursprünglichen Dateinamen. Im Ergebnis z. B. f340518928.avi.

So ist sichergestellt, dass alle Dateien einen eindeutigen Dateinamen haben. Jedoch kann es vorkommen, dass unter verschiedenen Dateinamen die selbe Datei wiederhergestellt wird. Das könnte daran liegen, dass z. B. eine Datei “in den Papierkorb gelöscht” wurde und dann später dort erneut gelöscht wird. Auf dem Dateisystem ist sie dann an zwei verschiedenen Orten gewesen und wird dann demnach auch zwei Mal wiederhergestellt.

Gewünschte Dateien ins Zielverzeichnis verschieben

Als root ausführen, damit man als Benutzer user Schreibzugriff auf die wiederhergestellten Daten hat:

chown -R user: /home/user/recover/

Jetzt werden alle gefundenen Videodateien, die mindestens 5 MiB groß sind, in ein nach /home/user/recovered_videos/ verschoben. Dazu nutzt man diese beiden Befehle:

find /home/user/recover -type f \( -iname *.mpg -o -iname *.mpeg -o -iname *.mp4 -o -iname *.mp2 -o -iname *.avi -o -iname *.vob -o -iname *.wmv -o -iname *.mkv -o -iname *.mov -o -iname *.flv -o -iname *.webm -o -iname *.f4v -o -iname *.ogv -o -iname *.3gp -o -iname *.3g2 -o -iname *.3gpp -o -iname *.m2p -o -iname *.ts -o -iname *.asf -o -iname *.m2t \) -execdir mv '{}' /home/user/recovered_videos/ \;

Das Verzeichnis /home/user/recover kann man jetzt löschen.

Doppelte Dateien

Überflüssige, weil mehrfach vorhandene, Dateien kann man z. B. mit dem Tool czkawka finden und löschen.

Screenshot der Anwendung czkawka mit einer Liste doppelt oder mehrfach vorhandenen Dateien.
Mit Czkawka kann man doppelte oder mehrfach vorhandene Dateien finden und löschen.

Dateinamen

In den meisten der “neueren” Videodateien sind Exif-Metadaten enthalten, in denen der Erstellungszeitpunkt vermerkt ist.

Über diesen kann man mit exiftool die Dateien entsprechend benennen. Den Tipp dazu habe ich aus der Dokumentation von Photorec (ab Seite 49 “After using Photorec”).

Es ist auch möglich, (zusätzlich) andere Exifdaten zur Benennung der Dateien zu benutzen. Einfach mal mit exiftool dateiname.mp4 nachschauen, was alles vorhanden ist.

Mit dem folgenden Befehl werden alle mp4-Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen umbenannt in das Format 2015-08-03_17-12-34.mp4:

exiftool -overwrite_original -r -ext mp4 '-FileName<CreateDate' -d '%Y-%m-%d_%H-%M-%S%%-c.%%e' /home/user/recovered_videos/

Erläuterungen zu diesem Kommando
Hinweis
  • Lässt man die Option -overwrite_original weg, dann bleiben die Originaldateien erhalten, werden aber umbenannt in dateiname.mp4_original.
  • -r steht für rekursiv, es werden demnach alle Dateien in allen Unterverzeichnissen umbenannt.
  • Die Option -ext mp4 sorgt dafür, dass nur Dateien mit der Dateierweiterung .mp4 umbenannt werden. Lässt man die Option weg, werden alle Dateien umbenannt.
  • -d gibt das Format an, in das die Dateien umbenannt werden sollen.
  • Das c im String des Formats sorgt dafür, dass einer umzubenennenden Datei ein Zähler angefügt wird, falls es eine so genannte Datei bereits geben sollte.

Es werden nur solche Dateien umbenannt, die auch wirklich Create Date in den Exif-Daten enthalten.

Weitere Informationen gibt es in der Manpage von exiftool.

Die Ausgabe dieses Kommandos ist zum Beispiel:

    1 directories scanned
   24 image files updated

Ergebnis

Ich konnte die gesuchte Datei finden. :)

Aufräumen

Nutzt man Dolphin mit aktivierter Vorschau für Dateien, um die Videos durchzuschauen, dann kann man jetzt das Verzeichnis ~/.cache/thumbnails/ jetzt löschen, da hier sonst sehr viele unnütze Vorschaubilder für immer liegen bleiben würden.

Nützliches

  • Find -delete vs -exec rm
  • -execdir habe ich zufällig in der Manpage von find gesehen. Bei Verwendung von -exec wird der Befehl in dem Verzeichnis ausgeführt, in dem Find ausgeführt wurde. Bei -execdir wird der Befehl in dem Verzeichnis ausgeführt, in dem sich die gefundene Datei befindet. Das soll sicherer sein laut Manpage.