Linux RAID 5 reparieren

Als Linux-Admin hat man meist alles im Griff. Manchmal macht man aber einen kleinen Fehler und schon stehen Schweißperlen auf der Stirn.

Ausgangslage

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. m( 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)

Lösung

Damit man das RAID wieder lauffähig bekommt, sind nur einige kleine Handgriffe notwendig. Zunächst betrachtet man die rauchenden Ruinen des Rest-RAIDs. 8-)

# 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.

Zusatztipp

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.

Anmelden