Eine ausgefallene Festplatte in einem Software RAID1 Array ersetzen

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht, wie man eine ausgefallene Festplatte von einem Linux RAID1 Array (Software RAID) entfernt und wie man dem RAID1 Array eine neue Festplatte hinzufügt ohne Daten zu verlieren.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In diesem Beispiel habe ich zwei Festplatten, /dev/sda und /dev/sdb, mit den Partitionen /dev/sda1 und /dev/sda2 sowie /dev/sdb1 und /dev/sdb2.

/dev/sda1 und /dev/sdb1 enthalten das RAID1 Array /dev/md0.

/dev/sda2 and /dev/sdb2 enthalten das RAID1 Array /dev/md1.

/dev/sda1 + /dev/sdb1 = /dev/md0

/dev/sda2 + /dev/sdb2 = /dev/md1

/dev/sdb ist ausgefallen und wir möchten sie ersetzen.

2 Wie weiß ich, dass eine Festplatte ausgefallen ist?

Wenn eine Festplatte ausgefallen ist, findest Du wahrscheinlich viele Fehlermeldungen in den Log-Dateien, z.B. /var/log/messages oder /var/log/syslog.

Du kannst auch Folgendes ausführen

cat /proc/mdstat

und anstelle der Zeichenfolge [UU] siehst Du [U_] ob Du ein degraded RAID1 Array hast.

3 Die ausgefallene Festplatte entfernen

Um /dev/sdb zu entfernen, werden wir /dev/sdb1 und /dev/sdb2 als fehlgeschlagen markieren und sie aus ihren entsprechenden RAID Arrays (/dev/md0 und /dev/md1) entfernen.

Zuerst markieren wir /dev/sdb1 als ausgefallen:

mdadm –manage /dev/md0 –fail /dev/sdb1

Die Ausgabe von

cat /proc/mdstat

sollte wie folgt aussehen:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Dann entfernen wir /dev/sdb1 aus /dev/md0:

mdadm –manage /dev/md0 –remove /dev/sdb1

Die Ausgabe sollte wie folgt sein:

server1:~# mdadm –manage /dev/md0 –remove /dev/sdb1
mdadm: hot removed /dev/sdb1

Und

cat /proc/mdstat

sollte dies anzeigen:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Nun führen wir die gleichen Schritte für /dev/sdb2 aus (was Teil von /dev/md1 ist):

mdadm –manage /dev/md1 –fail /dev/sdb2

cat /proc/mdstat

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[2](F)
24418688 blocks [2/1] [U_]

unused devices: <none>

mdadm –manage /dev/md1 –remove /dev/sdb2

server1:~# mdadm –manage /dev/md1 –remove /dev/sdb2
mdadm: hot removed /dev/sdb2

cat /proc/mdstat

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
24418688 blocks [2/1] [U_]

unused devices: <none>

Fahre das System dann runter:

shutdown -h now

und ersetze die alte /dev/sdb Festplatte mit einer neuen (sie muss wenigstens die gleiche Größe wie die alte haben – wenn sie nur wenige MBs kleiner als die alte ist, dann wird das Neuerstellen der Arrays fehlschlagen).

4 Die neue Festplatte hinzufügen

Nachdem Du die Festplatte /dev/sdb ausgetauscht hast, starte das System.

Das Erste, was wir tun müssen, ist, genau die gleiche Partitionierung wie auf /dev/sda erstellen. Wir führen dies mit einem einfachen Befehl aus:

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

Du kannst dies ausführen

fdisk -l

um zu überprüfen, ob beide Festplatten nun die gleiche Partitionierung haben.

Als Nächstes fügen wir /dev/sdb1 zu /dev/md0 und /dev/sdb2 zu /dev/md1 hinzu:

mdadm –manage /dev/md0 –add /dev/sdb1

server1:~# mdadm –manage /dev/md0 –add /dev/sdb1
mdadm: re-added /dev/sdb1

mdadm –manage /dev/md1 –add /dev/sdb2

server1:~# mdadm –manage /dev/md1 –add /dev/sdb2
mdadm: re-added /dev/sdb2

Beide Arrays (/dev/md0 und /dev/md1) werden synchronisiert. Führe dies aus

cat /proc/mdstat

um zu sehen, wann der Vorgang abgeschlossen ist.

Während der Synchronisation sieht die Ausgabe wie folgt aus:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>……………….] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec

md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>……………….] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

unused devices: <none>

Wenn die Synchronisation abgeschlossen ist, wird die Ausgabe so aussehen:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Das war’s, Du hast /dev/sdb erfolgreich ersetzt!

Das könnte dich auch interessieren …