MDADM Raid nach Ausfall wiederherstellen

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:

  • Zuerst die Daten sichern. Mit einem Recovery Sytem booten und /dev/md0 sowie /dev/md1 mounten. Die Platten bzw. Partitionen können nicht direkt gesichert werden, da dort als Filesystem Typ das MDADM Raid angeben ist. Alle Daten sichern!!!!
  • Grub neu installieren. Dazu in ein Recovery System starten (ggf. dort das Paket „grub“ installieren, falls nicht vorhanden).
    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!

    Share your thoughts

    5 Replies to “MDADM Raid nach Ausfall wiederherstellen”

    1. 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

    2. > 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.

    Schreibe einen Kommentar

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