Gelöschte Dateien von NTFS wiederherstellen
Posted on Monday, 27 June 2016 in Linux
Früher oder später ist es passiert: Man löscht unachtsam eine Datei, die noch benötigt wird, und merkt dies den Bruchteil einer Sekunde zu spät. Unter NTFS, dem unter Windows geläufigsten Dateisystem, stellt dies kein größeres Problem dar, sofern Schreibvorgänge auf den Datenträger unterbunden werden. Aus diesem Grund ist es angebracht, sicherheitshalber ein anderes System wie Linux -- parallel installiert oder als Live-System -- zu starten und so unnötige Zugriffe auf die betreffende Partition zu unterbinden.
Ist unter Linux das Paket ntfs-3g installiert, bei dem es sich primär um den Treiber für das NTFS Dateisystem handelt, ist bereits alles vorhanden, was wir benötigen. Dies ist bei den meisten Linux-Distributionen standardmäßig der Fall. In diesem Paket enthalten ist das Tool ntfsundelete, mit dem sich ohne Schwierigkeiten gelöschte Dateien wiederherstellen lassen.
Partitionsbezeichnung ermitteln
Um mit der Datenrettung zu beginnen, muss zuerst die Bezeichnung der Partition ermittelt werden. Dies ist entweder mit lsblk möglich, dass eine Baumansicht aller Datenträger inklusive ihrer Partitionen anzeigt, oder mit fdisk, sofern lsblk nicht zur Verfügung steht. Um die Partition mit fdisk zu ermitteln, muss der Befehl
sudo fdisk -l
ausgeführt werden. Dieser listet alle Partitionen sowie kurzen Informationen dazu auf:

In diesem Fall ist die betroffene Partition /dev/sda4. Für die Wiederherstellung darf die Partition nicht gemountet sein. Taucht sie bei der Ausführung des Befehls df -h auf, so muss sie erst noch mittels umount ausgehängt werden:
sudo umount /dev/sda4
ntfsundelete
Nun kann die Datenrettung beginnen. Mit
sudo ntfsundelete /dev/sda4
wird eine Liste aller gefundenen Dateien auf dem Datenträger ausgespuckt. Da dies wahrscheinlich sehr unübersichtlich ist und man in der Regel grob weiß, wie die gelöschten Daten hießen, kann mit -m ein Suchbegriff übergeben werden. In meinem Beispiel hieß die Datei tmp_sav.txt. Danach lässt sich folgendermaßen gezielt suchen, auch wenn nur ein Teil des Namens bekannt ist:
sudo ntfsundelete -m tmp_sav* /dev/sda4
So wird nach allem gesucht, was mit tmp_sav beginnt und beliebig weiter geht. In meinem Fall sieht die Ausgabe folgendermaßen aus:

Die dritte Spalte zeigt an, wie viel Prozent der Datei gerettet werden können. Ich bin an dem zweiten Eintrag, dem Stand der Datei nach den letzten Änderungen, interessiert. Die Datei ist noch vollständig vorhanden und kann problemlos kopiert werden. Die Wiederherstellung der Datei geschieht mit dem Befehl
sudo ntfsundelete -u -i 8342 /dev/sda4
wobei -u die Wiederherstellung anstößt und -i den jeweiligen Inode angibt.
Da die Daten in das aktuelle Verzeichnis wiederhergestellt werden, in dem man sich mit dem Terminal befindet, kann es bei größeren Datenmengen ratsam sein, einen neuen Ordner anzulegen.
Ist die Datei wiederhergestellt, gehört sie noch root, da wir sudo verwendet haben. Um die Datei als normaler Nutzer zu verwenden, können wir noch mit chown den Besitzer der Datei(en) ändern:
sudo chown <username> <filename>
Die Wiederherstellung kann auch für die Ergebnisse einer Suche durchgeführt werden. Sollen beispielsweise alle Bilder gerettet werden (die Erstellung eines separaten Ordners ist hier sehr empfehlenswert), so kann dies mit
sudo ntfsundelete /dev/sdaX -u -m *.jpg
angestoßen werden.