True IT Stories

Ein größeres Array ist noch kein größerer Datastore

Ein Kollege hat an seinem letzten Arbeitstag noch etwas Gutes getan: Er hat in den ESXi-Host eines Kunden in China eine vierte Platte gesteckt und sie dem RAID5 hinzugefügt. Der Datastore war voll, die Platte lag bereit, der Controller nahm sie an. Dann ging er, und das Array rechnete das Wochenende durch.

Am Montag war die Erweiterung fertig, überall stand OK, und der Datastore hatte immer noch 1,09 TB. Der Host sah kein Byte mehr als vorher.

Drei Schichten, die nichts voneinander wissen

Ein HPE Smart Array kennt drei Ebenen: physische Platten, das Array darüber, und darin ein oder mehrere Logical Drives. Nur das Logical Drive sieht der Host, als LUN. Darauf legt ESXi seinen VMFS-Datastore.

Wer eine Platte ins Array steckt, vergrößert das Array. Sonst nichts. Das Logical Drive bleibt so groß, wie es war, und der neue Platz steht im Array als Unused Space. Der Host bemerkt davon nichts, weil sich seine LUN nicht geändert hat.

Der Kollege hatte Schritt eins gemacht. Schritt zwei, das Logical Drive strecken, ging in der Übergabe verloren. Und weil der Controller am Wochenende noch die Paritäten für die neue Platte rechnete, hätte er Schritt zwei am Freitag auch gar nicht mehr machen können.

Nachsehen

Der Host steht auf einem anderen Kontinent, also per SSH. Auf dem HPE-Image liegt das Kommandozeilenwerkzeug unter /opt/smartstorageadmin/ssacli/bin, und es liegt nicht im Pfad:

[root@esx01:/opt/smartstorageadmin/ssacli/bin] ssacli ctrl all show config
-sh: ssacli: not found
[root@esx01:/opt/smartstorageadmin/ssacli/bin] ./ssacli ctrl all show config

HPE Smart Array P408i-a SR Gen10 in Slot 0 (Embedded)

  Array A (SAS, Unused Space: 748  MB)
     logicaldrive 1 (279.00 GB, RAID 1, OK)
     physicaldrive 1I:3:1 (port 1I:box 3:bay 1, SAS HDD, 300 GB, OK)
     physicaldrive 1I:3:2 (port 1I:box 3:bay 2, SAS HDD, 300 GB, OK)

  Array B (SAS, Unused Space: 764097  MB)
     logicaldrive 2 (1.09 TB, RAID 5, OK)
     physicaldrive 1I:3:3 (port 1I:box 3:bay 3, SAS HDD, 600 GB, OK)
     physicaldrive 1I:3:4 (port 1I:box 3:bay 4, SAS HDD, 600 GB, OK)
     physicaldrive 2I:3:5 (port 2I:box 3:bay 5, SAS HDD, 600 GB, OK)
     physicaldrive 2I:3:6 (port 2I:box 3:bay 6, SAS HDD, 600 GB, OK)

Da steht es: Array B hat vier Platten und 764 GB ungenutzt, das Logical Drive darin hat 1,09 TB, wie vor der Erweiterung. Die Paritätsberechnung des Arrays ist durch:

[root@esx01:/opt/smartstorageadmin/ssacli/bin] ./ssacli ctrl slot=0 ld 2 show
        Size: 1.09 TB
        Fault Tolerance: 5
        Status: OK
        Parity Initialization Status: Initialization Completed

Die 764 GB sind roh, über alle vier Platten. Nach Abzug der Parität bleiben davon rund 560 GB nutzbar. Das ist die Zahl, die später im vSphere-Client auftaucht.

Strecken

Ein Befehl:

[root@esx01:/opt/smartstorageadmin/ssacli/bin] ./ssacli ctrl slot=0 ld 2 modify size=max forced

size=max nimmt allen freien Platz des Arrays. forced unterdrückt die Rückfrage, die auf einer nicht interaktiven Shell sonst hängen bleibt. Der Befehl kommt ohne Ausgabe zurück, und das Logical Drive ist sofort größer:

        Size: 1.64 TB
        Status: OK
        Parity Initialization Status: In Progress
        Parity Initialization Progress: 0% complete

Die Paritäten für den neuen Bereich rechnet der Controller im Hintergrund. Man muss nicht warten. Die Kapazität steht ab sofort zur Verfügung, und der Controller hält das Logical Drive dabei auf OK.

Und dann erst der Datastore

Der Host weiß davon noch nichts. Im vSphere-Client unter Storage Devices auf Rescan Storage, dann meldet die LUN 1,64 TB statt 1,09. Am Datastore selbst ändert das immer noch nichts, denn VMFS ist die dritte Schicht.

Erst Increase Datastore Capacity am Datastore zeigt den freien Platz auf dem Gerät an und bietet ihn zur Erweiterung:

vSphere-Assistent „Increase Datastore Capacity“: Partitionskonfiguration „Use Free space 559.64 GB to expand the datastore“, daneben die Balken VMFS 1,1 TB und Empty 559,6 GB

Wichtig ist die Option expand the datastore, nicht add a new extent. Ein Datastore aus zwei Extents funktioniert, ist aber ein Datastore, der beim Ausfall eines Extents ganz weg ist, und den beim nächsten Umzug niemand mehr versteht. Der Assistent wählt bei angrenzendem freien Platz von allein das Richtige, man sollte trotzdem hinsehen.

Danach: 1,64 TB Kapazität, 652 GB frei, drei VMs, die wieder Luft haben.

Was hängen bleibt

Drei Schichten, drei Schritte, drei Werkzeuge: Platte ins Array (Controller), Logical Drive strecken (ssacli), Datastore erweitern (vSphere). Keine der Schichten meldet, dass die nächste noch fehlt. Jede zeigt OK.

Und: Eine Arbeit, die ein Wochenende lang rechnet, gehört nicht auf den letzten Arbeitstag. Nicht, weil der Kollege etwas falsch gemacht hätte. Sondern weil der, der am Montag weitermacht, nicht wissen kann, wo der Vorgänger aufgehört hat, wenn überall OK steht.

Wer im vSphere-Client bei der Datastore-Erweiterung auf eine ganz andere Falle stößt, findet sie hier : eine Erfolgsmeldung, an der ein alter Browser schuld war.