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.



12. September 2007 um 18:34
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.
12. September 2007 um 18:42
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
12. September 2007 um 20:19
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.
12. September 2007 um 21:33
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
12. September 2007 um 21:46
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.
13. September 2007 um 07:22
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
13. September 2007 um 13:39
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.
13. September 2007 um 15:22
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…
13. September 2007 um 15:55
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…
15. September 2007 um 08:58
[...] Howto: Rebuild eines Linux Software-RAIDs | adminlife.net :: [...]
18. September 2007 um 12:42
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.
18. September 2007 um 13:33
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!
18. September 2007 um 23:54
dd? sfdisk?
Hexeditor!
19. Oktober 2007 um 07:19
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. März 2008 um 15:18
[...] Howto: Rebuild eines Software-Raids unter Linux [...]
11. April 2008 um 18:32
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?
12. April 2008 um 08:47
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.
12. April 2008 um 11:02
Hallo Matthias!
Ich habe den MBR eigentlich mit
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.
12. April 2008 um 18:12
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.
12. April 2008 um 18:22
Also, die Partitionstabelle sieht wie folgt aus:
Die Grub-Konfiguration sieht wie folgt aus:
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
12. April 2008 um 19:12
Da ist auch kein bootable flag gesetzt bei sda1. Setz das am Besten mal mit fdisk.
01. Mai 2008 um 16:57
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
20. Juni 2008 um 16:27
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:
Ausserdem habe ich am Ende die sfdisk-Methode genutzt. Die ist wirklich weniger aufwendig und hat funktioniert.
24. September 2008 um 10:41
Sehr schöner Beitrag. Kurz, knapp und zielführend. Danke.