Daten im ext4 Dateisystem (RAID5) retten

Wer kennt ihn nicht, den Fehler 40 (Der Fehler sitzt 40 cm vor dem Monitor). Nur doof, wenn man selbst den Fehler produziert hat. Sind es bei den „Usern“ noch vergleichsweise einfache Fehler, produziert man selbst als Administrator schon das ein oder andere mal „fortgeschrittene“ Fehler 😉

Möchte man ein Laufwerk löschen und alles überschreiben, kann man das auch mit Debian Bordmitteln sehr einfach erledigen. Hier am Beispiel meines RAID-5 Verbunds:

dd if=/dev/urandom of=/dev/md127 bs=1M

Das funktioniert auch sehr gut. Nur doof, wenn man aus versehen beginnt das falsche Laufwerk zu löschen und „mal kurz“ mehrere TB an Daten verliert. Die Schockreaktion ist: Den Vorgang abbrechen. Damit hat man schon mal schlimmeres verhindert. Als nächste Maßnahme sollte man nicht verzweifeln und bei einem Bierchen einen klaren Kopf bekommen 😉

Hat man das erledigt, kann man damit anfangen die Daten zu retten. Als Dateisystem habe ich ext4 als journaling filesystem gewählt, was mich in der Auswahl der Tools für die Wiederherstellung der Daten deutlich einschränkt. Nach einer kurzen Recherche hat sich ext4magic als das richtige Werkzeug für mich herausgestellt.

Kleine Anmerkung noch, obwohl es eigentlich klar sein sollte:
Bitte NIEMALS auf das Dateisystem schreiben, von dem die Daten gerettet werden sollen!!! Die Daten gehen dadurch verloren!!!

Eine weitere Anmerkung: Mein eingesetztes Betriebssystem hier ist Debian Squeeze.

Es ist empfehlenswert die Festplatten mit den verlorenen Daten als Read-Only / nur mit Lesezugriff zu mounten. Damit schützt man diese auch vor versehentlichen Schreibzugriffen.

mount -o remount,ro /dev/sdaX

Schnell das Programm in der aktuellen Version (0.3.1, Stand 2012-Sep-22) herunterladen, entpacken und die benötigten Pakete per apt-get installieren:

cd /tmp wget http://prdownload.berlios.de/ext4magic/ext4magic-0.3.1.tar.gz tar xfvz ext4magic-0.3.1.tar.gz apt-get install build-essential e2fslibs-dev uuid-dev libblkid-dev libmagic-dev cd /tmp/ext4magic make clean ./configure --enable-expert-mode make make install

Das Programm ist jetzt im „Expert Mode“ installiert. Den brauchen wir für die weiteren Schritte (kann mit „ext4magic -V -x“ überprüft werden) Es gibt ein Script, das die weiteren Optionen für ext4magic bei einem beschädigten Superblock automatisiert ermittelt. Ich habe es kurz per SSH auf den Server geschrieben:

cat >> /tmp/script.sh << "EOF" #!/bin/bash  # ext4magic  Hilfsscript (dump2fs >= 1.41.9) # zum ermitteln richtiger Optionen zum ansprechen eines Backupsuperblock # zum Recovern eines am Beginn teilweise beschaedigten Filesystems mit ext4magic # Autor robi@users.berlios.de (Version 1.1 vom 03.06.2011) if [ -b "$1" -o -f "$1" ] then    typeset -i BLK BLK_SZ GROUP    for BLK_SZ in 1024 2048 4096       do       for GROUP in 1 3 5 7 9 25 27 49 81 125 243 343 729 2187 2401 3125          do          BLK="$BLK_SZ"*8*"$GROUP"          if [ $BLK_SZ -eq 1024 ]            then BLK="$BLK"+1          fi          dumpe2fs -h -o blocksize="$BLK_SZ" -o superblock="$BLK" "$1" 2>/dev/null | grep UUID &>/dev/null && echo "ext4magic \"$1\" -s $BLK_SZ -n $BLK -c -D"       done    done else    echo "usage : $0  " fi #--------------- END ---------------- EOF chmod ugo+x /tmp/script.sh

Jetzt wird das Script für das entsprechende Laufwerk (bei mir der RAID-5 Verbund) aufgerufen:

./script.sh /dev/md127

Als Ausgabe erhält man den Befehl/die Befehle zur Rettung wie beispielsweise:

ext4magic "/dev/md127" -s 4096 -n 4096000 -c -D

Ich habe noch das Ausgabeverzeichnis der geretteten Daten angegeben, und schreibe alles auf eine große externe HDD. Das Verzeichnis, in das die Daten geschrieben werden gibt man über die Option „-d /Path/zum/Recoverdir“ an. Mein vollständiger Befehl sieht damit also so aus:

ext4magic "/dev/sde1" -s 4096 -n 4096000 -c -D -d /media/backupdisk

Ein mal ausgeführt, rödelt der Rechner eine Zeit lang und beginnt dann idealerweise mit dem Kopieren der Daten auf meine externe USB Platte 🙂 Mein NAS scheint jetzt etwa vierzig Stunden damit beschäftigt zu sein, die etwa 5-6 TB Daten auf eine USB 2.0 Platte zu kopieren.

EDIT (05.05.2013): Das Backup ist fertig geworden. Habe jetzt auch Dateien doppelt wieder hergestellt (bspw. Ordner wurde umbenannt) und habe so zum Einen deutlich länger gebraucht und zum Anderen auch viel mehr Platz für die Sicherung der Daten (USB-HDDs) benötigt.

Weiterführende Hilfe und Quellen

  • http://openfacts2.berlios.de/wikide/index.php/BerliosProject:Ext4magic-Installation
  • http://blog.extremeshok.com/archives/1951
  • http://openfacts2.berlios.de/wikide/index.php/BerliosProject:Ext4magic-Expert-Mode
  • http://openfacts2.berlios.de/wikien/index.php/BerliosProject:Ext4magic-Howto#First_sectors_of_a_hard_drive_were_overwritten_by_accident
  • Einen, wie ich finde, sehr guten Überblick über die Datenrettung von ext3 und ext4 und die Programme gibt es hier: http://www.linupedia.org/opensuse/Verlorene_Dateien_wiederherstellen_ext3_ext4