[Howto]: RAID/Disaster recovery & undelete

  • Ich werde mal anfangen hier so einige "RAID" oder auch Disaster / Undelete möglichkeiten zusammen zu schreiben.
    Das Thema werde ich allerdings sperren, und hier im 1. Post auf die jeweiligen Themen verweisen. Natürlich auch auf alle anderen Bereits zusammengetragenen Themen.


    Themen:


    User Submitted::

  • extundelete - Wiederherstellen gelöschter Daten


    1) Das System Laufen lassen und nix darauf speichern!
    Je mehr man versucht desto unwahrscheinlicher gelöschte Daten retten zu können!
    Die Schritte 1-3 schnellstmöglich ausführen!
    Je länger es dauert desto geringer ist ebenfalls die wahrscheinlichkeit!


    Benötigt wird dazu eine externe USB oder ESATA Platte, die ext3 oder ext4 formatiert ist und mindestens so gross ist wie kapazität der gelöschten daten.


    Bist Du mit den Punkten 1-3 Fertig hast Du erst einmal Luft!


    2) via ssh auf das NAS


    3) Versuche die Datenpartition read only zu mounten, damit nix weiteres geschrieben werden kann!
    Merke:
    - Bei RAID heissen die devices /dev/mdX (X ist eine fortlaufende Zahl, je nachdem wieviel "RAID Verbünde" man auf dem NAS eingerichtet hat. In der Regel ist es nur ein Verbund und heisst MD0.
    - Bei Einzeldisks heissen die devices /dev/sdX3 (X = a,b,c,d also fortlaufendes Alphabet, je nachdem wieviel "Platten" in einem Nas als EInzelplatten laufen. Die Zahl 3 dahinter ist sehr wichtig, da die Partition 3 die Datenpartition ist).


    Erst einmal mit mount ermitteln, ob der mdX oder sdX3 gemountet ist und als was. Ich mache dieses Beispiel mit einem RAID1 (also MD0)

    Code
    mount


    Ergebnis bei den /dev/md0 könnte so aussehen:
    /dev/md0 on /share/MD0_DATA type ext4 (rw,usrjquota=aquota.user,jqfmt=vfsv0,user_xattr,data=ordered,delalloc,noacl)


    Wichtig ist das (rw). Dadurch wissen wir, dass die Partition noch beschreibbar wäre. Jetzt versuchen die Partition in den Read only zu mounten:

    Code
    mount -o remount,ro /dev/md0


    Sollte da ein:

    Code
    mount: /share/MD0_DATA is busy

    zurück kommen, dann verhindert ein Dienst das remounten.


    Ob das mounten funtionierte kann mal wieder mittels

    Code
    mount


    ermitteln. Aus dem vorherigen rw sollte ein ro geworden sein.


    Um den Dienst zu ermitteln werden die e2fsprogs aus der Optware benötigt, welche wir jedoch nicht so
    einfach installieren können, da jeder schreibprozess die wiederherstellungsmöglichkeiten verringern würde.
    Jetzt einfach bei Schritt 4 weitermachen und da erwähne ich, wann es Zeit ist es noch einmal zu probieren.
    So oder so heisst es, wer es in den Read Only geschafft hat kann sich Zeit lassen!


    4) /opt into RAM


    Code
    mount -t tmpfs tmpfs /opt


    Code
    mkdir -p /opt/ipkglib


    Code
    cd /; ln -sf /opt/ipkglib /usr/lib/ipkg


    Nun downloaden wir uns das ipkg-opt ipkg.

    Code
    cd /opt


    Folgendes Kommando für ARM - TS x09 Basierende NAS:

    Code
    wget http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/unstable/ipkg-opt_0.99.163-10_arm.ipk


    Folgendes Kommando für ARM (x10/x12/x19 series) Basierende NAS:

    Code
    wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/ipkg-opt_0.99.163-10_arm.ipk


    Folgendes Kommando für INTEL Basierende NAS:

    Code
    wget http://ipkg.nslu2-linux.org/feeds/optware/ts509/cross/unstable/ipkg-opt_0.99.163-10_i686.ipk


    Code
    tar xvfz ipkg-opt*


    Code
    tar xvfz data.tar.gz -C /


    Nun müssen wir die Feed URL noch in der ipkg.conf mittels dem vi durchführen:

    Code
    vi /opt/etc/ipkg.conf


    Vor der Zeile:

    Code
    dest root /


    Schreiben wir für:
    ARM - TS-x09 Basierende NAS die Zeile:

    Code
    src qnap http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/unstable


    ARM (x10/x12/x19 series) Basierende NAS die Zeile:

    Code
    src qnap http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable


    INTEL Basierende NAS die Zeile:

    Code
    src qnap http://ipkg.nslu2-linux.org/feeds/optware/ts509/cross/unstable


    Speichern und beenden.


    Wenn das nun richtig gemacht wurde rufen wir:

    Code
    /opt/bin/ipkg update


    auf. Dabei wird die ipkg liste des jeweiligen feeds in /opt (was im RAM liegt) gedownloaded, wodurch wir Pakete installieren können.


    5) Downloaden der Pakete:

    Code
    /opt/bin/ipkg install optware-devel


    Code
    /opt/bin/ipkg install e2fslibs


    Code
    /opt/bin/ipkg install e2fslibs-dev


    Code
    /opt/bin/ipkg install e2fsprogs


    ----------------------------------------------------------------------------------------------------------


    HINWEIS - NUR FALLS DAS READ ONLY MOUNTEN NICHT FUNKTIONIERTE!!!!!:
    Jetzt wurden alle benötigten Pakete gedownloaded um es noch einmal mit den Schritt 3) zu probieren, falls es NICHT mit dem read only mounten funktionierte und "mount: /share/MD0_DATA is busy" ausgegeben wurde.
    Nun ist es möglich mittels dem Kommando (auch wieder der MD0 als Beispiel):

    Code
    fuser -v -m /dev/md0


    die Dienste zu ermitteln und diese ggf. via init script zu beenden (/etc/init.d/Dienst.sh stop)
    Nach dem ausführen von fuser käme so etwas heraus:

    Code
    fuser -v -m /dev/md0                                  USER        PID ACCESS COMMAND    /dev/md0:            admin    kernel mount /share/MD0_DATA                         admin      3618 F.c.. mysqld                         admin      3972 ....m sshd                         admin      3975 ....m sh                         admin      4979 ....m upsd


    In diesem Beispiel würde mysql das remounten vehindern (BLOSS NICHT den SSH DIENST / SSHD abschiessen!- der verhindert auch nix)
    Zum stoppen von mysql würde man z.B.:

    Code
    /etc/init.d/mysqld.sh stop


    eingeben.


    Nach dem Beenden versuchen wir es mit schritt 3 erneut! Sollte es dann immer noch nicht funktionieren, dann wieder mittels fuser die Dienste ermitteln und es erneut versuchen.
    Wer es gar nicht hinbekommt kann auch fortfahren, jedoch können sich dadurch wieder die chancen verringern. Meiner meinung nach besser als "zu lange" warten.


    ----------------------------------------------------------------------------------------------------------


    6) Downloaden und kompilieren von extundelete um gelöschte Daten wiederherzustellen.
    Download:

    Code
    cd /opt


    Code
    wget http://sourceforge.net/projects/extundelete/files/extundelete/0.2.0/extundelete-0.2.0.tar.bz2/download


    Entpacken:

    Code
    tar -xvjf extundelete-*.tar.bz2


    Code
    cd extundelete-0.*


    Kompilieren:

    Code
    mv /bin/sed /bin/_sed


    Code
    export PATH=/opt/bin:/opt/sbin:$PATH


    Code
    ./configure --prefix=/opt


    Code
    make


    ----------------------------------------------------------------------------------------------------------


    Hinweis für Intel basierende nas:
    Sollte man hier einen Feher von der atomicity.h erhalten, dann müssen die Compiler Flags gesetzt werden.
    Der Fehler sieht u.g. so aus:

    Code
    /share/MD0_DATA/.qpkg/Optware/bin/../lib/gcc/i686-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/ext/atomicity.h:51: undefined reference to


    Einfach die beiden Kommandos:

    Code
    export CFLAGS="-march=i686 -mtune=i686"


    Code
    export CXXFLAGS=$CFLAGS


    ausführen und noch einmal ./configure --prefix=/opt, danach ein make ausführen. Sollte funktionieren.
    ----------------------------------------------------------------------------------------------------------


    Zum schluss noch ein:

    Code
    make install


    Jetzt noch die libs ladden:

    Code
    echo "/opt/lib" >> /etc/ld.so.confldconfig /etc/ld.so.conf


    nun kann man

    Code
    /opt/bin/extundelete


    ausführen.


    7) Der Undelete versuch mittels extundelete.
    Wir schliessen die externe Platte an und ermitteln mit

    Code
    mount


    wo das NAS diese eingehängt hat.
    Innerhalb von mount steht etwas mit

    Zitat

    /share/external


    z.B.

    Code
    /share/external/sdya1


    Also welchseln wir in den ermittelten mountpoint:

    Code
    cd /share/external/sdya1


    dort angekommen rufen wir:

    Code
    /opt/bin/extundelete --restore-all /dev/sdX3


    oder auch

    Code
    /opt/bin/extundelete --restore-all /dev/md0


    für ein RAID auf (wurde ja oben erklärt) und bestätigen dies mit einem y.


    extundelete legt nun auf der Platte ein Unterverzeichnis RECOVERED_FILES an in dem alle Daten wandern, die noch wiederherstellbar sind.


    Aus eigener erfahrung kann ich sagen, das dies ungewöhnlich gut funktionierte.
    Wenn extundelete fertig ist, dann kann man das NAS mittels:

    Code
    reboot


    neustarten. Die Wiederhergestellten Daten sind auf der externen und alles was hier in diesem Howto installiert wurde ist rückstandslos wesch (bis auf die Daten, die ja auf der externen sind).


    Grüsse, David

  • Testdisk und Photorec
    Testdisk: ...verlorene Partitionen wiederherstellen
    Photorec: ..Datenrettungssoftware, entworfen um verlorene Dateien wiederherzustellen, einschließlich Video, Dokumente, Archive von Festplatten, CD-ROM und verlorene Bilder (Foto-Wiederherstellung) von digitalen Speicher für Kameras.


    Vorwort:
    Photorec ist zwar in Testdisk enthalten, jedoch erzielt man mit extundelete eine wesentlich höhere wiederherstellungsmöglichkeit.
    Ich würde ganz klar Testdisk "zum Partition wiederherstellen" nutzen, und anstatt Photorect extundelete nutzen.
    Ein HowTo zu extundelete gibt's weiter oben.


    Für INTEL Basierende NAS:


    1) /opt into RAM

    Code
    mount -t tmpfs tmpfs /opt


    Code
    cd /opt


    2) Downloaden von testdisk:

    Code
    wget http://www.cgsecurity.org/testdisk-6.12.linux26.tar.bz2


    *** Gerne auch eine neuere Version, die es auf der Testdisk seite selbst gibt. http://www.cgsecurity.org/wiki/TestDisk_Download. Mit einen rechtsklick einfach die URL der Linux ab Kernel 2.6 Version kopieren und hinter dem wget ersetzen.


    3) TestDisk extrahieren:

    Code
    tar xfvj testdisk-*


    4) Wechseln in den Testdisk Pfad:

    Code
    cd testdisk-*


    Nun kann man Testdisk via:

    Code
    ./testdisk_static


    starten.
    Alternativ auch Photorec, wenn es sich um gelöschte Daten handelt. Hier wäre jedoch, da photorect auf Dateiformate begrenzt ist der erfolg mit extundelete höher. Starten kann man photorect mit einem:

    Code
    ./photorec_static


    Innerhalb von Testdisk.


    Auf diesen Screenshot sieht man das Beispiel eines 2 Bay NAS.
    1) Ist eine einzelne Platte
    2) Ist eine einzelne Platte
    3) Wichtig ist hier, dass wenn man ein RAID besitzt der MD0 existiert! MD0 ist der zusammengefasste RAID verbund, den wir auswählen, wenn das NAS mit einen RAID betrieben wird. Sollte der MD0 nicht angezeigt werden, dann kann man hier genau nix mit Testdisk machen. Zuerst müsste der RAID Verbund als solcher wieder gestartet werden. Wer das NAS nicht mit einem RAID Verbund betreibt, kann einfach die einzelnen Platten auswählen.


    HINWEIS FÜR EINZELNE PLATTEN:
    Fährt man kein RAID, so erhält man, wenn nicht gerade alle Partitionsinformationen verloren gegangen sind, 4 mögliche Partitionen.
    Auf der 3ten befinden sich die Daten. Dieser Schritt entfällt bei RAID Systemen.




    Wie Ihr Testdisk nutzt findet Ihr auf der offiziellen Testdisk seite:
    http://www.cgsecurity.org/wiki/Main_Page


    Eventuell wäre es noch wichtig zu erwähnen, wenn testdisk "ältere Partitionen" anzeigt und Daten kopieren kann, man diese dann auch am besten auf eine externe HDD kopiert. Wo die externe HDD eingebunden ist, habe ich bei extundelete (schritt 7) erklärt.
    Irgendwann werde ich diese Seite mal etwas übersichtlicher aufbauen. ;)


    Für ARM Basierende NAS: