Defekte Festplatte im Linux Software Raid tauschen

Es kommt immer mal wieder vor, das eine Festplatte den Geist aufgibt. Gut wenn man in solch einem Fall ein Raid hat. Ich weiß, Software Rais ist nicht das beste, aber immer noch besser als gar kein Raid.
Wie aber nun die Platte getauscht wird um den Platz der alten Platte im Raid zu ersetzen, möchte ich hier nun kurz erklären.

In meinem Fall hat das System 2 Festplatten /dev/sda und /dev/sdb mit jeweils 4 Partiotionen /dev/sda1 bis /dev/sda4 und /dev/sdb1 bis /dev/sdb4. Hierbei bilden die Partitionen mit der selben Nummer jeweil einen eigenen RAID 1 Verbund.

/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sda3 + /dev/sdb3 = /dev/md2
/dev/sda4 + /dev/sdb4 = /dev/md3

Heute hat sich /dev/sda mit einem Hardwaredefekt verabschiedet. :-\

Feststellen ob eine Platte im Raid defekt ist

Wenn eine Platte wirklich hinüber ist, werdet ihr das ganz schnell in den Logfiles /var/log/messages oder /var/log/syslog sehen, da in diesem Fall immer wieder Logeinträge zum defekt geschreiben werden.
Alternativ, kann man sich auch den Status des Raids mit Hilfe von
cat /proc/mdstat
ansehen.

Pro Raidverbund gibt es eine Sektion, die wie folgt ausshen:

md1 : active raid1 sda2[2] sdb2[1]
      523712 blocks super 1.2 [2/1] [_U]
        resync=DELAYED
 
md0 : active raid1 sda1[2] sdb1[1]
      16760832 blocks super 1.2 [2/2] [UU]

Im Normalfall sollte die Info über den Plattenstatus [UU] sein. Diese Info zeigt mir das beide Platten Up, sprich Ok, sind.
[_U] zeigt mir wiederrum das die erste Platte im Verbund nicht OK ist.

Festplatte austauschen

Für den Fall das das System die Platten nicht schon selbst als die Platte bzw. die Partitionen als "failed" markiert hat, sollten wir das nun selbst machen.
Mit

mdadm --manage /dev/md0 --fail /dev/sda1

markieren wir die erste Partition auf der Platte /dev/sda als defekt.
Danach entfernen wir die Platte mit

mdadm --manage /dev/md0 --remove /dev/sda1

aus dem Raid.

cat /proc/mdstat

sollte nun für /dev/md0 wie folgt aussehen:

md0 : active raid1 sdb1[1]
      16760832 blocks super 1.2 [2/1] [_U]

Diesen Vorgang muss nun für alle Partitionen der defekten Platte wiederholt werden.

Nachdem alle Partitionen der Platte aus den Raids entfernt wurden, können wir die Festplatte austauschen.
Bei meinem System kann ich die Festplatten im laufenden betrieb tauschen. Das spart mir an der Stelle den Shutdown um die Platte tauschen zu können.
Wenn das bei euch nicht der Fall ist, solltet Ihr euren Rechner unbedingt runter fahren, bevor ihr die Platte tauscht.

Alte, kaputte Platte raus, neue Platte rein und ggf. den Rechner wieder starten.
Zu beachten ist, das die neue Platte mindestens die selbe Kapazität hat, wie die alte!

Neue Platte zum Raid hinzufügen

Als erstes müssen wir sicherstellen, das Partitionstabelle der neuen Platte mit der der alten Platte bzw der aktiven Platte im Raid, identisch ist. Hierfür möchte ich zwei Möglichkeiten aufzeigen.

Partitionstabelle kopieren

sfdisk

Die erste Möglichkeit ist es, die Partitionstabelle mit Hilfe von sfdisk zu dumpen.

sfdisk -d /dev/sdb | sfdisk /dev/sda

erstellt ein Dump der Partitionstablle von /dev/sdb und schreibt diese auf /dev/sda. Allerdings musste ich feststellen, das das bei größeren Platten nicht richtig funktioniert.

Wenn wir uns das Ergebniss mit

fdisk -l

ansehen, sehen wir ob die Partitionen der beiden Festplatten identisch ist. Wenn das nicht der Fall ist, kann man immer noch die zweite Variante versuchen.

sgdisk

Die zweite Möglichkeit ist das Tool sgdisk aus dem Packet gdisk.

