RAID-Rebuild mit defekter Ersatzplatte. Eine MegaCLI-Fehlersuche aus der Praxis

Ausgangslage

Ein Dell PowerEdge mit PERC 6/i RAID-Controller, sechs SAS-Festplatten im RAID-6. Der Server läuft als Proxmox-VE-Host und beherbergt virtuelle Maschinen. RAID-6 bedeutet: Zwei Platten dürfen gleichzeitig ausfallen, bevor Daten verloren gehen.

Dann passiert, was irgendwann immer passiert: Eine Platte in Slot 1 stirbt. Das Array wechselt in den Status Partially Degraded: noch funktionsfähig, aber nur noch einfach redundant. Ab jetzt zählt die Zeit.

Schritt 1: Status erfassen

Auf einem Linux-System mit MegaRAID-Controller ist megacli das Werkzeug der Wahl. Zuerst der Überblick über das Array:

1
megacli -LDInfo -Lall -aALL
Virtual Drive: 0 (Target Id: 0)
Name                : PVE5
RAID Level          : Primary-6, Secondary-0, RAID Level Qualifier-3
Size                : 2.180 TB
State               : Partially Degraded
Number Of Drives    : 6
Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU

Zwei Dinge fallen auf:

  1. Partially Degraded: eine Platte fehlt.
  2. WriteThrough statt WriteBack. Der Controller traut der BBU (Battery Backup Unit) nicht und schreibt direkt auf die Platten. Das kostet Performance, ist aber sicherer.

Schritt 2: Welche Platte ist betroffen?

1
megacli -PDList -aALL | grep -E 'Slot|Firmware state'
Slot Number: 0  →  Firmware state: Online, Spun Up
Slot Number: 1  →  Firmware state: Failed
Slot Number: 2  →  Firmware state: Online, Spun Up
Slot Number: 3  →  Firmware state: Online, Spun Up
Slot Number: 4  →  Firmware state: Online, Spun Up
Slot Number: 5  →  Firmware state: Online, Spun Up

Slot 1 ist Failed. Die Details:

1
megacli -PDInfo -PhysDrv '[32:1]' -aALL

Hier sehen wir Hersteller, Modell, Seriennummer, Firmware-Version, Temperatur und Fehlerzähler. Alles wichtig für eine eventuelle RMA-Anfrage beim Händler.

Schritt 3: Ersatzplatte einbauen — erster Versuch

Neue SAS-Platte in Slot 1 eingeschoben. Der Controller erkennt sie:

1
2
3
# Event-Log prüfen
megacli -AdpEventLog -GetLatest 5 -f /tmp/events.txt -aALL
cat /tmp/events.txt
State change on PD 01(e0x20/s1) from UNCONFIGURED_BAD to UNCONFIGURED_GOOD
Inserted: PD 01(e0x20/s1)

Soweit normal. Der Controller erkennt die neue Platte und markiert sie als nutzbar. Ein automatischer Rebuild startet, und bricht sofort ab:

Rebuild started on PD 01(e0x20/s1)
Rebuild failed on PD 01(e0x20/s1) due to target drive error

Schritt 4: Manueller Rebuild-Versuch

Vielleicht ein Timing-Problem? Also manuell versuchen:

1
2
3
4
# Platte zurücksetzen
megacli -PDMakeGood -PhysDrv '[32:1]' -Force -aALL
# Rebuild starten
megacli -PDRbld -Start -PhysDrv '[32:1]' -aALL

Der Rebuild startet:

1
megacli -PDRbld -ShowProg -PhysDrv '[32:1]' -aALL
Rebuild Progress on Device at Enclosure 32, Slot 1 Completed 0% in 0 Minutes.

18 Sekunden später:

Error on PD 01(e0x20/s1) (Error f0)
State change on PD 01(e0x20/s1) from REBUILD to FAILED
Rebuild failed on PD 01(e0x20/s1) due to target drive error

Schritt 5: Fehleranalyse

Error f0 ist ein SCSI Sense Code. Im Event-Log findet sich der vollständige Sense-Datensatz:

Sense Key: 0x4B (ABORTED COMMAND)
ASC/ASCQ: 0x00/0x02

Das bedeutet: Die Platte bricht den Schreibvorgang ab. Nicht der Controller, nicht das Kabel . Die Platte selbst verweigert die Arbeit. Bei leerem Media Error Count und unauffälligem S.M.A.R.T. deutet das auf einen internen Firmware- oder Elektronikdefekt hin.

