Howto: Rebuild eines Linux Software-RAIDs

Software-RAIDs unter Linux sind eine kostengünstige und flexible Möglichkeit den Speicher eines Servers redundant auszulegen. Doch wie tauscht man eine defekte Platte im Fall der Fälle aus? Hier gibt es einige Schritte zu befolgen, um sein RAID wieder zum Laufen zu bekommen.

Im folgenden Beispiel haben wir ein RAID1 mit den Laufwerken /dev/sda und /dev/sdb. Die Festplatten sind in drei primäre Partitionen unterteilt:

/dev/sdX1        /boot
/dev/sdX2        swap
/dev/sdX3        /

Folglich haben wir 2 RAID Arrays (Swap im RAID1 macht wenig Sinn):

/dev/md0        /boot
/dev/md1        /

In unserem Beispiel fällt die zweite Festplatte – /dev/sdb – aus. Um einen Ersatz einzubauen, nehmen wir zuerst die defekte Platte aus dem laufenden RAID Array:

mdadm /dev/md0 -r /dev/sdb1
mdadm /dev/md1 -r /dev/sdb3

Danach können wir die defekte Platte austauschen (evtl. muss das System heruntergefahren werden). Nach dem Wechsel müssen wir das Partitionslayout auf die Ersatzplatte spielen. In unserem Beispiel ist dies recht einfach, da wir keine erweiterten Partitionen haben:

dd if=/dev/sda of=/dev/sdb bs=512 count=1

Hiermit kopieren wir den MBR (Größe = 512 Byte) auf die neue Festplatte. Handelt es sich bei dem Festplattenschema um ein Konstrukt mit erweiterteten Partitionen, müssen diese zusätzlich einzeln angelegt werden. Hierzu schauen wir uns mit fdisk das Partitionsschema an:

fdisk -ul /dev/sda

Wir merken uns die Startwerte der erweiterteten Partitionen und übergeben diesen Wert an die Parameter skip und seek von dd:

dd if=/dev/sda of=/dev/sdb count=1 skip=STARTWERT seek=STARTWERT

Nachdem wir das Partitionslayout komplett übernommen haben, teilen wir dies brav dem Kernel mit:

blockdev –-rereadpt /dev/sdb

Jetzt können wir mit dem Rebuild des RAIDs beginnen:

mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb3

Den Status kann man jederzeit aus der Datei /proc/mdstat auslesen, z.B. mit

watch -n1 cat /proc/mdstat

Nun erstellen wir noch den Swapspace auf neuen Festplatte:

mkswap /dev/sdb2

und hängen den Swapspace ins laufende System ein:

swapon /dev/sdb2

Schon ist unser RAID wieder voll einsatzbereit.

