In diesem Artikel möchte ich kurz erklären wie man ein Software Raid unter Linux, das mittels mdadm erstellt wurde nach einem Ausfall wieder in Gang bringt.
Wir verwenden dafür eine Live CD (z.B. Ubuntu) damit wir nicht auf einem aktiven System arbeiten.
Alles was hier erklärt wird, erfolgt (sofern nicht anders gekennzeichnet) im Live System und nicht direkt im Betriebssystem des defekten Arrays.
In diesem Bespiel ist /dev/sdb die defekte Platte!!!!
Szenario
Nehmen wir an in unserem Server befinden sich 2 Festplatten mit jeweils 3 Partitionen gespiegelt als Raid 1
/dev/sda1 = boot
/dev/sda2 = swap
/dev/sda3 = /
dazu natürlich das gleiche mit /dev/sdb
/dev/sdb1 = boot
/dev/sdb2 = swap
/dev/sdb3 = /
Wenn eine HDD ausfällt ändert sich der Status auf degraded. Das heisst unser Array ist nicht mehr redundant.
Eine Ausgabe von
cat /proc/mdstat
liefert dann z.B.
Personalities : [raid1]
md1 : active raid1 sdb3[2](F) sda3[1]
296993088 blocks [2/1] [_U]
md0 : active raid1 sdb1[0] sda1[1]
97536 blocks [2/2] [UU]
unused devices: <none>
Der Unterstrich in den eckigen Klammern bei
296993088 blocks [2/1] [_U]
bedeutet, dass die HDD (oder in dem Fall die Partition) /dev/sdb3 nicht mehr verfügbar ist.
Die Platte /dev/sdb ist also beschädigt.
Vorgehen
Defekte Platte identifizieren
Zunächst müssen wir sicherstellen, um welche HDD es sich handelt, damit nicht die falsche aus dem Server/PC entfernt wird. Dies kann man z.B. mit
hdparm -i /dev/sdb
erledigen. Die Ausgabe sieht ähnlich aus wie folgende:
/dev/sdb:
Model=WDC WD3200BEVT-00A23T0 , FwRev=01.01A01,
SerialNo= WD-WX80AC965254
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs
FmtGapReq }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=?16?
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=625142448
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7
* signifies the current active mode
Die Seriennummer der Platte lautet also
WD-WX80AC965254
Diese Platte muss entfernt werden. Wird die andere Platte im laufenden Betrieb entfernt, sind die Daten mit größter Wahrscheinlichkeit unbrauchbar.
Platte aus dem Raid entfernen
Die Festplatte ist zum Teil noch im Raid vorhanden, da sich /dev/sdb1 noch im Array /dev/md0 befindet.
Wir entfernden die defekten Platte (in dem Fall die Partitionen) mit folgendem Befehl:
mdadm /dev/md0 --remove /dev/sdb1
mdadm /dev/md1 --remove /dev/sdb3
Neue Festplatte einsetzen und Partitionstabelle übernehmen
Entfernt nun die Festplatte (unbedingt auf die richtige Seriennummer achten. Den Server/PC dazu abschalten) und setzt die neue Platte ein. Diese muss natürlich die gleiche Größe haben. Optimal ist exakt die gleiche Festplatte der selben Baureihe.
Nun können wir entweder mit fdisk oder ähnlichem die Partitionen anlegen, oder wir klonen einfach die Partitionstabelle der funktionierenden Platte.
Dies funktioniert mit folgendem Befehl:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Nun emfpiehlt es sich die Maschine neu zu starten.
Raid aktivieren
Das degradedte Raid Array wird nun mit
mdadm --assemble --run /dev/md0
mdadm --assemble --run /dev/md1
gestartet und die neue Festplatte mit
mdadm /dev/md0 --manage --add /dev/sdb1
mdadm /dev/md1 --manage --add /dev/sdb3
ins Array eingebunden. Der Vorgang dauert je nach Festplattengröße einige Zeit. Anschließend muss auf der neuen Festplatte noch Grub installiert werden, damit davon auch gebootet werden kann. Man kann dies mit grub-install erledigen, oder man klont einfach wieder den MBR der fehlerfreien Festplatte.
Wir sichern hierzu den MBR zuerst in eine Datei mit
dd if=/dev/sda of=./mbrbackup.img bs=512 count=1
und sichern das Image dann auf die neue Platte zurück:
dd if=/mbrbackup.img of=/dev/sdb bs=446 count=1
Die Blocksize hier ist nicht mehr 512, da wir nicht alle Teile des MBR benötigen. Dieser setzt sich aus 3 Teilen zusammen:
- Bootstrap = 446 bytes
- Partition Table = 64 bytes
- Signature = 2 bytes
Zusammengerechnet ergibt dies die klassichen 512 Bytes des MBR. Benötigt wird aber nur der Bootstrap, also wählen wir eine Blocksize von 446 Bytes.
Neustarten des Systems OHNE Live CD
Jetzt kommt die Stunde der Wahrheit. Wenn alles geklappt hat, sollte unser System wieder einwandfrei booten. Wenn wir im System sind, können wir das Raid mit folgenden Befehlene überprüfen:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
Wenn der Server dann nicht bootet
gibt es 2 Möglichkeiten:
Anschließens folgendes Ausführen (wenn Grub in der 1. Partition ist, sprich diese als Bootpartition angelegt ist)
grub>root (hd0,0)
grub>setup (hd0)
grub>root (hd1,0)
grub>setup (hd1)
quit
Abschließende Worte
Dieser Artikel entstand deshalb, weil mir eben vorher eine HDD abgeraucht ist. Im Internet habe ich mir aus 10 verschiedenen Beiträgen die richtige Lösung zusammengesucht. Damit ihr es leichter habt, habe ich meinen Lösungsweg hier festgehalten.
Es scheint dass man die Swap Partition noch aktivieren muss, hierzu fehlt mir leider die Erfahrung.
Wenn ihr das Tutorial verbessern könnt, oder euch sonst noch was einfällt, benutzt bitte die Kommentarfunktion und verbessert mich ruhig.
In einem anderen Tutorial habe ich gelesen, dass es sich auch durchaus anbieten würde, die Swap Partition zu spiegeln. Da mein Setup aber vom Anbieter schon so erstellt wurde, habe ich hier darauf verzichtet.
Gutes Gelingen beim Rebuild und immer schön an die Backups euer Systeme denken!
Joe meint
Aufgrund meiner Erfahrung eine Ergänzung um überhaupt noch an Daten eines Software-RAID zu kommen. – Auch um sie einfach herunerkopieren zu können
In meinem Fall: RAID1 (2HDD), Volume Groups und LVM
1) Mit Live-USB booten
2) Module installieren
> apt-get install mdadm (Anmerkung: postfix muss nicht installiert werden —> Also Option 1)
> apt-get install lvm2
3) Recovery (3 Stufen)
> mdadm –assemble –scan
> vgscan
> lvscan
4) Die Daten können nun gemounted werden. Eine Liste erhält man mit:
> mount
Leser meint
> Es scheint dass man die Swap Partition noch aktivieren muss, hierzu fehlt mir leider die Erfahrung.
Das ist recht einfach:
Als Beispiel ist /dev/md1 die Swap-Partition. Also:
$ mkswap /dev/md1
$ swapon /dev/md1
$ swapon -s
Das wars.
P.S. Aus dem Text geht hervor, daß zwei getrennte Swap-Partitionen (sda2, sdb2) auf den Platten waren. Das ist nicht sinnvoll, da der Rechner beim Ausfall einer Platte panisch werden könnte. Sinnvoll hingegen ist, Swap auch auf ein RAID-1 zu legen.