Auffällig: Der Fehler tritt ausschließlich unter Schreiblast (Rebuild) auf. Ein einfaches Erkennen der Platte funktioniert problemlos. Sie meldet sich korrekt an, liefert ihre Identifikationsdaten und zeigt normale Temperaturen. Erst wenn tatsächlich Daten geschrieben werden, steigt sie aus.

Das ist tückisch, weil ein oberflächlicher Test (“Platte wird erkannt, alles gut”) den Defekt nicht aufdeckt.

Schritt 6: Zweite Ersatzplatte

Also die nächste Platte vom Stapel — diesmal eine HGST statt Seagate:

1
2
# Nach Einbau: Status prüfen
megacli -PDInfo -PhysDrv '[32:1]' -aALL | grep -E 'Firmware state|Inquiry'
Firmware state: Rebuild
Inquiry Data: HGST    HUC156060CSS204  EJ390XKHNU7U

Rebuild läuft. Fortschritt beobachten:

1
megacli -PDRbld -ShowProg -PhysDrv '[32:1]' -aALL
Rebuild Progress on Device at Enclosure 32, Slot 1 Completed 1% in 1 Minutes.

Kein Error f0. Kein Abbruch. Der Rebuild läuft stabil mit ca. 1% pro Minute durch — nach etwa 90 Minuten:

Rebuild Progress on Device at Enclosure 32, Slot 1 Completed 64% in 55 Minutes.

Ergebnis

Nach etwa 80 Minuten war der Rebuild abgeschlossen:

1
megacli -LDInfo -Lall -aALL | grep State
State               : Optimal
1
megacli -PDInfo -PhysDrv '[32:1]' -aALL | grep 'Firmware state'
Firmware state: Online, Spun Up

Alle sechs Platten wieder online, volle RAID-6 Redundanz wiederhergestellt. Die defekte Seagate geht per RMA zurück an den Händler, mit dem MegaCLI-Fehlerbericht als Beleg.

Die wichtigsten MegaCLI-Befehle im Überblick

BefehlFunktion
megacli -LDInfo -Lall -aALLStatus aller virtuellen Laufwerke
megacli -PDList -aALLStatus aller physischen Platten
megacli -PDInfo -PhysDrv '[E:S]' -aALLDetails einer bestimmten Platte (Enclosure:Slot)
megacli -PDRbld -ShowProg -PhysDrv '[E:S]' -aALLRebuild-Fortschritt
megacli -PDRbld -Start -PhysDrv '[E:S]' -aALLRebuild manuell starten
megacli -PDMakeGood -PhysDrv '[E:S]' -Force -aALLFailed-Platte zurücksetzen
megacli -AdpEventLog -GetLatest N -f /tmp/events.txt -aALLLetzte N Events
megacli -AdpEventLog -GetEvents -f /tmp/events.txt -aALLAlle Events
megacli -AdpAllInfo -aALLController-Details
megacli -CfgForeign -Clear -aALLFremde RAID-Konfiguration löschen

Hinweis: [E:S] steht für [Enclosure:Slot], also z.B. [32:1]. Die Enclosure-ID findet man über megacli -PDList.

Lektionen

  1. “Platte wird erkannt” ≠ “Platte funktioniert.” Nur ein tatsächlicher Schreibtest (oder eben der Rebuild) deckt Defekte auf, die sich bei reinem Lesen nicht zeigen.

  2. Event-Logs lesen. dmesg gibt einen groben Hinweis, aber die Details stecken im MegaRAID Event-Log. Die Sense Codes verraten, ob das Problem am Controller, am Kabel oder an der Platte liegt.

  3. Ersatzplatten vorhalten. Eine RAID-Degradation ist kein Notfall — solange man eine funktionierende Ersatzplatte zur Hand hat. Ohne Ersatz wird aus “kein Problem” schnell “Problem”.

  4. RAID-6 ist kein Backup. Auch mit doppelter Parität: Wenn eine Platte ausfällt und die Ersatzplatte ebenfalls defekt ist, steht man mit RAID-6 genauso da wie mit RAID-5 und einer toten Platte, nur noch eine Platte entfernt vom Totalverlust.

  5. Dokumentation für den Händler. Die MegaCLI-Ausgaben (PDInfo + Event-Log) sind genau das, was ein Händler für eine RMA-Abwicklung braucht. Seriennummer, Fehlerbeschreibung, Sense Codes — alles in einem Report zusammenfassen spart Rückfragen.


Hinweis: megacli heißt je nach Distribution und Installation auch MegaCli64, megacli64 oder storcli64 (neuerer Nachfolger). Die Syntax ist weitgehend identisch.