Festplattenaustausch im Software-RAID

Last change on 2023-01-17 • Created on 2020-03-19 • ID: RO-B1345

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:
      1. Festplatte als hd0 mappen: device (hd0) /dev/sdb
    • 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.

Table of Contents