Portál AbcLinuxu, 1. května 2025 11:28
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" )"
#přeskočit VMX soubor
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"
Tak jsem si vzal k srdci připomínky a snad jsem je tam zapracoval dobře, včera jsem si hrál s obnovou a přišel jsem na to, že createsnapshot upravuje původní VMX soubor, tak je ho potřeba zkopírovat dříve, než se provede vlastní createsnaphot (furt jsem se divil, že mi to při obnově řve neexistující disk).
#!/bin/bash
BACKUP_PATH=/tmp/pb-fi-01-vBackup
VMWARE_COMMAND=/usr/bin/vmware-cmd
VCB_MOUNTER=/usr/sbin/vcbMounter
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
if [ "$?" -ne "0" ]; then
echo "Nelze připojit zálohovací soubor"
exit 1
fi
#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
IFS=$'\n'
machines="$( $VMWARE_COMMAND -l )"
for machine in $machines; do
path="$( basename "$machine" | cut -d. -f1 )"
dir="$( dirname "$machine" )"
LookupMachine=$( grep displayName "$machine" | sed s/displayName[[:space:]]*=[[:space:]]*/name:/)
$VCB_MOUNTER -h localhost -u root -p xxx -a $LookupMachine -t fullvm -r "$BACKUP_PATH/$SERVER/$path"
done
unset IFS
#odpojení záloh
umount "$BACKUP_PATH"
Tiskni
Sdílej:
Mozna se pripoji i dalsi, ale ja osobne bych doporucoval pri praci s adresarema pouzivat uvozovky. Pokud se nepletu, vmware-cmd -l vraci seznam plnych cest konfiguracich VMX souboru VMware. Nevim jak ESX, ale ve vmware-serveru muzu tu cestu vytvorit jakou chci, takze adresar muze obsahovat mezery (coz obvykle Windows useri radi delaji).Presne muj pripad - opravdu to nefunguje
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.