24 Kommentare zu “Howto: Rebuild eines Linux Software-RAIDs”

  1. mortice schrieb:

    Das ist echt ganz nett. Zusätzlich kann man mit mdadm auch noch viel mehr machen.

    Zum Beispiel ist es möglich mdadm in einem DaemonModus zu starten, damit es den
    Zustand des RAIDs überwacht, um sich bei einem Ausfall einer Platte z. B. per Mail
    benachrichtigen zu lassen. SuSE stellt ein Startskript zur Verfügung welches die
    /etc/sysconfig/mdadm einließt und dann mdadm mit den gewünschten Optionen als Daemon startet.

  2. matthias schrieb:

    Bei Debian läuft ein mdadm Dämon standardmäßig im “–monitor”-Modus, sobald ein RAID eingerichtet wurde. Außerdem überwache ich das RAID mittels Nagios – sehr praktisch :)

  3. Der Adminblogger schrieb:

    Swap auf dem RAID macht sehrwohl Sinn – wenn eine der Platten abraucht und der Kernel Speicher-Pages auf der Swap-Partition der defekten Platte abgelegt hatte, dann steht Dein System 100%ig.

    Von daher: Auch Swap auf ein /dev/md* Device packen und schön mit aufs RAID verteilen.

    Gruss,
    Marcel.

    PS: Mittels /proc/sys/dev/raid/speed_limit_max kann man das IO-Aufkommen beim Rebuild im Zaum halten, wenn ansonsten das System zu sehr in die Knie gezwungen wird.

  4. Stefan schrieb:

    Mhh…ich habe auch mal mit mdadm & Softwareraid rumgespielt, fand die Performance aber mies; außerdem wurde mir andauernd mein Dateisystem zerschrebbelt (jedes Dateisystem, das ich versucht habe!)..

    Ich hatte 4x Samsung SpinPoint T166 HD501LJ & folgendes:

    01:09.0 RAID bus controller: Silicon Image, Inc. SiI 3114 [SATALink/SATARaid] Serial ATA Controller (rev 02) (http://www.stetech.de/images/sata-controller.jpg)

    Damit habe ich RAID1 und RAID5 ausprobiert…totaler Schrott, miese Performance, immer Dateisystemprobleme. Vielleicht war die Karte auch einfach nur Müll, aber ich hatte die Schnauze voll, habe mich entschieden, Software-Raid zu lassen und habe mir einen 3Ware 9500S-4 gekauft, damit habe ich wenigstens keinen Ärger…

    Software-Raid kann aber toll sein, wenn man sehr knapp kalkulieren muss; ich würde sowas aber nicht mehr freiwillig verbauen, ich baue doch nichts unzuverlässiges in mein Netz, wenn ich was zuverlässigeres kaufen darf ;)

    Achja, wegen des –monitor Modus; in /etc/mdadm.conf kann man anpassen:

    # When used in –follow (aka –monitor) mode, mdadm needs a
    # mail address and/or a program. This can be given with “mailaddr”
    # and “program” lines to that monitoring can be started using
    # mdadm –follow –scan & echo $! > /var/run/mdadm
    # If the lines are not found, mdadm will exit quietly
    #MAILADDR root@mydomain.tld
    #PROGRAM /usr/sbin/handle-mdadm-events

  5. Der Adminblogger schrieb:

    Ich habe den selben Controller:

    mm@lisa:~>lspci | grep 3114
    01:0b.0 Mass storage controller: Silicon Image, Inc. SiI 3114 [SATALink/SATARaid] Serial ATA Controller (rev 02)

    Auf meiner privaten Maschine betreibe ich damit ein RAID1 (/boot) sowie 2x RAID5 (/ und /home) mit 4x 80GB Samsung Platten.

    Funktioniert nun seit Jahren reibungslos, wenn man von Mein RAID5 löst sich auf/ einmal absieht.

    Lese-Performance:

    root@lisa:~>hdparm -t /dev/md3

    /dev/md3:
    Timing buffered disk reads: 254 MB in 3.02 seconds = 84.22 MB/sec

    Gruss,
    Marcel.

  6. matthias schrieb:

    Habe mit Software-RAID auch noch keine Probleme gehabt – und die Performance ist voll ok. So hatte ich bei manchen HW-RAIDs schon schlechtere Performance, aufgrund der schlechten Treiberunterstützung.
    Außerdem ist ein Software-RAID immer gleich – egal welche Hardware man nutzt. Man kann es also mit genau den selben Tools überwachen und administrieren, wie auf allen anderen Maschinen.

    Zum Thema Swap auf RAID: Ich halte trotzdem nicht viel davon. Wenn der Rechner den Swap nutzt, hat das System ja wahrscheinlich schon zu wenig RAM. Dann lieber zwei einzelne Swap-Bereiche mit besserer Performance als Swap auf RAID1.

    BTW: Mein RAID0 hier auf diesem Rechner:
    matthias@pcmatthias:~$ sudo hdparm -t /dev/md1
    Password:

    /dev/md1:
    Timing buffered disk reads: 318 MB in 3.02 seconds = 105.35 MB/sec

    Finde ich voll i.O. für ein Software-RAID mit SATA1 Platten :)

  7. mortice schrieb:

    Nicht schlecht dieses Debian. ;-) Ich kann es nur leider keinem Kunden von uns verkaufen.

    Auch ich habe noch keine schlechten Erfahrungen mit einem Software-RAID unter Linux gemacht. Bis jetzt hat immer alles problemlos funktioniert.

    Mit Performacedaten kann ich im Moment leider nicht dienenm, da ich zur Zeit nur AIX Kisten in Reichweite habe.

  8. Craig schrieb:

    Ich schätze auch, dass mein Controller eine Meise hatte…oder meine Workstation.

    >Habe mit Software-RAID auch noch keine Probleme gehabt – und die Performance ist voll ok. So >hatte ich bei manchen HW-RAIDs schon schlechtere Performance, aufgrund der schlechten >Treiberunterstützung.
    3Ware ist ja direkt im Kernel und ganz gut verbreitet.

    >Außerdem ist ein Software-RAID immer gleich – egal welche Hardware man nutzt. Man kann es >also mit genau den selben Tools überwachen und administrieren, wie auf allen anderen
    >Maschinen.
    Wenn man überall 3Ware einbaut, ist auch immer alles gleich ;)

    >Zum Thema Swap auf RAID: Ich halte trotzdem nicht viel davon. Wenn der Rechner den Swap
    >nutzt, hat das System ja wahrscheinlich schon zu wenig RAM. Dann lieber zwei einzelne
    >Swap-Bereiche mit besserer Performance als Swap auf RAID1.
    Auf einer Workstation würde ich dir zustimmen, aber nicht bei einem Server wegen des Crash-Problems.

    Wegen eurer Performanceangaben: hdparm -tT sagt aber nicht SOOO viel aus, es kommt ja auch auf die Zugriffszeiten, Schreibgeschwindigkeit usw. an!

    mach mal:
    time dd if=/dev/urandom of=/tmp/u count=1024000 bs=1024
    dann rebooten
    und dann: time dd if=/tmp/u of=/tmp/u2
    time rm -f /tmp/u /tmp/u2

    Ein richtiger benchmark wie bonnie++ wäre aber besser…

  9. matthias schrieb:

    Um einen ersten Überblick zu bekommen reicht hdparm aber aus :)

    Ok, Swap auf RAID1:
    Wenn der RAM voll ist und der Swap genutzt wird, ist ein Swap auf RAID1 doch eine deutliche Performance Bremse, da erst nach dem kompletten Schreibvorgang auf beiden Platten der Vorgang beendet ist.
    Und was genau würde passieren, wenn eine der beiden Festplatten abraucht und somit eine Swap Partition wegfällt (Linux nutzt ja alle angegeben Swapspaces aus der fstab)? Ein Kernel Crash? Hat das mal jemand erlebt? Sofern der Swap nicht genutzt wird, sollte auch nichts passieren. (auf keinem der von mir betreuten Server wird der Swap genutzt, und wenn wird der RAM erhöht)
    Bei einer Workstation – insbesondere Laptop oder ähnliches – sehe ich mehr Sinn, wenn man hier Suspend-to-RAM nutzt…

  10. Meine del.icio.us-Links vom 11. September bis zum 14. September | Stephan A. aus B. schrieb:

    [...] Howto: Rebuild eines Linux Software-RAIDs | adminlife.net :: [...]

  11. ChristianS schrieb:

    Warum nimmst Du für die Partitionierung nicht sfdisk? Da kannst Du die Partitionierung (inkl. extended) dumpen und aus dem Dump wieder auslesen.

    sfdisk -dx /dev/hda wäre das z.B.

    Eigentlich könntest Du den Dump auch gleich wieder in sfdisk reinpipen für die Ersatzplatte.

  12. matthias schrieb:

    Ich glaube sfdisk ist nicht auf jedem System per default installiert, oder?
    Bei einer einfachen Partitionstabelle ist die Lösung mit dd wesentlich eleganter – vor allem, weil hier auch der Bootloader mitkopiert wird!

    Ansonsten ist sfdisk für erweiterte Partitionen sicherlich sinnvoll!

  13. Stefan schrieb:

    dd? sfdisk?
    Hexeditor! ;)

  14. Robert Kraus schrieb:

    Hallo zusammen.

    Habe hier einen Debian Server mit Promis SATA-controller und Softwareraid laufen.
    Ohne jegliche Probleme (4×500Gb HDD´s).
    Root 5GB, Swab 1GB, var 1GB und va/log 1BG sind auf einem Raid1 mit 4 Festplatten und die restliche 4×491GB sind als Raid5.

    Das Raid wird über Webmin administriert.

    Auch über das webmin werden die Benutzer und Gruppen administriertd, allerdings in einem beschnittenen Webmin-Benutzer, der auch nur das kann.

    Bis jetzt keine Probleme.

    Gruß
    Robert

  15. Kurz und Knackig (15.03.2008) schrieb:

    [...] Howto: Rebuild eines Software-Raids unter Linux [...]

  16. Danu schrieb:

    Die Anleitung funktioniert soweit wunderbar. Aktuell habe ich noch ein Problem.
    Nach dem Ausfall einer Platte habe ich alles wieder nach der Anleitung hergestellt.
    mdadm sagt, dass das RAID wieder komplett ist.

    Für einen Test habe ich die neue Festplatte an den Platz der alten Festplatte gehängt und die alte Festplatte vom SATA-Bus genommen.

    Ein Neustart funktioniert jetzt nicht. Er bleibt bei der Meldung “GRUB” hängen.
    Grub scheint also keine Boot-Informationen zu finden.
    Was mache ich falsch?

  17. matthias schrieb:

    Da scheint wohl der MBR hinüber zu sein. Wahrscheinlich wurde der nicht sauber mitkopiert.

    Entweder nochmal manuell rüberkopieren oder Super Grub Disk ausprobieren.

  18. Danu schrieb:

    Hallo Matthias!
    Ich habe den MBR eigentlich mit

    
    dd if=/dev/sda of=/dev/sdb bs=512 count=1  
    

    kopiert.

    Von der alten Festplatte kann auch gebootet werden. Daher sollte der MBR-Eintrag ja grundsätzlich in Ordnung sein?
    Kann ich irgendwie testen, ob auf der neuen Festplatte (sdb) zumindest alle Daten korrekt kopiert wurden? mdadm zeigt mir zwar den Status “clean” an, aber im Moment bin ich mir nicht sicher, ob ich dem trauen kann.

  19. matthias schrieb:

    Achso, da hab ich die Info in deinem ersten Beitrag heut morgen in der früh übersehen.
    Auf welcher Partition erwartet Grub denn seine Konfigurationsdatei?
    Hast du nur primäre oder auch erweiterte/logische Partitionen? Da reicht ein Kopieren der ersten 512Byte nämlich nicht aus.

  20. Danu schrieb:

    Also, die Partitionstabelle sieht wie folgt aus:

    
    Disk /dev/sda: 80.0 GB, 80026361856 bytes
    255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectors
    Units = sectors of 1 * 512 = 512 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1              63   152344394    76172166   fd  Linux raid autodetect
    /dev/sda2       152344395   156296384     1975995   82  Linux swap / Solaris
    

    Die Grub-Konfiguration sieht wie folgt aus:

    
    title           Debian GNU/Linux, kernel 2.6.18-5-686
    root            (hd0,0)
    kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/md0 ro
    initrd          /boot/initrd.img-2.6.18-5-686
    savedefault
    
    title           Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
    root            (hd0,0)
    kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/md0 ro single
    initrd          /boot/initrd.img-2.6.18-5-686
    savedefault
    

    Die ursprüngliche Installation erfolgte direkt auf das Software-RAID1, nach dieser Anleitung: Install-Debian-Etch-on-a-Software-Raid-1-with-S-ATA-disks

  21. matthias schrieb:

    Da ist auch kein bootable flag gesetzt bei sda1. Setz das am Besten mal mit fdisk.

  22. bofh schrieb:

    Statt der dd methode würde ich
    sfdisk -d /dev/sda | sfdisk /dev/sdb
    trozdem emfpehlen. nachinstallieren läst es sich sicher schneller und leichter als eben über einen blog später probleme zu tracen :-)

    Damit werden dann auch die extendet platten korrekt kopiert

  23. Danu schrieb:

    Ich habe einige Zeit gebraucht, bis ich mich wieder dem Thema widmen konnte. Habe die Probleme jetzt aber lösen können.

    1 Anfängerfehler: Die eine Platte war offenbar nicht in der BIOS-Boot-Tabelle eingetragen.

    2-tes Problem: Es musste Grub ausgeführt werden:

    
    grub
    

    
    root (hd0,0)
    setup (hd0)
    root (hd1,0)
    setup (hd1)
    quit
    

    Ausserdem habe ich am Ende die sfdisk-Methode genutzt. Die ist wirklich weniger aufwendig und hat funktioniert.

  24. HansM schrieb:

    Sehr schöner Beitrag. Kurz, knapp und zielführend. Danke.


Ein Kommentar schreiben

XHTML: Diese Tags können benutzt werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>