Software RAID: Festplatte tauschen

In meinem Server sind 6 Festplatten installiert und mittel Software RAID (mdadm) redundant konfiguriert.

Eine dieser Festplatten scheint gerade auszufallen, und im folgenden möchte ich beschreiben wie man diesen Zustand erkennt und wie man die Platte ohne Datenverlust gegen eine Neue austauchen kann.

Die Festplatte /dev/sde hat zu Warnungen geführt, genauer gesagt hat mir das Linux diesbezügliche lokale Mails an den root Account geschickt. Mit dem Gnome Disk Utility kann man sich die SMART Daten anzeigen lassen. /dev/sde hatte einen steigenden Raw-Wert für Current_Pending_Sector. Was wohl bedeutet, dass sie kurz davor steht, das zeitliche zu segnen.
Aber so lange möchte ich natürlich nicht warten.

Hier also der Prozess, eine Festplatte in einem RAID 5 auszutauschen.
Es wäre nicht dumm, die RAID Konfiguration, Partitionierung und IDs der benutzten Festplatten gleich nach Installation Computers zu dokumentieren. Ein plötzlicher Komplettausfall einer Festplatte ist zwar unwahrscheinlich, aber nicht unmöglich. Und dann könnte es schwer werden, Informationen über die ausgefallene Platte herauszufinden.
Bei mir war das kein Problem, die Festplatte war ja prinzipiell noch funktionsfähig.

Schauen wir uns erst einmal mit cat /proc/mdstat die RAID-Konfiguration:

