Alle angelegten Snapshots unter ESXi ermitteln (per SSH / Shell)

Laufen VMs verzögert und träge, kann es oftmals hilfreich sein, das Storage auf verbliebene Snapshots zu prüfen. Jeder Snapshot einer VM erhöht die IO Belastung des Systems, teils sogar enorm. Im schlimmsten Fall werden je Snapshot die doppelte Anzahl an Lesevorgängen benötigt, was auf Dauer die Reaktionszeit der VM beeinträchtigen kann.

Die hier beschriebene Methode ermittelt die Snapshots eines Storages simpel über die Bennenung der Snapshot Dateien. Diese enden in aller Regel mit „_000000*.vmdk“. Über einen  „find“ Befehl lassen sich über eine SSH-Verbindung (oder Lokal per Shell) nun alle Snapshot Dateien eines Storages ermitteln.

Manuell

Für SSH-Verbindungen:

  1. Sicherstellen, dass SSH-Verbindungen auf dem ESX erlaubt sind:
  2. SSH-Verbindung aufbauen (unter Windows z.B.: per putty)
  3. Login per „root“ + „passwort“

Auf der Konsole angekommen wechselt man zunächst ins gewünscht Storage:

cd /vmfs/volumes/%name des Storages%"

Anschließend kann über folgenden Befehl nach allen Snapshots gesucht werden:

find . -name '*00000?.vmdk'

Als Ergebnis erhält man eine Liste mit den Namen aller VM-Snapshot-Dateien. Dies sollte in den meisten Fällen ausreichen, um die VMs eindeutig zu identifizieren. Wurden sie aber nach der Erstellung noch umbenannt und seither nicht mehr migriert, kann der Name der VM auch anders als deren HDD Namen lauten.

Um solche VMs zu identifizieren, gibt es verschiedene Möglichkeiten. Eine Option wäre es, in die zur VM gehörende *.vmx Datei zu schauen und nach dem Parameter „displayName“ zu suchen. Ist die VM aber gerade aktiv, kann der Inhalt je nach ESXi Version, nicht im laufenden Betrieb angezeigt werden, es sei denn man lädt sich die Datei über die VSphere GUI runter.

Script

Folgendes Skript übernimmt die Suche nach Snapshots und dem passenden Anzeigenamen automatisch. Neben der Suche innerhalb der VMX-Dateien wird hiermit noch in den aktuell eingeschalteten VMs nach dem passende Anzeigenamen gesucht:

#Name das Storages vorgeben
STORAGE="Name des Storages"

#Nach dem vorkommen von *00000?.vmdk Dateien suchen
find "/vmfs/volumes/"$STORAGE"/" -name '*00000?.vmdk' | while read line; do
    VMFOLDER="$(echo $line | cut -d"/" -f5)"
    VMNAME=$VMFOLDER".vmx"
    #Ausgabepfad zu Snapshot und Konfigurationdatei
    echo "Snapshot File: /vmfs/volumes/"$STORAGE"/"$line
    echo "Config File: /vmfs/volumes/"$STORAGE"/"$VMFOLDER"/"$VMNAME
    #Suche in eingeschalteten VMs
    esxcli vm process list | grep -B 1 "$VMNAME" | grep "Display Name"
    #Suche in der Konfigurationsdatei
    cat "/vmfs/volumes/$STORAGE/$VMFOLDER/$VMNAME" | grep "displayName"
    echo "";
done

Das Script kann per Copy&Paste in eine SSH-Verbindung übertragen werden oder als „script.sh“ auf den ESXi geschoben und nach dem Setzen der entsprechenden Berechtigungen gestartet werden.

Ergebnis Scriptafrage
Tobias Wintrich
Tobias Wintrich

Fachinformatiker/Systemintegration
Bäcker aus Leidenschaft

Artikel: 28

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert