Disks: Wie wird eine defekte Festplatte ausgetauscht?
Das Vorgehen sieht kurz zusammengefasst etwa folgendermassen aus:
- Defekte Festplatte aus dem RAID entfernen
- Festplatte durch Nine austauschen lassen
- Neue Festplatte fürs RAID vorbereiten
- Festplatte zum RAID hinzufügen
- Bootloader schreiben
Einleitung
Diese Anleitung bezieht sich auf Dedicated Server mit mindestens zwei Festplatten und Software-RAID 1 (mit von Nine vorinstalliertem Ubuntu/Debian). Ob bei Ihrem System ein Software-RAID zum Einsatz kommt, können Sie mit cat /proc/mdstat
prüfen. Sehen Sie dort mehr als nur unused devices:
, ist Ihr System mit einem Software-RAID ausgestattet.
Auf Software-RAID prüfen:
root@server:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[1] sdb2[0]
972443840 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[1] sdb1[0]
208640 blocks super 1.2 [2/2] [UU]
unused devices:
Das obige Bild zeigt die Ausgabe von cat /proc/mdstat
bei einem funktionsfähigen, gesunden RAID.
Vom System als "fehlerhaft" erkannte Partitionen werden mit (F)
gekennzeichnet.
Defekte Partition im RAID
1. Festplatte aus dem RAID entfernen
Eine Partition in einem RAID wird über den Befehl mdadm --manage /dev/mdX -f /dev/sdY
als fehlerhaft markiert. X steht für das spezifische RAID-Device, Y für die spezifische "echte" Partition. Wenn dies für alle Partition derselben Festplatte erfolgt ist, kann die Festplatte nun mit dem Befehl mdadm --manage /dev/mdX -r /dev/sdY
- wieder mit den gleichen Nummern für jede Partition - aus dem RAID entfernt werden.
Um beispielsweise die Festplatte /dev/sdb
aus dem RAID zu entfernen, kann dies mit den folgenden Befehlen erreicht werden:
root@server:~# mdadm --manage /dev/md1 -f /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md1
root@server:~# mdadm --manage /dev/md1 -r /dev/sdb2
mdadm: hot removed /dev/sdb2 from /dev/md1
root@server:~# mdadm --manage /dev/md0 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
root@server:~# mdadm --manage /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
2. Festplatte tauschen lassen
Senden Sie uns eine Anfrage auf unsere Support-Adresse zu. Wir benötigen die IP-Adresse Ihres Servers und zur Sicherheit die Seriennummer der noch funktionierenden Festplatte.
Anzeigen der Seriennummer der funktionierenden Festplatte zum Beispiel /dev/sda
:
root@server:~# hdparm -I /dev/sda | grep -i serial
Model=WDC WD1003FBYX-01Y7B1, FwRev=01.01V02, SerialNo=WD-WCAW35284076
3. Festplatte fürs RAID vorbereiten
Die neue Festplatte muss nun im RAID eingefügt werden. Sie hat gegebenenfalls einen anderen Festplatten-Buchstaben als die ersetzte Festplatte. Die Festplatten-"Nummerierung" findet man unter den Partitionsinformationen in /proc/partitions
, indem man die Festplatten-Buchstaben mit den im RAID vorhandenen Partitionen vergleicht. So hat man beispielsweise /dev/sdc
als die neue Festplatte ausfindig gemacht und möchte diese nun im RAID erfassen:
root@server:~# cat /proc/partitions
major minor #blocks name
8 0 976762584 sda
8 1 208813 sda1
8 2 972575100 sda2
9 0 208640 md0
9 1 972443840 md1
252 0 10485760 dm-0
252 1 8388608 dm-1
252 2 485490688 dm-2
252 3 104857600 dm-3
252 4 10485760 dm-4
8 16 976762584 sdc
Anfangs muss die Partitionierung einer bestehenden Festplatte auf die neue Festplatte übernommen werden. Für Festplatten mit MBR-Partitionstabellen ist dies mit dem Befehl sfdisk
möglich. Mit sfdisk lässt sich mithilfe des folgenden Befehls die Partitionstabelle von /dev/sda
auf /dev/sdc
kopieren:
root@server:~# sfdisk -d /dev/sda | sfdisk /dev/sdc
Disk /dev/sdc: 121601 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 0 - 0 0 0 Empty
/dev/sdc2 0 - 0 0 0 Empty
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdc1 * 63 417689 417627 fd Linux raid autodetect
/dev/sdc2 417690 1945567889 1945150200 fd Linux raid autodetect
/dev/sdc3 0 - 0 0 Empty
/dev/sdc4 0 - 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
Mit einer GPT-Partitionstabelle bewerkstelligen Sie das Kopieren wie folgt: sgdisk -R=/dev/sdc /dev/sda
(beachten Sie die Reihenfolge!). Bei GPT ist es notwendig, den "GUID"-Wert mit einem zufälligen Wert zu füllen, damit die Festplatte - im gleichen Server - nutzbar ist: sgdisk -G /dev/sdc
.
Nun haben Sie zwei identisch partitionierte Festplatten und können mit dem Hinzufügen der neuen Festplatte zum bestehenden RAID fortfahren.
4. Festplatte zum RAID hinzufügen
Als Referenz dient wiederum die Ausgabe von cat /proc/mdstat
, um die richtige Partition zum korrekten RAID-Device zu ermitteln. In diesem Beispiel würde die Partition /dev/sdc1
zum RAID-Device /dev/md0
hinzugefügt werden sowie /dev/sdc2
zu /dev/md1
:
root@server:~# mdadm --manage /dev/md0 -a /dev/sdc1
mdadm: added /dev/sdc1
root@server:~# mdadm --manage /dev/md1 -a /dev/sdc2
mdadm: added /dev/sdc2
Das RAID beginnt nun damit, die Daten auf die neue Festplatte zu synchronisieren. Dies nimmt je nach Festplattengrösse und Serverlast einige Zeit in Anspruch:
root@server:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdc2[2] sda2[1]
972443840 blocks super 1.2 [2/1] [_U]
[>....................] recovery = 0.0% (659456/972443840) finish=860.5min speed=18819K/sec
md0 : active raid1 sdc1[2] sda1[1]
208640 blocks super 1.2 [2/1] [_U]
resync=DELAYED
unused devices:
5. Bootloader schreiben
Als letzter Schritt muss der Bootloader auf der neuen Festplatte installiert werden, damit der Server beim nächsten Neustart wieder korrekt bootet. Der Befehl dazu lautet:
root@server:~# grub-install /dev/sdc
Installation finished. No error reported.
Tipps
Geschwindigkeit erhöhen
Die Geschwindigkeit der Wiederherstellung ist gedrosselt, damit der Server im laufenden Betrieb weiterarbeiten kann. Um die Wiederherstellung zu beschleunigen, kann das Limit manuell erhöht werden.
Ermitteln des aktuellen Limits:
root@server:~# sysctl dev.raid.speed_limit_min
dev.raid.speed_limit_min = 40000
Setzen eines neuen Limits:
root@server:~# sysctl -w dev.raid.speed_limit_min=400000
dev.raid.speed_limit_min = 400000
Festplatte wird nicht erkannt
In einigen Fällen kommt es vor, dass die Festplatte nicht erkannt wird. Abhilfe schafft ein "Rescan" des SCSI-Adapters.
Dies kann durch folgenden Befehl erreicht werden - die Nummerierung des host
Teils kann variieren (0, 1, 2, 3 usw.):
root@server:~# echo "- - -" > /sys/class/scsi_host/host0/scan