Seite 1 von 1

backup der vm's per script

Verfasst: 11.01.2012, 14:38
von homermg
Hey Leute,

ihr habt mir so gut geholfen vielleicht könnt Ihr mir auch dabei helfen.

Mein Vorgänger hat auf dem Host per Cronjob BAckupscript eingebunden. Dieses sichert alle VM's in eine Backup Ordner.
Soweit so gut. Diese funktioniert auch ganz gut. Nun habe ich auf dem Host ein paar VM's installiert. Leider gelingt es mir nicht Backupscript so anzupassen das auch meine neue Vm's gesichert werden.
Habe jetzt auf meine Testsystem alle mal nachgebaut. hier ist mein Script:
#!/bin/bash
declare ScriptDir=/root/scripts
declare BackupItems="SRV2003V1"
VMHostName=`uname -n`
BackupDir=/vmfs/volumes/storage_$VMHostName/VM-Backups
rm -r -f $BackupDir/*

i=1
error=0


for VirtMachine in $BackupItems
do
if [ "`/usr/bin/vmware-cmd -l | grep $VirtMachine.vmx -i -m 1 -c`" == "1" ]; then
VMConfigFile=`/usr/bin/vmware-cmd -l | grep $VirtMachine`
if [ "`/usr/bin/vmware-cmd "$VMConfigFile" getstate`" == "getstate() = on" ]; then
$ScriptDir/conhotbackup "$VMConfigFile" $VirtMachine
Fehler=$?
if [ $Fehler -eq 0 ]; then body[i]=$VirtMachine' Image OK Code '$Fehler
else
body[i]=$VirtMachine' Image !!FEHLER!! Code '$Fehler
error=1
fi
i=$[$i+1]
fi
fi
done

dieser ruft dann diesen auf:

declare VMConfigFile=$1
declare VirtMachine=$2

if [ "`/usr/bin/vmware-cmd "$VMConfigFile" hassnapshot`" == "hassnapshot() = 1" ];
then
exit 4
fi

VMHostName=`uname -n`
BackupDir=/vmfs/volumes/4f073dfe-597b8f96-239b-00142215d92e/VM-Backups

rm -r -f $BackupDir/$VirtMachine
mkdir $BackupDir/$VirtMachine

vmdk=`vmware-cmd "$VMConfigFile" getconfig scsi0:0.fileName|awk '{ print $4 }'`
vmvol=`vmware-cmd "$VMConfigFile" getconfig scsi0:0.fileName|awk '{ print $3 }'`
vmvol=`echo $vmvol |awk '{ print substr($1,2,length($1)-2) }'`
vmdkfull="/vmfs/volumes/$vmvol/$vmdk"
VMConfigPath=`echo $VMConfigFile|awk 'BEGIN {FS="/"};{OFS="/"};{ print($1,$2,$3,$4,$5) }'`
cd $VMConfigPath
cp *.log $BackupDir/$VirtMachine
cp *.nvram $BackupDir/$VirtMachine
cp *.vmsd $BackupDir/$VirtMachine
cp *.vmx $BackupDir/$VirtMachine
cp *.vmxf $BackupDir/$VirtMachine

vmware-cmd "$VMConfigFile" createsnapshot "HotBackupSnap" "Hotbackup" 0 0
if [ $? -ne 0 ]; then exit 1
fi
sleep 5

/usr/sbin/vmkfstools -i $vmdkfull -d 2gbsparse $BackupDir/$VirtMachine/$VirtMachine.vmdk
if [ $? -ne 0 ]; then exit 2
fi

vmware-cmd "$VMConfigFile" removesnapshots
if [ $? -ne 0 ]; then exit 3
else exit 0
fi


wenn ich die ausführe passiert leider nichts, es wird noch nicht mal diese VM-Backups Ordner erstellt. Auch bekomme ich keine Fehlermeldung.

Kann mir da jemand helfen?

VG

Verfasst: 12.01.2012, 09:12
von homermg
keiner hier der sich mit sowas auskennt?

Verfasst: 12.01.2012, 15:41
von Tschoergez
Hi!
Wenn ich's recht überfliege, werden in Zeile 3 die VMs angegeben, die gesichert werden sollen.

Das Backup-Verzeichnis muss es schon geben, das wird nicht angelegt... Gibts bei Dir den Datastore /vmfs/volumes/4f073dfe-597b8f96-239b-00142215d92e?
Viele Grüße,
Jörg

Verfasst: 12.01.2012, 15:44
von irix
Die VMs muessen auch den richtigen Namen haben. Bei solchen wo im vCenter/ESXi nur der Label geaendert wurde rennt das Script ins leere weil die Dateien anders heissen.

Gruss
Joerg

Verfasst: 19.03.2012, 14:25
von homermg
Hey Leute,

danke für die Tips, habe nun meinen Fehler gefunden.
Es sind ein paar Maschiene mit SCSI HD eingeirchtet und ein paar mit IDE HD.
Im Script habe ich aber nur SCSI.
Kann mir vielleicht jemand hellfen das so anzupassen das SCIS und IDE vom Script abgearbeitet wird?

Vielen Dank

Verfasst: 19.03.2012, 16:23
von Tschoergez
Dazu musst do wohl die beiden Zeilen anpassen:

Code: Alles auswählen

vmdk=`vmware-cmd "$VMConfigFile" getconfig scsi0:0.fileName|awk '{ print $4 }'`
vmvol=`vmware-cmd "$VMConfigFile" getconfig scsi0:0.fileName|awk '{ print $3 }'`

und nach ide-Geräten suchen. Nur aufpassen, dass Du keine CD-Rom-ISO-Dateien mitsicherst :grin:

Viele Grüße,
Jörg

Verfasst: 19.03.2012, 16:27
von homermg
Hi Jörg,
danke dir nur ich wollte das alles in einem Script habe wenn ich die jetzt auf ide ändere macht diese natürlich nur noch ide. Ich würde geren das mein Script checkt ob ide oder scsi und macht halt das was da ist. Da weiß ich leider nicht wie ich das machen soll