Thin Provisioning unter VMware vSphere Speicherplatz zurückgewinnen

Grund­sätzlich tritt das Problem der Speicher­platzrück­gewinnung bei Thin Provi­sioning auf. Dabei muss man zwischen der „dünnen“ Bereit­stellung auf der Ebene von vSphere und des Storage-Systems unter­scheiden. Insgesamt erweist sich VMFS 6 (ESXi 6.5 und 6.7) hier deutlich flexibler als VMFS 5.

Ganz allgemein gibt es zwei Fälle, bei denen Speicherplatz frei wird:

  1. Beim Löschen oder Migrieren von VMs bzw. Snapshots
  2. Beim Löschen von Dateien innerhalb einer VM, deren virtuelle Disk im Thin-Format bereitgestellt wurde

Bei diesen Vorgängen verbleiben Blöcke mit ungenutztem Speicher im Array. Erkennt dieses jedoch nicht, dass die Daten aus den Blöcken gelöscht wurden, dann bleiben sie so lange zugeteilt, bis sie vom Daten­speicher selbst freigegeben werden.

Rückgewinnung auf VMware-Ebene

Durch das Generieren neuer Daten wachsen die VMDK-Dateien für Thin-Festplatten an, schrumpfen allerdings nicht automatisch, wenn Daten gelöscht werden. Das Problem betrifft auch Backup-Lösungen, die über die vStorage-API kommunizieren und Storage vMotion (svmotion). Hinzu kommt, dass die meisten Gast-Dateisysteme die Daten nicht wirklich löschen, sondern nur als gelöscht markieren. Daher ist eine virtuelle Festplattendatei permanent im Wachstum begriffen. Nur wenn eine VM über das Gast-OS tatsächlich Daten löscht und den Speicher aktiv als frei markiert, kann dieser zum Beispiel durch ein Storage vMotion zurück­gewonnen werden.

Außerhalb des Gastsystems kann VMware nicht erkennen, welche Daten tatsächlich gelöscht wurden. Das gleiche Problem hat man bei der Formatierung, also dem Schreiben mit Nullen. Aus diesem Grund sollte der Vorgang etwa so ablaufen: Löscht der Nutzer Dateien in einer VM, wird Speicherplatz freigegeben. Das Gast­betriebs­system benach­richtigt dann VMFS über den neu verfügbaren Speicherplatz und sendet dazu einen unmap-Befehl zum Aufheben der Zuordnung. Dadurch wird Speicherplatz im VMFS-Datenspeicher freigegeben, und danach wird der Befehl an die Array-Ebene übergeben. Neu ab ESXi 6.5 ist, dass ein VMFS6-Datastore den Befehl zur Speicher­platzrück­forderung automatisch senden kann, während man sie bei VMFS5 manuell anfordern muss. Dass VMFS6 den Befehl automatisch senden kann, liegt am für thin-provisionierte Disks verwendeten SESparse-Format.

Eine Ausnahme ist in diesem Zusammen­hang die Freigabe von Speicher auf VM-Ebene bei thick-provisionierten Disks. Sind die VMware Tools installiert, dann kann man in der Toolbox-GUI unter dem Reiter Verkleinern Platz aktiv zurückgewinnen. Um diese Funktion mit thin-provisionierten Disks zu nutzen, müssten diese also erst im Datastore „inflatet“ werden.

Das „Shrinken“ von Disks über die VMware-Tools.

Bei thin-provisionierten virtuellen Disks unterstützen vSphere 6.0 und älter das Rückfordern von Speicher aus der VM nur bedingt bzw. teilweise, da hier VMFS5 der begrenzende Faktor ist. Dort kann nämlich das Dateisystem den vom Gast-OS ausgelösten unmap-Befehl nicht direkt an das Array übergeben. Nutzer müssen stattdessen den Befehl

esxcli storage vmfs unmap

ausführen, um Zuordnungs­aufhebungen für das Array auszulösen.

Nur unter bestimmten Voraussetzungen unterstützt VMFS5 die Anforderungen zur automatischen Rückgewinnung von Speicher. So muss

  • die virtuelle Festplatte per Thin Provisioning bereit­gestellt werden
  • die VM die vHardware-Version 11 (ESXi 6.0) oder höher haben
  • der erweiterte Parameter EnableBlockDelete auf 1 gesetzt sein

Schließlich muss das Gast­betriebs­system noch die virtuelle Festplatte als Thin-Festplatte identi­fizieren können.

VMFS6 dagegen, und damit nur ESXi 6.5 und 6.7, unterstützt grundsätzlich die vom Gast-OS ausgelöste automatische Speicher­platzrück­forderung und leitet diese an das Array weiter.

Heutzutage können zahlreiche Gast­betriebs­systeme den unmap-Befehl ohne weitere Konfiguration senden. Aber jene, die keine automatische Aufhebung der Zuordnung unterstützen, erfordern unter Umständen einen Benutzer­eingriff.

Generell verarbeitet VMFS die Anforderung zum Aufheben der Zuordnung nur, wenn der zurück­zu­fordernde Speicherplatz 1 MB oder ein Vielfaches davon ist. Eine weitere Einschränkung betrifft VMs mit Snapshots im standard­mäßigen SESparse-Format. Hier unterstützt VMFS6 die automatische Speicher­platz­rückforderung nur für ESXi 6.7.

Rückgewinnung auf Storage-Ebene

Auch beim Löschen von Dateien aus einem VMFS-Datastore wird Platz im Dateisystem frei. Allerdings bleibt er einem Speichergerät zugewiesen, bis er vom Dateisystem freigegeben oder die Zuordnung aufgehoben wird.

Dieser Vorgang ermöglicht dem Speicher-Array, von einer thin-provisionierten LUN nicht ver­wendeten Speicherplatz zurück­zufordern. Nicht zuge­ordneter Speicherplatz lässt sich dann für anderen Zwecke verwenden.

Auch zur Rückgewinnung auf Speicher­ebene kommt wieder das scsi-unmap-Kommando zum Einsatz. Hosts können zum Beispiel einen solchen Befehl an den Speicher-Controller senden, um zu signalisieren, dass ein LBA-Bereich auf einer Festplatte freigegeben werden kann. Dies ist beispiels­weise beim Formatieren eines neuen Volumes oder beim Löschen von Dateien in einem Dateisystem der Fall.

Erhält ein Speicher-Array einen SCSI-Befehl zum Aufheben der Zuordnung, dann wird der Bereich des Volumes, in dem sich die Daten ohne Zuordnung befinden, überschrieben. Auf diese Weise können Thin-Provisioning-Speicher-Controller physische Kapazität mittels Garbage Collection zurückfordern. Damit verhindert er, dass ihm die freie Kapazität für Schreib-I/O-Anforderungen ausgeht.

Allerdings heben VMFS5 und ältere Datei­systeme die Zuordnung von freiem Speicherplatz nicht automatisch auf. Hier muss der Nutzer in jedem Fall manuell zur Tat schreiten und wieder mit dem Kommando

esxcli storage vmfs unmap

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.