Einführung
Dieser Artikel beschreibt anhand eines Beispiels, welche Schritte notwendig sind, um eine defekte Festplatte in einem Software-RAID (mdadm
) durch eine neue auszutauschen.
WICHTIGER HINWEIS: alle Befehle sind beispielhaft und müssen entsprechend angepasst werden!
Sie finden eine Video-Anleitung auf dem Hetzner Youtube Channel (nur auf Englisch)
Beispiel-Szenario
Folgendes Setup wird angenommen:
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1]
1822442815 blocks super 1.2 [2/2] [UU]
md2 : active raid1 sda3[0] sdb3[1]
1073740664 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
524276 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
33553336 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Es existieren insgesamt vier Arrays:
- /dev/md0 als swap
- /dev/md1 als /boot
- /dev/md2 als /
- /dev/md3 als /home
/dev/sdb
ist in diesem Beispiel die ausgefallene Festplatte. An [U_]
bzw. [_U]
erkennt man, dass eine Festplatte nicht synchron ist. Wenn das RAID-Array intakt ist, steht dort [UU]
.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1](F)
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0] sdb3[1](F)
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1](F)
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0] sdb1[1](F)
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Die Änderungen am Software-RAID lassen sich im laufenden System durchführen. Falls die /proc/mdstat
bereits das Fehlen einer Festplatte wie im folgenden anzeigt, kann direkt ein Termin zum Austausch (siehe weiter unten) vereinbart werden.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0]
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0]
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0]
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0]
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Entfernen der defekten Festplatte
Bevor eine neue Festplatte eingebunden werden kann, muss die alte defekte Festplatte aus dem RAID-Array entfernt werden. Dies muss für jede Partition einzeln getan werden.
# mdadm /dev/md0 -r /dev/sdb1
# mdadm /dev/md1 -r /dev/sdb2
# mdadm /dev/md2 -r /dev/sdb3
# mdadm /dev/md3 -r /dev/sdb4
Mit folgendem Befehl lassen sich die eingebundenen Festplatten eines Arrays anzeigen:
# mdadm --detail /dev/md0
Unter Umständen kann es sein, dass eine verwendete Festplatte teilweise defekt ist und sich z.B. /dev/md0
im Status [U_]
befindet, wohingegen alle anderen Devices im Status [UU]
sind. In diesem Fall schlägt der Befehl
# mdadm /dev/md1 -r /dev/sdb2
fehl, da das device /dev/md1
in Ordnung ist.
In diesem Fall muss vorher der Befehl
# mdadm --manage /dev/md1 --fail /dev/sdb2
ausgeführt werden, um das RAID vorher in den Modus [U_]
zu vesetzen.
Support-Terminvereinbarung zum Tausch der defekten Festplatte
Um die defekte Festplatte austauschen zu können, sollte man vorab mit dem Support einen Termin vereinbaren. Damit die Festplatte getauscht werden kann muss der Server für kurze Zeit vom Netz genommen werden.
Zur Kontaktaufnahme verwenden Sie bitte die Kontaktformulare im Hetzner-Robot.
Vorbereiten der neuen Festplatte
Beide Festplatten im Array müssen die exakt gleiche Partitionierung haben. Je nach verwendeter Partitionstabelle (MBR
oder GPT
) sind dafür verschiedene Vorgehensweisen notwendig. Die GPT Partitionstabelle
kommt in der Regel auf Systemen mit Festplatten größer 2TiB zum Einsatz (z.B. EX4
und EX6
).
Backup des MBR/GPT
Vor dem Schreiben des MBR bzw. der GPT sollte diese gesichert werden. Somit kann bei einem falschen kopieren die Originale wieder hergestellt werden.
Backup bei MBR
sfdisk --dump /dev/sda > sda_parttable_mbr.bak
sfdisk --dump /dev/sdb > sdb_parttable_mbr.bak
sfdisk --dump /dev/sdX > sdX_parttable_mbr.bak
Restore bei MBR
sfdisk /dev/sda < sda_parttable_mbr.bak
sfdisk /dev/sdb < sdb_parttable_mbr.bak
sfdisk /dev/sdX < sdX_parttable_mbr.bak
Backup bei GPT
sgdisk --backup=sda_parttable_gpt.bak /dev/sda
sgdisk --backup=sdb_parttable_gpt.bak /dev/sdb
sgdisk --backup=sdX_parttable_gpt.bak /dev/sdX
Restore bei GPT
sgdisk --load-backup=sda_parttable_gpt.bak /dev/sda
sgdisk --load-backup=sdb_parttable_gpt.bak /dev/sdb
sgdisk --load-backup=sdX_parttable_gpt.bak /dev/sdX
Festplatten mit GPT
Die GUID Partitionstabelle (GPT) liegt redundant auf der Festplatte vor und muß daher mit Hilfe GPT-tauglicher Tools (z.B. parted
oder GPT fdisk) bearbeitet werden. Das Tool sgdisk
von GPT fdisk (im Hetzner Rescue-System bereits installiert) erlaubt es auf einfache Weise die Partitionstabelle auf die neue Festplatte (hier von sda
auf sdb
) zu kopieren.
sgdisk --backup=sda_parttable_gpt.bak /dev/sda
sgdisk --load-backup=sda_parttable_gpt.bak /dev/sdb
Anschließend gibt man der Festplatte eine neue zufällig UUID:
sgdisk -G /dev/sdb
Nun kann die Festplatte wieder in die Arrays eingebunden werden. Abschließend muß man noch den Bootloader auf der neuen Festplatten installieren.
Festplatten mit MBR
Die MBR Partitionstabelle einer Festplatte lässt sich mittels sfdisk
einfach kopieren.
# sfdisk -d /dev/sda | sfdisk /dev/sdb
/dev/sda
ist die Quell-, /dev/sdb
die Zielfestplatte.
(Optional): Falls die Partitionen im System nicht sichtbar werden, muß die Partitionstabelle durch den Kernel neu eingelesen werden:
# blockdev --rereadpt /dev/sdb
Selbstverständlich können die Partitionen auch von Hand mit fdisk
, cfdisk
oder sonstigen Tools erstellt werden. Die Partitionen sollten vom Typ Linux raid autodetect (ID fd)
sein.
Einbinden der neuen Festplatte
Nachdem die defekte Festplatte entfernt wurde, kann die neue schon eingebunden werden. Dies muss ebenfalls für jede Partition gemacht werden.
# mdadm /dev/md0 -a /dev/sdb1
# mdadm /dev/md1 -a /dev/sdb2
# mdadm /dev/md2 -a /dev/sdb3
# mdadm /dev/md3 -a /dev/sdb4
Die neue Festplatte ist somit Teil des Arrays und wird nun synchronisiert. Dieser Vorgang kann je nach Größe eine ganze Weile dauern. Mittels cat /proc/mdstat
kann der Status der Synchronisation aufgerufen werden.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sdb4[1] sda4[0]
1028096 blocks [2/2] [UU]
[==========>..........] resync = 50.0% (514048/1028096) finish=97.3min speed=65787K/sec
md2 : active raid1 sdb3[1] sda3[0]
208768 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
208768 blocks [2/2] [UU]
unused devices: <none>
Bootloader neu installieren
Da sich die Seriennummer der Platte geändert hat wird zuerst die Device-Map bei GRUB2 neu generiert mit:
grub-mkdevicemap -n
Führt man die Reparatur im gebooteten System durch, genügt bei GRUB2 ein grub-install
auf die neue Festplatte, also z.B.
grub-install /dev/sdb
Bei Grub1 (grub-legacy
) sind je nach dem welche Festplatte ausgefallen ist, mehr Schritte nötig.
- GRUB-Konsole aufrufen:
grub
- Partition, auf der
/boot
liegt, angeben:root (hd0,1) (/dev/sda2 = (hd0,1))
- Bootloader in den MBR schreiben:
setup (hd0)
- Um den Bootloader auch auf die 2. Festplatte zu schreiben:
-
- Festplatte als hd0 mappen:
device (hd0) /dev/sdb
- Festplatte als hd0 mappen:
- Schritte 2 und 3 exakt wiederholen (Befehle nicht ändern!)
-
- GRUB-Konsole beenden:
quit
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> device (hd0) /dev/sdb
device (hd0) /dev/sdb
grub> root (hd0,1)
root (hd0,1)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 26 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+26 p (hd0,1)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
#
Bei Reparatur im Hetzner Rescue-System muss zuerst das installierte System dort gemountet werden.
Nachdem Sie das installierte System gemountet haben, führen Sie die folgenden Rebinds durch:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
Dann müssen die oben genannten Schritte in der chroot
-Umgebung ausgeführt werden. Die Warnung grub-install couldn´t find physical volumes
kann ignoriert werden.