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:
| |
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 BBUZwei Dinge fallen auf:
- Partially Degraded: eine Platte fehlt.
- 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?
| |
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 UpSlot 1 ist Failed. Die Details:
| |
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:
| |
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 errorSchritt 4: Manueller Rebuild-Versuch
Vielleicht ein Timing-Problem? Also manuell versuchen:
| |
Der Rebuild startet:
| |
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 errorSchritt 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/0x02Das 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:
| |
Firmware state: Rebuild
Inquiry Data: HGST HUC156060CSS204 EJ390XKHNU7URebuild läuft. Fortschritt beobachten:
| |
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:
| |
State : Optimal | |
Firmware state: Online, Spun UpAlle 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
| Befehl | Funktion |
|---|---|
megacli -LDInfo -Lall -aALL | Status aller virtuellen Laufwerke |
megacli -PDList -aALL | Status aller physischen Platten |
megacli -PDInfo -PhysDrv '[E:S]' -aALL | Details einer bestimmten Platte (Enclosure:Slot) |
megacli -PDRbld -ShowProg -PhysDrv '[E:S]' -aALL | Rebuild-Fortschritt |
megacli -PDRbld -Start -PhysDrv '[E:S]' -aALL | Rebuild manuell starten |
megacli -PDMakeGood -PhysDrv '[E:S]' -Force -aALL | Failed-Platte zurücksetzen |
megacli -AdpEventLog -GetLatest N -f /tmp/events.txt -aALL | Letzte N Events |
megacli -AdpEventLog -GetEvents -f /tmp/events.txt -aALL | Alle Events |
megacli -AdpAllInfo -aALL | Controller-Details |
megacli -CfgForeign -Clear -aALL | Fremde 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
“Platte wird erkannt” ≠ “Platte funktioniert.” Nur ein tatsächlicher Schreibtest (oder eben der Rebuild) deckt Defekte auf, die sich bei reinem Lesen nicht zeigen.
Event-Logs lesen.
dmesggibt 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.Ersatzplatten vorhalten. Eine RAID-Degradation ist kein Notfall — solange man eine funktionierende Ersatzplatte zur Hand hat. Ohne Ersatz wird aus “kein Problem” schnell “Problem”.
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.
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.