Für den Fall das das Packet noch nicht installiert ist solloten wir das nun tun.
Unter Debian und Ubuntu führen wir

apt-get install gdisk

aus, um das Packet und dessen Abhängikeiten zu installieren.

Unter RedHat installieren wir das Packet mit:

yum install gdisk

Und unter SuSE:

yast install gdisk

Nachdem wir alle benötigten Pakete installiert sind machen wir nun weiter.

Optional können wir noch ein Backup der aktuellen Partitionstabllen erstellen.

sgdisk --backup=/root/partitiontable_sda /dev/sda
sgdisk --backup=/root/partitiontable_sdb /dev/sdb

Nun kopieren wir die Partitionstablle von /dev/sdb nach /dev/sda

sgdisk -R /dev/sda /dev/sdb

Da wir das Schema eins zu eins kopiert haben, müssen wir sicherstellen, das die GUID's der Partitionen eindeutig sind.

sgdisk -G /dev/sda

Jetzt wollen wir nur noch sicher gehen, das das kopieren auch wirklich funktioniert hat.
Um die Partitionen vergleichen zu können lassen wir uns die Infos mit:

sgdisk -p /dev/sda
sgdisk -p /dev/sdb

ausgeben und können diese nun vergleichen.

Partitionen dem Raid hinzufügen

Da die neue Platte nun den Anforderungen entspricht können wir die Partitionen den einzelnen Raids zuweisen.

Als erstes weisen wir /dev/sda1 dem Raid Array /dev/md0 zu.

mdadm --manage /dev/md0 --add /dev/sda1

Das ganze wird im Erfolgsfall mit mdadm: re-added /dev/sda1 bestätigt.

Diesen Schritt wiederholen wir nun für jede Partition.

Sobald eine Partition dem Raid zugewiesen wurde, beginnt die Synchronisation der Daten.
Den Stand der Synchronisation zu überprüfen geben wir einfach

cat /proc/mdstat

ein.

Bei mir sieht das nach einiger Zeit so aus:

Personalities : [raid1]
md3 : active raid1 sda4[2] sdb4[1]
      1839090112 blocks super 1.2 [2/1] [_U]
      [=======>.............]  recovery = 35.4% (651758656/1839090112) finish=136.7min speed=144718K/sec
      bitmap: 1/14 pages [4KB], 65536KB chunk
 
md2 : active raid1 sda3[2] sdb3[1]
      1073610752 blocks super 1.2 [2/1] [_U]
        resync=DELAYED
      bitmap: 8/8 pages [32KB], 65536KB chunk
 
md1 : active raid1 sda2[2] sdb2[1]
      523712 blocks super 1.2 [2/1] [_U]
        resync=DELAYED
 
md0 : active raid1 sda1[2] sdb1[1]
      16760832 blocks super 1.2 [2/2] [UU]
 
unused devices: <none>

Wir sehen das md0 bereits fertig synchronisiert wurde, md1 und md2 noch ausstehen und md3 im Moment synchronisiert wird.

Nachdem alle Partitionen synchronisiert sind, war's das auch schon. Wir haben die defekte Platte /dev/sda ausgetauscht.

Wem die Synchronisation zu lange dauert kann sich auch mal den Post Wiederherstellungsgeschwindigkeit von Linux Software RAID erhöhen ansehen...


In this article



Most Recent

Hintergrundbeleuchtung für Laptops, die als Server laufen, ausschalten
Continue reading...

More posts

Subnetz Masken - Cheat Sheet
Subnetz Masken - Cheat Sheet

Da ich im Moment relativ viel mit Netzwerken und Subnetzen zu tun habe hier eine kleine Gedächtnisstütze...

Webseiten Timings mit cUrl messen
Webseiten Timings mit cUrl messen

Wer kennt es nicht. Bei Webseiten ist man immer und immer wieder am optimieren, um seinen Seiteninhalt schnellst möglich...

Windows 2012 Demo aktivieren
Windows 2012 Demo aktivieren

Nachdem mir die Demo Lizenz auf einem meiner Windows Server ausgelaufen ist, wollte ich diese nun aktivieren. Wie sich herausstellte, ist das aber...

Linux File Cache leeren
Linux File Cache leeren

Für den Fall, das der komplette Arbeitsspeicher belegt ist, kann das vom File System Cache kommen. Es kommt immer mal wieder vor, das die gecachten...