[root@arthus ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md124 : active raid1 sdb4[1] sda4[0]
1738164160 blocks super 1.2 [2/2] [UU]

md0 : active raid5 sde1[2] sdd1[1] sdf1[4] sdc1[0]
5860145664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

md125 : active raid1 sdb2[1] sda2[0]
2048960 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md126 : active raid1 sda1[0] sdb1[1]
8191936 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb3[1] sda3[0]
204840832 blocks super 1.2 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

Das ist jetzt nicht die einfachste denkbare RAID Konfiguration, zugegeben.
Im System sind 6 Festplatten mit jeweils 2 TB.
Auf sda und sdb sind 4 RAID 1 Arrays angelegt, md124, md125, md126, md127.
sdc, sdd, sde und sdf sind zu einem großen RAID 5 verbunden, das auf den Namen md0 hört.

Daß die Arrays alle Ok sind, sieht man an dem „active“ und dem [UU] bzw. [UUUU].

1. Partitionierung der fraglichen Festplatte dokumentieren

Dazu fdisk -l /dev/sde ausführen und Resultat notieren:

[root@arthus ~]# fdisk -l /dev/sde

Disk /dev/sde: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0xa75bd0b8

Device Boot Start End Blocks Id System
/dev/sde1 2048 3907029167 1953513560 fd Linux raid autodetect

2. Seriennummer der fraglichen Festplatte herausfinden:

[root@arthus ~]# lsblk --nodeps -o name,size,model,serial
NAME SIZE MODEL SERIAL
sda 1.8T WDC WD20EZRX-00D WD-WMC4N0F3FSZ5
sdb 1.8T WDC WD20EZRX-22D WD-WCC4M5HXPV7R
sdc 1.8T WDC WD20EARS-00M WD-WMAZA4930217
sdd 1.8T WDC WD20EARS-00M WD-WMAZA4965048
sde 1.8T WDC WD20EZRX-00D WD-WMC4M0E2X3FY
sdf 1.8T WDC WD20EARS-00M WD-WCAZA5654155

3. Festplatte aus dem RAID 5 entfernen (bzw. aus allen RAIDs in denen sie benutzt wird):

[root@arthus ~]# mdadm --fail /dev/md0 /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0

Der Zustand der Arrays ist jetzt wie folgt:

[root@arthus ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md124 : active raid1 sdb4[1] sda4[0]
1738164160 blocks super 1.2 [2/2] [UU]

md0 : active raid5 sde1[2](F) sdd1[1] sdf1[4] sdc1[0]
5860145664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U]

md125 : active raid1 sdb2[1] sda2[0]
2048960 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md126 : active raid1 sda1[0] sdb1[1]
8191936 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb3[1] sda3[0]
204840832 blocks super 1.2 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

md0 ist zwar immer noch „active“, d.h. man kann ganz normal Daten lesen und schreiben, aber das [UU_U] bedeutet, dass die dritte Platte im RAID 5 nicht mehr da ist.

4. Rechner herunterfahren, Festplatte austauschen

Frage: Welche Festplatte ist die Richtige??
/dev/sda ist am ersten SATA Port angeschlossen. Mit ein bisschen Glück kann man die Beschriftung auf dem Motherboard lesen, z.B. SATA_0.

Wenn wir /dev/sde austauschen wollen, sollten wir demnach nach dem 5. SATA Port suchen (SATA_4) und die dort angeschlossen Platte ausbauen. Und dann die Serienummer vergleichen!

Stimmt sie, Festplatte wegwerfen und an dieser Stelle eine Neue einbauen.

Stimmt sie nicht, weiter suchen 🙂

Übrigens muss die neue Festplatte durchaus nicht vom gleichen Typ sein. Noch nicht mal die gleiche Größe ist nötig, nur kleiner darf sie nicht sein. Man könnte z.B. eine ausgefallen 1 TB Platte durch eine 3 TB ersetzen, in der weisen Voraussicht, das die anderen 1 TB HDDs auch ausfallen werden. Irgendwann kann man dann ein Array aus 3 TB Platten aufbauen (erweitern).

Nach dem Tausch Rechner wieder einschalten.

5. Neue Festplatte partitionieren:

Die neue Festplatte sollte auch wieder als /dev/sde auftauchen, aber sie ist natürlich noch nicht partitioniert.
fdisk -l /dev/sde sollte also keine Partitionen anzeigen. Das korrigieren wir jetzt:

[root@arthus ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p

Disk /dev/sde: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000edb37

Device Boot Start End Blocks Id System

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-3907029167, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-3907029167, default 3907029167): 3907029167
Partition 1 of type Linux and of size 1.8 TiB is set

Command (m for help): t

Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sde: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000edb37

Device Boot Start End Blocks Id System
/dev/sde1 2048 3907029167 1953513560 fd Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Sicherheitshalber kontrollieren wir das Ergebnis:

[root@arthus ~]# fdisk -l /dev/sde

Disk /dev/sde: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0xa75bd0b8

Device Boot Start End Blocks Id System
/dev/sde1 2048 3907029167 1953513560 fd Linux raid autodetect

Sieht gut aus, es existiert eine Partition in der richtigen Größe.

6. Neue Partition dem Array hinzufügen

Jetzt müssen wir dem RAID nur noch sagen, dass es die neue Partition auf der neuen Festplatte benutzen soll:

[root@arthus ~]# mdadm --add /dev/md0 /dev/sde1
mdadm: added /dev/sde1

7. Kontrollieren, das der Rebuild läuft

[root@arthus ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md124 : active raid1 sdb4[1] sda4[0]
1738164160 blocks super 1.2 [2/2] [UU]

md0 : active raid5 sde1[5] sdd1[1] sdf1[4] sdc1[0]
5860145664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U]
[>....................] recovery = 0.0% (433788/1953381888) finish=300.1min speed=108450K/sec

md125 : active raid1 sda2[0] sdb2[1]
2048960 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md126 : active raid1 sdb3[1] sda3[0]
204840832 blocks super 1.2 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk

md127 : active raid1 sdb1[1] sda1[0]
8191936 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Wie man sehen kann, dauert die Rekonstruktion handliche 5 Stunden. Aber das soll einen nicht am Arbeiten hindern, denn das Array ist während der ganzen Zeit ganz  normal nutzbar. Man muss allenfalls eine gewisse Verlangsamung in Kauf nehmen.

 

Viel Spaß mit der neue Platte !

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.