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.

  1. /dev/sda1 + /dev/sdb1 = /dev/md0
  2. /dev/sda2 + /dev/sdb2 = /dev/md1
  3. /dev/sda3 + /dev/sdb3 = /dev/md2
  4. /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:

  1. md1 : active raid1 sda2[2] sdb2[1]
  2. 523712 blocks super 1.2 [2/1] [_U]
  3. resync=DELAYED
  4.  
  5. md0 : active raid1 sda1[2] sdb1[1]
  6. 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:

  1. md0 : active raid1 sdb1[1]
  2. 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.

  1. sgdisk --backup=/root/partitiontable_sda /dev/sda
  2. 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:

  1. sgdisk -p /dev/sda
  2. 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:

  1. Personalities : [raid1]
  2. md3 : active raid1 sda4[2] sdb4[1]
  3. 1839090112 blocks super 1.2 [2/1] [_U]
  4. [=======>.............] recovery = 35.4% (651758656/1839090112) finish=136.7min speed=144718K/sec
  5. bitmap: 1/14 pages [4KB], 65536KB chunk
  6.  
  7. md2 : active raid1 sda3[2] sdb3[1]
  8. 1073610752 blocks super 1.2 [2/1] [_U]
  9. resync=DELAYED
  10. bitmap: 8/8 pages [32KB], 65536KB chunk
  11.  
  12. md1 : active raid1 sda2[2] sdb2[1]
  13. 523712 blocks super 1.2 [2/1] [_U]
  14. resync=DELAYED
  15.  
  16. md0 : active raid1 sda1[2] sdb1[1]
  17. 16760832 blocks super 1.2 [2/2] [UU]
  18.  
  19. 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...

Neuen Kommentar schreiben