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!