Software RAID bootet nicht mehr nach Tausch einer Festplatte

Zum Thema Software RAID hatte ich schon einmal etwas geschrieben:
Software RAID: Festplatte tauschen

Nun ist mir aber die erste Festplatte eines Linux RAID Arrays ausgefallen, was zu einem neuen Problem führt: Das System bootet nicht mehr!

Ausgangslage ist ein Linux System mit 6 Festplatten im RAID 5 Array mit der folgenden Konfiguration:
root@arthus:~ # cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid5 sdf1[6] sdc1[2] sde1[4] sdb1[1] sda1[7] sdd1[3]
9766912000 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]

Auf diesem Array gibt es drei Partitionen /dev/md0p1, /dev/md0p2, /dev/md0p3.
/dev/md0p2 ist /boot
/dev/md0p3 ist eine 9.1 TB großes LVM volume mit / und /swap

In dieser Konfiguration ist mir /dev/sda, also die erste Festplatte ausgefallen.
Ok, seien wir ehrlich, nicht ausgefallen. Ich habe versehentlich mit parted die Partitionstabelle gelöscht. Fragt nicht warum.. :)

Damit läuft der Rechner ganz normal weiter, aber nur bis zum nächsten Neustart. Dann bleibt er beim Booten bei “Loading Operating System” stehen.

Das liegt daran, dass der Computer ganz zu Beginn des Startvorganges den Bootsektor der ersten Festplatte (/dev/sda) ausliest und sich von dort aus über grub zum Linux Kernel hinaufhangelt. Und der Bootsektor fehlt jetzt.

Um das Problem zu lösen müssen wir zunächst die Festplatte ersetzen, das Array wiederherstellen und anschließend den Bootsektor und grub wieder konfigurieren. Den Vorgang beschreibe ich sinngemäß, weil ich nicht von allen Schritten Screenshots habe.

Ich gehe davon aus, dass die Festplatte /dev/sda schon ausgetauscht wurde und leer ist.

Schritt 1: Von Linux Live USB stick booten (Debian LIVE mit KDE in meinem Fall)

Schritt 2: Array Status kontrollieren. Sollte ungefähr so aussehen:
md127 : inactive raid5 sdf1[S] sdc1[S] sde1[S] sdb1[S] sdg1[S]
9766912000 blocks super 1.2 level 5, 512k chunk
Das Array ist inaktiv und hat in eine andere device id (md127) als vorher. /dev/sdd ist der USB Stick von dem gebootet wurde und ist nicht Teil des Arrays. /dev/sda fehlt ebenfalls.

Schritt 3: Neue Festplatte partitionieren, am besten genau so wie die alte. Dazu mit fdisk -l nachsehen, wie die anderen Platten partitioniert sind und fdisk /dev/sda die neue Platte entsprechend partitionieren. Bei mir ist das einfach eine primäre Partition in voller Größe vom Typ “FD” (Linux RAID).

Schritt 4: Array wieder aktivieren. Die Konfiguration wird von den existierenden Platten gelesen und das Array wieder zusammengebaut. Anschliessen kann man es starten:
mdadm --assemble --scan /dev/md127 /dev/sdb1 /dev/sdc1 /dev/sde1 /dev/sdf1 /dev/sdg1

Nun das Array mit mdadm --run /dev/md127 starten. Nun sollte es laufen, aber im Status degraded:
md127 : degraded raid5 sdf1[6] sdc1[2] sde1[4] sdb1[1] sdg1[3]
9766912000 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [_UUUUU]

Schritt 5: Rebuild starten. Wenn man nur die neue Platte zum Array hinzufügt, fängt automatisch ein Rebuild an.
mdadm --add /dev/md127 /dev/sda1

Mit cat /proc/mdstat kann man sich den Fortschritt anzeigen lassen, aber man muss warten, bis der Rebuild komplett ist. Wenn man jetzt neu startet, fängt der Rebuild danach von vorne an. Und das auch nur, wenn man die neue Platte aus dem Array entfernt und wieder hinzufügt. Also Geduld haben und warten, bei mir waren das gute 5 Stunden.
Anschließend sollte z.B. ein lsblk das Array inklusive der enthaltenen Partitionen korrekt anzeigen (nur der Ausschnitt mit einer Array-Platte):
sdf 8:80 0 1.8T 0 disk
└─sdf1 8:81 0 1.8T 0 part
└─md0 9:0 0 9.1T 0 raid5
├─md0p1 259:0 0 977K 0 part
├─md0p2 259:1 0 244.1M 0 part /boot
└─md0p3 259:2 0 9.1T 0 part
├─arthus--vg-root
│ 253:0 0 9.1T 0 lvm /
└─arthus--vg-swap_1
253:1 0 3.9G 0 lvm [SWAP]

Ein fdisk -l sollte auch die LVM Volumes anzeigen:
Disk /dev/mapper/arthus--vg-root: 9.1 TiB, 9996855148544 bytes, 19525107712 sectors

Schritt 6: Das alte Root-Filessystem in der Live Umgebung einbinden. Das ist nötig, damit wir den richtigen Bootsektor und grub installieren können. Dazu muss man natürlich wissen, wo / und /boot untergebracht waren.
Das Verzeichnis /mnt existiert bei Debian Live schon, man kann auch ein neues anlegen
mount /dev/mapper/arthus--vg-root /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount /dev/md0p2 /mnt/boot
chroot /mnt

Schritt 7: Bootsektor und grub auf die neue Platte schreiben
grub-install /dev/sda
Dadurch, dass wir voher mit chroot in die originale Linux-Umgebung gewechselt haben, wird hier die richtige Konfiguration auf die Platte geschrieben.

Schritt 8: Reboot
exit
shutdown -h now

USB Stick entfernen, Computer wieder einschalten.

Und siehe da, er startet wie gewohnt!

Der ganze Unfug ist übrigens nur deswegen passiert, weil ich die Platten gegen weniger, dafür größere Festplatten austauschen und eine SSD für das Betriebssystem einbauen möchte. Aber das ist eine andere Geschichte…

Lass andere teilhaben...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert