Als Linux-Admin hat man meist alles im Griff. Manchmal macht man aber einen kleinen Fehler und schon stehen Schweißperlen auf der Stirn.
Das Monitoring meldet, dass eine der vier Platten im RAID 5 ein Problem hat.
sd 3:0:0:0: [sdc] Unhandled sense code sd 3:0:0:0: [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE sd 3:0:0:0: [sdc] Sense Key : Medium Error [current] [descriptor] sd 3:0:0:0: [sdc] Add. Sense: Unrecovered read error - auto reallocate failed raid5:md127: read error corrected (8 sectors at 117295200 on sdc1)
Als erfahrener Admin meldet man sich an und analysiert das Problem mittels smartctl.
# smartctl -a /dev/sdc
Lesefehler sind nicht schön, die Platte muss gegen eine neue ausgetauscht werden. Um das zu tun deaktiviert man die Platte im RAID-Verbund um sie zu entnehmen.
# mdadm --manage --fail /dev/md127 sdc1
Danach geht man zum Server um die Festplatte aus dem Wechselrahmen zu entnehmen. Dummerweise, stimmen aber die Gerätebezeichnungen auf den Wechselrahmen nicht mehr und man zieht die falsche heraus. Damit hat das RAID nur noch 2 der 4 Platten und geht offline. Das RAID lässt sich auch nicht mehr starten, die fälschlicherweise entnommene Platte wird lediglich als Spare hinzugefügt und das RAID startet nicht mehr.
raid5: not enough operational devices for md127 (2/4 failed)
Damit man das RAID wieder lauffähig bekommt, sind nur einige kleine Handgriffe notwendig. Zunächst betrachtet man die rauchenden Ruinen des Rest-RAIDs.
# mdadm --detail /dev/md127 /dev/md127: Version : 0.90 Creation Time : [Ausgabe durch Autor entfernt] Raid Level : raid5 Used Dev Size : [Ausgabe durch Autor entfernt] Raid Devices : 4 Total Devices : 3 Preferred Minor : 127 Persistence : Superblock is persistent Update Time : [Ausgabe durch Autor entfernt] State : active, FAILED, Not Started Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 128K UUID : [Ausgabe durch Autor entfernt] Events : 0.4 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 0 0 1 removed 2 8 48 2 active sync /dev/sdd 3 0 0 3 removed 4 8 64 - spare /dev/sde
Mit diesen Details ist es möglich, das RAID wieder zusammenzufügen. Im konkreten Fall bei mir war es so, dass die Platten nach jedem Reboot die Bezeichnungen zufällig änderten. Sprich aus sda wurde z.B. sde. Um sicherzugehen, dass ich die Platten in der richtigen Reihenfolge zusammenfüge, fuhr ich den Rechner herunter und zog alle Platten des RAIDs aus den Wechselrahmen. Nach dem Neustart, steckte ich die Platten in der ursprünglichen Reihenfolge wieder in die Wechselrahmen. Dabei sollte auch gleich die defekte Festplatte gegen eine frische ausgetauscht werden.
Folgender Befehl fügt die Festplatten wieder zu einem RAID-Verbund zusammen. Die defekte Festplatte wird als „missing“ bezeichnet. Weiterhin wird mit –assume-clean dem RAID-Verbund mitgeteilt, dass er sauber ist und funktionieren sollte.
# mdadm --create /dev/md127 --level=5 --raid-devices=4 --assume-clean --metadata=0.90 --chunk=128 /dev/sdb1 missing /dev/sdc1 /dev/sdd1
Mit etwas Glück startet der RAID-Verbund und man sieht, welche Platte fehlt.
# cat /proc/mdstat
Zum Abschluss fügt man die neue Festplatte in den Verbund ein.
# mdadm --manage /dev/md127 --add /dev/sde1
Die Synchronisierung startet automatisch und in wenigen Stunden hat man wieder einen sauberen RAID 5-Verbund.
Wie findet man nun die richtige Platte im RAID-Verbund, wenn man sich nicht sicher ist. Das geht am leichtesten indem man auf die Platte zugreift und dann nachsieht, welche LED am Wechselrahmen leuchtet. Wenn man z.B. sdc tauschen möchte reicht folgender Befehl um Daten von der Platte zu lesen.
dd if=/dev/sdc of=/dev/null
Alternativ kann man natürlich auch die Seriennummer mit smartctl auslesen und die Platte im ausgeschaltetem Verbund manuell suchen.