Protože jsme začali používat ESX servery, tak jsme začali řešit i to, jak je nějak zálohovat, na internetu jsem našel nějaké skripty a tak jsem se jimi trochu inspiroval a výsledek můžete vidět zde.

Zálohování probíhá na SMB svazek, tak je nutno velké soubory rozdělit. Během zálohování se vytvoří snapshot, který je možno zkopírovat, po kopírování se snapshot smaže a tím se změny, které proběhly během zálohování, uloží.
Problém tohoto skriptu je, že maže všechny snapshoty, zatím jsem nepřišel na to jak mazat jednotlivé snapshoty. Během kopírování se nepodaří zkopírovat swap soubor, ten však pro obnovení virtuální mašiny není nutný.


#!/bin/bash

BACKUP_PATH=/tmp/pb-fi-01-vBackup
VMWARE_COMMAND=/usr/bin/vmware-cmd
SPLITSIZE=1073741824

SERVER="$( hostname )"
DATE="$( date +%F )"

#vytvoření cesty pro mount záloh
mkdir -p "$BACKUP_PATH"
#mount zálohovacího serveru
mount -t smbfs //pb-fi-01/VBackup "$BACKUP_PATH" -o username=xxx,password=xxx,workgroup=xxx
#smazat staré zálohy (jsou na pásce)
rm -rf "$BACKUP_PATH/$SERVER"
#znovu vytvořit adresář
mkdir -p "$BACKUP_PATH/$SERVER"

#získat seznam virtuálních mašin
machines="$( vmware-cmd -l )"

for machine in $machines; do
	path="$( basename $machine | cut -d. -f1 )"
	dir="$( dirname "$machine" )"

	mkdir -p "$BACKUP_PATH/$SERVER/$path"

	#uložení seznamu suborů, ještě před vytvořením snapshotu, ostatní mě nezajímají
	files="$( ls "$dir" )"

	#protože createsnapshot upravuje vmx, nejdříve ho zkopíruji
	cp "$machine" "$BACKUP_PATH/$SERVER/$path"

	$VMWARE_COMMAND $machine createsnapshot dailybackups "Backup snapshot \"$DATE\"" 1

	#zkopírovat pouze původní soubory
	for file in $files; do
		ffile="$dir/$file"
		fsize="$( stat -c%s "$ffile" )"

		if [ "$ffile" == "$machine" ]; then
			continue
		fi

		#pokud je soubor velký, rodělit
		if [ "$fsize" -gt $SPLITSIZE ]; then
			split -b $SPLITSIZE "$ffile" "$BACKUP_PATH/$SERVER/$path/$file.part_"
		else
			cp "$ffile" "$BACKUP_PATH/$SERVER/$path/"
		fi
	done
	#smazat snapshot
	$VMWARE_COMMAND "$machine" removesnapshots
done
#odpojení záloh
umount "$BACKUP_PATH"