Diese Anleitung zeigt, wie Sie eine ausgefallene Festplatte aus einem Linux-RAID1-Verbund (Software-RAID) entfernen und dem RAID1-Verbund eine neue Festplatte hinzufügen, ohne Daten zu verlieren. Ich werde gdisk verwenden, um das Partitionsschema zu kopieren, damit es auch mit großen Festplatten mit GPT (GUID-Partitionstabelle) 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 bilden das RAID1-Array /dev/md0.
/dev/sda2 und /dev/sdb2 bilden das RAID1-Array /dev/md1.
/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sdb ist ausgefallen und wir wollen es ersetzen.
2 Wie erkenne ich, ob eine Festplatte ausgefallen ist?
Wenn eine Festplatte ausgefallen ist, finden Sie wahrscheinlich viele Fehlermeldungen in den Protokolldateien, z. /var/log/messages oder /var/log/syslog.
Sie können auch laufen
cat /proc/mdstat
und anstelle der Zeichenfolge [UU] sehen Sie [U_], wenn Sie ein degradiertes RAID1-Array haben.
3 Entfernen der ausgefallenen Festplatte
Um /dev/sdb zu entfernen, markieren wir /dev/sdb1 und /dev/sdb2 als ausgefallen und entfernen sie aus ihren jeweiligen RAID-Arrays (/dev/md0 und /dev/md1).
Zuerst markieren wir /dev/sdb1 als fehlgeschlagen:
mdadm --manage /dev/md0 --fail /dev/sdb1
Die Ausgabe von
cat /proc/mdstat
sollte so 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 so aussehen:
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
Und
cat /proc/mdstat
sollte dies zeigen:
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>
Jetzt machen wir die gleichen Schritte noch einmal für /dev/sdb2 (das 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>
Fahren Sie dann das System herunter:
shutdown -h now
und ersetzen Sie die alte /dev/sdb-Festplatte durch eine neue (sie muss mindestens die gleiche Größe wie die alte haben - wenn sie nur ein paar MB kleiner ist als die alte, dann schlägt der Neuaufbau der Arrays fehl).
4 Hinzufügen der neuen Festplatte
Nachdem Sie die Festplatte /dev/sdb geändert haben, booten Sie das System.
Das erste, was wir jetzt tun müssen, ist, genau die gleiche Partitionierung wie auf /dev/sda zu erstellen. Wir können dies mit dem Befehl sgdisk aus dem gdisk-Paket tun. Wenn Sie gdisk noch nicht installiert haben, führen Sie diesen Befehl aus, um es unter Debian und Ubuntu zu installieren:
apt-get install gdisk
Verwenden Sie für RedHat-basierte Linux-Distributionen wie CentOS:
yum install gdisk
und für OpenSuSE:
yast install gdisk
Der nächste Schritt ist optional, wird aber empfohlen. Um sicherzustellen, dass Sie ein Backup des Partitionsschemas haben, können Sie mit sgdisk die Partitionsschemata beider Platten in eine Datei schreiben. Ich werde die Sicherung im /root-Ordner speichern.
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
Im Falle eines Fehlers können Sie die Partitionstabellen mit der --load-backup-Option des sgdisk-Befehls wiederherstellen.
Kopieren Sie nun das Partitionsschema von /dev/sda nach /dev/sdb run:
sgdisk -R /dev/sdb /dev/sda
danach müssen Sie die GUID auf der neuen Festplatte randomisieren, um sicherzustellen, dass sie eindeutig sind
sgdisk -G /dev/sdb
Sie können rennen
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
um zu prüfen, ob beide Festplatten jetzt 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
Jetzt werden beide Arrays (/dev/md0 und /dev/md1) synchronisiert. Ausführen
cat /proc/mdstat
um zu sehen, wann es fertig ist.
Während der Synchronisation sieht die Ausgabe so 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 Synchronisierung abgeschlossen ist, sieht die Ausgabe so aus:
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, Sie haben /dev/sdb erfolgreich ersetzt!