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:
[sourcecode language="css"]/dev/sdX1 /boot
/dev/sdX2 swap
/dev/sdX3 /[/sourcecode]
Folglich haben wir 2 RAID Arrays (Swap im RAID1 macht wenig Sinn):
[sourcecode language="css"]/dev/md0 /boot
/dev/md1 /[/sourcecode]
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:
[sourcecode language="css"]mdadm /dev/md0 -r /dev/sdb1
mdadm /dev/md1 -r /dev/sdb3[/sourcecode]
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:
[sourcecode language="css"]dd if=/dev/sda of=/dev/sdb bs=512 count=1[/sourcecode]
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:
[sourcecode language="css"]fdisk -ul /dev/sda[/sourcecode]
Wir merken uns die Startwerte der erweiterteten Partitionen und übergeben diesen Wert an die Parameter skip und seek von dd:
[sourcecode language="css"]dd if=/dev/sda of=/dev/sdb count=1 skip=STARTWERT seek=STARTWERT[/sourcecode]
Nachdem wir das Partitionslayout komplett übernommen haben, teilen wir dies brav dem Kernel mit:
[sourcecode language="css"]blockdev –-rereadpt /dev/sdb[/sourcecode]
Jetzt können wir mit dem Rebuild des RAIDs beginnen:
[sourcecode language="css"]mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb3[/sourcecode]
Den Status kann man jederzeit aus der Datei /proc/mdstat auslesen, z.B. mit
[sourcecode language="css"]watch -n1 cat /proc/mdstat[/sourcecode]
Nun erstellen wir noch den Swapspace auf neuen Festplatte:
[sourcecode language="css"]mkswap /dev/sdb2[/sourcecode]
und hängen den Swapspace ins laufende System ein:
[sourcecode language="css"]swapon /dev/sdb2[/sourcecode]
Schon ist unser RAID wieder voll einsatzbereit.



mortice
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.
matthias
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
Der Adminblogger
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.
Stefan
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
Der Adminblogger
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.
matthias
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
mortice
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.
Craig
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…
matthias
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…
ChristianS
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.
matthias
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!
Stefan
dd? sfdisk?
Hexeditor!
Robert Kraus
Hallo zusammen.
Habe hier einen Debian Server mit Promis SATA-controller und Softwareraid laufen.
Ohne jegliche Probleme (4x500Gb HDD´s).
Root 5GB, Swab 1GB, var 1GB und va/log 1BG sind auf einem Raid1 mit 4 Festplatten und die restliche 4x491GB 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
Danu
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?
matthias
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.
Danu
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.
matthias
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.
Danu
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
matthias
Da ist auch kein bootable flag gesetzt bei sda1. Setz das am Besten mal mit fdisk.
bofh
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
Danu
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.
HansM
Sehr schöner Beitrag. Kurz, knapp und zielführend. Danke.
shuron
Nur eine Anmerkung. Also bei Ausfall einer festplatte und einem anschließendem Plattentauschsollte mdadm den Rebuil process doch slebst starten was man nit cat /proc/mdstat auch shen würde?
Falls jemanden interessiert, habe noch über monitoring und test von software raid geschriben.
Harry Klein
Klasse. Eine einfache, kurz und knappe Anleitung zum Thema Raid 1. Danke .
Stefan
Läßt man das RAID übrigens checken:
echo check > /sys/block/md0/md/sync_action