Kürzlich kam ich in die Verlegenheit, eine 15 Jahre alte Festplatte mit einer Gesamtlaufzeit von fast 70.000 Stunden, die schon seit langem zahlreiche defekte Sektoren und somit Lesefehler aufwies, einer größer angelegten Wiederherstellungsaktion zu unterziehen.
Beim Typ der Festplatte handelte es sich um eine SAMSUNG HD501LJ, ein zeitgenössisches Festplattenmodell wie es in zahlreichen Systemen dieser Zeit zum Einsatz kam und welches in den darauffolgenden Jahren erst durch 750GB- und 1TB-Modelle ersetzt wurde, bevor die Festplatten-Sparte von SAMSUNG dann 2011 teilweise von Seagate übernommen wurde.
Die Aufgabenstellung war in diesem Fall nicht ganz einfach, denn es sollten:
- möglichst viele Daten gesichert (gelesen) werden
- Bestandsdaten auf den Dateisystemen verfügbar gemacht werden
- bereits lange in der Vergangenheit gelöschte Daten gefunden und verfügbar gemacht werden
- sofern möglich, die Daten auf ein neues gleichgroßes oder größeres Speichermedium geschrieben werden, um das ursprüngliche System wieder zu starten
Zusammengefasst also:
- Lesen und sichern möglichst vieler Sektoren
- Signaturbasierte Datenherstellung
- Bestandsdaten-Sicherung
- 1 zu 1 Kopie auf neues Speichermedium
Vorgegangen wurde dann wie folgt:
Mittels ddrescue wurde begonnnen die Daten Sektor für Sektor zu lesen. ddrescue versucht durch abwechselndes Vorwärts- und Rückwärts sowie wiederholtes Lesen unlesbarer Blöcke möglichst viele Daten wiederherzustellen.
ddrescue /dev/sdd ddrescue.log
Der Fortschritt wurde mittels dem Hilfsprogramm ddrescueview sowie anhand der Textausgabe von ddrescue verfolgt.
Im Resultat konnten bis auf 1,5 MB alle Daten hergestellt werden. Bei einer Festplattegröße von 500 GB entspricht das 99,99%. Die unlesbaren Daten befinden sich im Bereich der ersten 2 GB der Festplatte, was die Wahrscheinlichkeit erhöht, dass es sich um Betriebssystemdaten handelt, die für eine Wiederherstellung eher unwichtig sind bzw. die schnell aus einer ähnlichen Betriebssysteminstallation oder durch Neuinstallation wieder bezogen werden können.
Als das 500GB umfassende Image fertig war, konnte mit diesem und dem Tool „photorec“ nun auf Basis von Dateisignaturen nach intakten Daten und Datenteilen gesucht werden. photorec ist in der Lage anhand von Dateisignaturen zahlreiche Dateitypen auch nach Löschung wieder zu finden. Die wichtigsten wiederherzustellenden Daten waren in diesem Fall Bilddateien, photorec ist aber auch in der Lage viele andere Dateitypen zu erkennen und herzustellen.
photorec /log ./500g-sicherung.img
Mehrere Hunderttausend Dateien waren am Ende wiederhergestellt und konnten nun teilautomatisiert gesichtet und eingeordnet werden.
Mittels ddrescue’s „Fill-Mode“ kann nun geschaut werden, welche Dateien im Dateisystem betroffen sind. Sprich: Es ist zwar nicht mehr möglich die Dateien vollständig herzustellen, ich kann aber immerhin versuchen herauszubekommen, was das für Dateien sind.
printf "DEADBEEF" > tmpfile
ddrescue --fill-mode=l- tmpfile ./500g-sicherung.img ddrescue.log
rm tmpfile
mount -t iso9660 -o loop,ro ./500g-sicherung.img /mnt/500g-sicherung
find /mnt/500g-sicherung -type f -exec grep -l "DEADBEEF" '{}' ';'
Je nach dem, ob und wie partitioniert wurde, müssen die o. g. Kommandos angepasst werden. Das Resultat sollte sein, dass, sofern ein intaktes Dateisystem mit seinen Metadaten vorhanden ist, nun alle fehlerhaften Dateien mit nicht wiederherstellbaren Daten aufgelistet werden.
Durch ein einfaches
dd if=./500g-sicherung.img of=/dev/sdX
konnten dann die Daten 1 zu 1 auf ein neues Speichermedium kopiert werden, welches je nach Situation mit oder ohne manueller Datenreparatur wieder lauffähig ist wie die 15 Jahre alte HDD als diese neu und fehlerfrei war.