VM sicherung mit ghettoVCB für ESXi

  VMware

ghettoVCB von William Lam (@lamw) ist eine freie alternative zur Sicherung von virtuellen Maschinen. Das Skript erstellt Backups von virtuellen Maschinen auf ESX(i)3.5/4.x/5.x/6.x-Server mithilfe einer Methode ähnlich wie des VMware VCB-Tool.

Es werden Snapshots von laufenden virtuellen Maschinen gemacht und sichert diese danach, nach Fertigstellung werden die Snapshots wieder gelöscht bis zur nächsten Sicherung. Der einzige unterschied zu VMware VCB ist dass der Prozess auf dem ESXi-Host selbst ausgeführt wird, dabei werden wenig Ressourcen belegt. Die Backups werden über die Service-Konsole (Busybox Console) des ESX-Server gefahren, im Gegensatz zu der traditionellen Methode bei der die Backups eine virtuelle Maschine als VCB-Proxy nutzt.

Download Quelle: ghettoVCB

Die ESXi-Shell und TSM-SSH muss aktiviert werden, dies geschieht über die ESXi direkt Console oder aus dem vSphere Client.

Nach dem download und entpacken, die Dateien mit WinSCP oder aus dem vSphere Client auf den ESXi-Host in ein Verzeichnis hochladen, hier der Pfad /vmfs/volumes/datastore1/ghettoVCB/

Als Backup Speicher wird ein Synology NAS genutzt, dazu wird ein NFS Datenspeicher gemountet dieser auf dem NAS als NFS Freigabe erstellt wurde.

Der NFS Export des NAS wird aus dem vSphere oder vCenter gemountet, hierzu geht man auf:

Konfiguration – Speicher – Speicher hinzufügen.

Der NFS Speicher des NAS wird eingebunden.

Im Feld Server wird die IP Adresse des NAS eingetragen, im Feld Ordner der absolute Pfad der NFS Freigabe, bei der Synology DS ist dies in der regel /volume1 gefolgt vom Name der Freigabe. Als Datenspeichername wird der Name des NAS eingetragen, dieser Name muss in der Konfigurationsdatei, ghettoVCB.conf bei VM_BACKUP_VOLUME identisch sein.

Der NFS Speicher wird gemountet.

Nun den crontask anhalten mit

# /bin/kill $(cat /var/run/crond.pid)

Eine Datei anlegen mit den VMs die gesichert werden sollen, und die VM Konfiguration (homer) wo die Backup Rotation definiert wird.

# vi /vmfs/volumes/datastore1/ghettoVCB/vms.cfg
homer
barth
marge

# vi /vmfs/volumes/datastore1/ghettoVCB/homer
VM_BACKUP_VOLUME=/vmfs/volumes/NAS
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=3
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=4
POWER_DOWN_TIMEOUT=5
SNAPSHOT_TIMEOUT=15
ENABLE_COMPRESSION=0
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
VMDK_FILES_TO_BACKUP="all"

crontab beschreibbar machen und Backup um 22:01 Täglich ausführen.

# chmod +w /var/spool/cron/crontabs/root
# /bin/echo "01   22   *   *   *   /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -f /vmfs/volumes/datastore1/ghettoVCB/vms.cfg > /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB-backup-$(date +\%s).log" >> /var/spool/cron/crontabs/root

crontab wieder starten

# crond 
!! bei ESXi5.0 /bin/busybox crond

Testen ob der Script tut was er soll.

# cd /vmfs/volumes/datastore1/ghettoVCB/
# ./ghettoVCB.sh -f vms.cfg -d dryrun

cronjob persistent machen, damit nach dem nächsten Reboot wieder alles läuft.

# chmod +w /etc/rc.local
# vi/etc/rc.local
... (unten anhängen)
/bin/kill $(cat /var/run/crond.pid)
/bin/echo "01  22  *   *   *   /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -f /vmfs/volumes/datastore1/ghettoVCB/vms.cfg > /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB-backup-$(date +\%s).log" >> /var/spool/cron/crontabs/root crond 
/sbin/auto-backup.sh

Hinweis! ab ESXi 5.1 und höher wird /etc/rc.local.d/local.sh genutzt.

#!/bin/sh

# local configuration options

# Note: modify at your own risk!  If you do/use anything in this
# script that is not part of a stable API (relying on files to be in
# specific places, specific tools, specific output, etc) there is a
# possibility you will end up with a broken system after patching or
# upgrading.  Changes are not supported unless under direction of
# VMware support.

/bin/kill $(cat /var/run/crond.pid)
/bin/echo "01 22 * * * /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -f /vmfs/volumes/datastore1/ghettoVCB/vms.cfg > /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB-backup-$(date +\%s).log" >> /var/spool/cron/crontabs/root
crond

exit 0

Die Sicherung der konfigurierten VMs wird nun zur definierten Zeit starten, berücksichtigt wird nicht die Zeit der Konsole, sondern die die im vSphere Client angezeigt wird.

VMWare esxi 5.5 support for ghettovcb.sh
Fixed the script by changing

case "${ESX_VERSION}" in
    5.0.0|5.1.0) VER=5; break;;
    4.0.0|4.1.0) VER=4; break;;
    3.5.0|3i) VER=3; break;;
to
case "${ESX_VERSION}" in
   5.0.0|5.1.0|5.5.0) VER=5; break;;
   4.0.0|4.1.0) VER=4; break;;
   3.5.0|3i) VER=3; break;;

in both the backup and restore scripts.

Troubleshooting:

Wird ein ERROR protokolliert liegt dies oft daran das vor der ersten Snapshot Sicherung eine Konsolidierung gemacht werden sollte.

info: ERROR: error in backing up of "/vmfs/volumes/datastore1/guestvm/guestvm.vmdk"

info: ERROR: Unable to backup guestvm due to error in VMDK backup!

info: ###### Final status: ERROR: No VMs backed up! ######