winlin
Goto Top

VM Backup Shell Skript aendern

Hallo Leute,

das u.g. Skript funktioniert eigentlich wunderbar um eine VM von HOST1 auf HOST2 zu sichern, inkl. Log etc sowie Speicherplatzcheck....
...dabei hat mir ein CommunityMitglied geholfen. Nun mäöchte ich aber das Skript so ändern:
- Es soll nicht nur eine VM auf dem Quellhost gesichert werden sondern mehrere
- Es soll nicht mehr eine Platte gemountet werden sondern ein Share verwendet werden den der Rechner bereits in Zugriff hat /share/IT/backup

An welchen Stellen ändere ich das nun?
1. Anstatt USB="/mnt/cdrom" --> PLATTE="/share/IT/backup" und dann überall wo USB steht im Code PLATTE hinzufügen?
2. Wie kann ich denn mehrere VM´s sichern? bzw. alle VM´s die unter /data1/vm/ abgelegt sind? Dort gibt es vm01, vm02, vm03 usw.
--> VM1 heisst bei mir immer gleich: w7x64.vmx
--> VM_Ordner1 heisst dann vm01 oder vm02 oder vm03 etc.

#!/bin/bash
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!!
# ---------------------------------------------------------
VM_ORDNER1="vm01" #In welchem Ordner liegt die VM  
VM_BACKUP1="/data2/vm/vm01" #Der komplette Pfad zum VM Ordner  
VM_1="w7x64.vmx" #Name der VM  
BACKUPORDNER="backup" #Name des Backup-Ordners, wird angelegt falls nicht vorhanden.   
LOGZIEL="/data1/vm_backup_logs" #Pfad zu den Logs, muss vorhanden sein.  
USER="xxx" #Administrator für VMware Server 2  
PW="xxx" #PW für Administrator VMware Server 2  
IP="https://127.0.0.1/sdk" #Nur in AUSNAHMEFÄLLEN ändern. (Bei Standartinstallationen kann dies so bleiben)  
USB="/mnt/cdrom" #Mountpoint  
CLEAN=0 #Alte Backups im Ordner "BACKUPORDNER" bei Platzmangel löschen? 1=ja, 0=nein 
# ---------------------------------------------------------
# AB HIER NICHTS MEHR ÄNDERN
# ---------------------------------------------------------
DATUM="$(date +%d-%m-%Y)"  
LOG="${LOGZIEL}/${DATUM}.log"  
LOG_ERR="${LOGZIEL}/${DATUM}_err.log"  
ZIEL=""  
MOUNTED=0
DEVICE=""  
 
#mail_err ()
#{ 
#  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Fehler" $MAIL < $LOG_ERR 
#} 
# 
#mail_final ()
#{ 
#  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Erfolg" $MAIL <$LOG  
#} 
 
#USB-Platten werden gemountet 
for i in $(seq 1 $PLATTEN); do
    if [ $MOUNTED = 0 ]; then
	echo "Datum: "$DATUM >> $LOG  
	echo "Zeit: "$(date +%H:%M) >> $LOG  
#	echo | mount $USB$DEVICE -o force 1>> $LOG 2>> $LOG_ERR
	echo | mount SERVERFORBACKUP:/data2/vm/ /mnt/cdrom/
	if [ $? = 0 ]; then
	    ZIEL=$USB"/"$BACKUPORDNER  
	    MOUNTED=1
	    echo "${USB}${DEVICE} gemountet." >>$LOG  
	else
	    DEVICE=$(( $DEVICE + 1 ))
	fi
    fi
done
 
#Wenn keine der Platten eingebunden werden kann: EXIT mit Error-Mail
if [ $MOUNTED = 0 ]; then
    echo "Keine Speichermedien gefunden. Backup wurde abgebrochen!" >>$LOG_ERR  
	mail_err
    exit
fi
 
#Wenn nicht vorhanden wird Backup-Ordner erstellt.
if ! [ -d $ZIEL ]; then
	echo "Erstelle Ziel-Ordner (${ZIEL})." >>$LOG  
	echo | mkdir $ZIEL 1>> $LOG 2>> $LOG_ERR
		if ! [ $? = 0 ]; then
			echo "Ordner $ZIEL konnte nicht erstellt werden. Backup wird abgebrochen." >>$LOG  
			mail_err
			exit
			else
				echo "Ordner ${ZIEL} wurde erstellt." >> $LOG  
			fi
 
else
	echo "Ordner (${ZIEL}) bereits vorhanden." >> $LOG  
fi
 
#Speicherplatzabfrage. 
#Wenn CLEAN auf 1 gesetzt, wird bei zu geringem Speicherplatz der Backupordner gelöscht. 
#Backup-Rotation in Planung....
S="/"  
MB=0
MENGEQ=" GB"  
MENGEZ=" GB"  
MENGED=" GB"  
LIMIT=1
LAUF=2
END=0
echo 1
for i in $(seq 1 $LAUF); do
	if [ $END = 0 ]; then
		QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1)  
		ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai")  
		QUELLEERG=$(( $QUELLE / 1048576 ))
			if [ $QUELLEERG -lt $LIMIT ]; then
				QUELLEERG=$(( $QUELLE / 1024 ))
				MB=1
				MENGEQ=" MB"   
			fi
 
		ZIELERG=$(( $ZIEL1 / 1048576 ))
			if [ $MB = 1 ]; then
				ZIELERG=$(( $ZIEL1 / 1024 ))
				MENGEZ=" MB"  
				MENGED=" MB"   
			fi

		DIFFERENZ=$(( $ZIELERG - $QUELLEERG ))
		PROZENT=$(( $DIFFERENZ * 100 / $ZIELERG ))
		NUTZ=$(( 100 - $PROZENT ))

				if  [ $ZIELERG -lt $QUELLEERG ]; then
					if [ $CLEAN = 1 ]; then
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
						echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
						echo " " >> $LOG  
						echo "Speicherplatz nicht ausreichend. Ordner ${ZIEL} wird geleert." >> $LOG  
						echo "...." >> $LOG  
						echo | touch $ZIEL/test.file 1>> $LOG 2>> $LOG_ERR
						echo | rm -r $ZIEL/* 1>> $LOG 2>> $LOG_ERR
					else
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG_ERR  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG_ERR  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG_ERR  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG_ERR  
						echo " " >> $LOG_ERR  
						echo "Speicherplatz nicht ausreichend. Backup-Vorgang wird abgebrochen." >> $LOG_ERR  
						mail_err
						exit
					fi
				else
					END=1
					echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
					echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
					echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
					echo " " >> $LOG  
					echo "Speicherplatz ausreichend. Backup wird gestartet." >> $LOG  
				fi				
	fi
done

# VMs in den Suspend setzen und Erfolg abfragen
# 0 = i.O.
# 255 = Fehler
 
echo | vmrun -T server -h $IP -u $USER -p $PW suspend "[ha-datacenter/standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
if  [ $? = 255 ]; then
		echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht in den Suspend Modus versetzt werden." >>$LOG_ERR  
		echo "Backup wurde abgebrochen" >>$LOG_ERR  
		umount $USB$DEVICE >> $LOG_ERR
		mail_err
		exit
			else
				echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich in den Suspend-Mode versetzt" >>$LOG  
fi	
 
 
 
#Verzeichnis für neues Backup erstellen falls noch nicht vorhanden
if ! [ -d $ZIEL/$DATUM ]; then
		echo | mkdir $ZIEL/$DATUM >> $LOG
fi
 
#Jetzt kann tar loslegen
cd /
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG
 
#Auf Fehler während tar prüfen:
# 0 = fehlerfrei,
echo "Errorlevel TAR: "$? >> $LOG   
 
if  [ $? != 0 ] ; then
    echo "ACHTUNG: Beim Backup (tar) von (${VM_BACKUP1}) wurden am ${DATUM} um $(date +%H:%M) Uhr Fehler/Meldungen ausgegeben!" >>$LOG  
    echo "Das erstellte Archiv befinden sich in ${ZIEL}/${DATUM}/${DATUM}.tar.gz" >>$LOG  
	umount $USB$DEVICE >> $LOG
    echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
		# Prüfen ob VM gestartet werden konnte
		if  [ $? = 255 ]; then
			echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
			mail_err
			else
 
			echo "$(date +%d-%m-%Y): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG  
		fi 
 
		mail_final
		exit
 
		else
			echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
			#Prüfen ob VM gestartet werden konnte
			if  [ $? = 255 ]; then
				echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
				mail_err
					else
						echo "-------------------------------------------------------------------" >>$LOG  
						echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG      
					fi
		#Backup war erfolgreich also beenden wir die .log entsprechend und verschicken die Mail	 
		echo "------------------------------------------------------------ " >> $LOG  
		echo "Das Backup von ${VM_1} wurde am ${DATUM} um $(date +%H:%M) Uhr erfolgreich beendet und in ${ZIEL}/${DATUM}/${DATUM}.tar.gz gespeichert." >> $LOG  
		umount $USB$DEVICE 1>>$LOG 2>>$LOG_ERR
		mail_final
 
fi

Content-Key: 203795

Url: https://administrator.de/contentid/203795

Printed on: April 18, 2024 at 15:04 o'clock

Mitglied: 64748
64748 Mar 22, 2013 updated at 11:15:23 (UTC)
Goto Top
Hallo,

Du kannst statt
VM_ORDNER1="vm01" #In welchem Ordner liegt die VM
eine for-Schleife nehmen
for i in 1 2 3; do VM_ORDNER=vm0$i; 
   Dein weiterer Code hier
done
und den Code dann innerhalb der Schleife ausführen.

Kannst Du nicht
USB=/mnt/cdrom
ersetzen durch
USB=/share/IT/backup
und dann den Codeblock wo die USB-Platten gemountet werden auskommentieren?

Markus
Mitglied: 64748
64748 Mar 22, 2013 at 11:41:33 (UTC)
Goto Top
Zur Berechnung des Speicherplatzes:

Diese Zeile
QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1)
funktioniert nur dann, wenn $S$VM_BACKUP1 ein absoluter Pfad ist, also mit einem / anfängt. du verwendet als Trenner den Tab \t der aber auch von cut standardmäßig benutzt wird. Also funktioniert auch
QUELLE=$(du -s $S$VM_BACKUP1 | cut -f 1) 
Und hier
ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai")
könnte man tail verwenden
ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | tail -1)
Außerdem kann man mit der Option -m bei du und df die Ausgabe in MB erhalten und braucht dann nicht mehr umzurechnen.
QUELLE=$(du -sm $S$VM_BACKUP1 | cut -f 1) 
ZIEL1=$(df -m $S$ZIEL | tr -s " " | cut -d " " -f 4 | tail -1) 
das funktioniert hier, soweit ich das testen kann.

Markus
Member: winlin
winlin Mar 22, 2013, updated at Mar 25, 2013 at 09:36:49 (UTC)
Goto Top
meinst du so????
#!/bin/bash
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!!
# ---------------------------------------------------------
for i in 01 02 03 04 05 06 07 do VM_ORDNER1=w7vm$i;
VM_BACKUP1="xxx"  
VM_1="W7_x64.vmx"   
BACKUPORDNER="xxx_backup"   
LOGZIEL="xxx/xxx/"   
USER="xxx"  
PW="xxx"  
IP="https://127.0.0.1/sdk"   
USB="/share/IT/backup"   
CLEAN=0 #Alte Backups im Ordner "BACKUPORDNER" bei Platzmangel löschen? 1=ja, 0=nein 
done
# ---------------------------------------------------------
# AB HIER NICHTS MEHR ÄNDERN
# ---------------------------------------------------------
DATUM="$(date +%d-%m-%Y)"  
LOG="${LOGZIEL}/${DATUM}.log"  
LOG_ERR="${LOGZIEL}/${DATUM}_err.log"  
ZIEL=""  
MOUNTED=0
DEVICE=""  
 
#mail_err ()
#{ 
#  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Fehler" $MAIL < # $LOG_ERR 
#} 
# 
#mail_final ()
#{ 
#  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Erfolg" $MAIL #<$LOG  
#} 
 
#USB-Platten werden gemountet 
#for i in $(seq 1 $PLATTEN); do
#    if [ $MOUNTED = 0 ]; then
#	echo "Datum: "$DATUM >> $LOG 
#	echo "Zeit: "$(date +%H:%M) >> $LOG 
#	echo | mount $USB$DEVICE -o force 1>> $LOG 2>> $LOG_ERR
#	echo | mount ceplx270:/scr2/vm/ /mnt/cdrom/
#	if [ $? = 0 ]; then
#	    ZIEL=$USB"/"$BACKUPORDNER 
#	    MOUNTED=1
#	    echo "${USB}${DEVICE} gemountet." >>$LOG 
#	else
#	    DEVICE=$(( $DEVICE + 1 ))
#	fi
 #   fi
#done
 
#Wenn keine der Platten eingebunden werden kann: EXIT mit Error-Mail
#if [ $MOUNTED = 0 ]; then
#    echo "Keine Speichermedien gefunden. Backup wurde abgebrochen!" >>$LOG_ERR  
#mail_err
#   exit
#fi
 
#Wenn nicht vorhanden wird Backup-Ordner erstellt.
if ! [ -d $ZIEL ]; then
	echo "Erstelle Ziel-Ordner (${ZIEL})." >>$LOG  
	echo | mkdir $ZIEL 1>> $LOG 2>> $LOG_ERR
		if ! [ $? = 0 ]; then
			echo "Ordner $ZIEL konnte nicht erstellt werden. Backup wird abgebrochen." >>$LOG  
			mail_err
			exit
			else
				echo "Ordner ${ZIEL} wurde erstellt." >> $LOG  
			fi
 
else
	echo "Ordner (${ZIEL}) bereits vorhanden." >> $LOG  
fi
 
#Speicherplatzabfrage. 
#Wenn CLEAN auf 1 gesetzt, wird bei zu geringem Speicherplatz der Backupordner gelöscht. 
#Backup-Rotation in Planung....
S="/"  
MB=0
MENGEQ=" GB"  
MENGEZ=" GB"  
MENGED=" GB"  
LIMIT=1
LAUF=2
END=0
echo 1
for i in $(seq 1 $LAUF); do
	if [ $END = 0 ]; then
		QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1)  
		ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai")  
		QUELLEERG=$(( $QUELLE / 1048576 ))
			if [ $QUELLEERG -lt $LIMIT ]; then
				QUELLEERG=$(( $QUELLE / 1024 ))
				MB=1
				MENGEQ=" MB"   
			fi
 
		ZIELERG=$(( $ZIEL1 / 1048576 ))
			if [ $MB = 1 ]; then
				ZIELERG=$(( $ZIEL1 / 1024 ))
				MENGEZ=" MB"  
				MENGED=" MB"   
			fi

		DIFFERENZ=$(( $ZIELERG - $QUELLEERG ))
		PROZENT=$(( $DIFFERENZ * 100 / $ZIELERG ))
		NUTZ=$(( 100 - $PROZENT ))

				if  [ $ZIELERG -lt $QUELLEERG ]; then
					if [ $CLEAN = 1 ]; then
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
						echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
						echo " " >> $LOG  
						echo "Speicherplatz nicht ausreichend. Ordner ${ZIEL} wird geleert." >> $LOG  
						echo "...." >> $LOG  
						echo | touch $ZIEL/test.file 1>> $LOG 2>> $LOG_ERR
						echo | rm -r $ZIEL/* 1>> $LOG 2>> $LOG_ERR
					else
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG_ERR  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG_ERR  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG_ERR  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG_ERR  
						echo " " >> $LOG_ERR  
						echo "Speicherplatz nicht ausreichend. Backup-Vorgang wird abgebrochen." >> $LOG_ERR  
						mail_err
						exit
					fi
				else
					END=1
					echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
					echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
					echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
					echo " " >> $LOG  
					echo "Speicherplatz ausreichend. Backup wird gestartet." >> $LOG  
				fi				
	fi
done

# VMs in den Suspend setzen und Erfolg abfragen
# 0 = i.O.
# 255 = Fehler
 
echo | vmrun -T server -h $IP -u $USER -p $PW suspend "[ha-datacenter/standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
if  [ $? = 255 ]; then
		echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht in den Suspend Modus versetzt werden." >>$LOG_ERR  
		echo "Backup wurde abgebrochen" >>$LOG_ERR  
		umount $USB$DEVICE >> $LOG_ERR
		mail_err
		exit
			else
				echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich in den Suspend-Mode versetzt" >>$LOG  
fi	
 
 
 
#Verzeichnis für neues Backup erstellen falls noch nicht vorhanden
if ! [ -d $ZIEL/$DATUM ]; then
		echo | mkdir $ZIEL/$DATUM >> $LOG
fi
 
#Jetzt kann tar loslegen
cd /
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG
 
#Auf Fehler während tar prüfen:
# 0 = fehlerfrei,
echo "Errorlevel TAR: "$? >> $LOG   
 
if  [ $? != 0 ] ; then
    echo "ACHTUNG: Beim Backup (tar) von (${VM_BACKUP1}) wurden am ${DATUM} um $(date +%H:%M) Uhr Fehler/Meldungen ausgegeben!" >>$LOG  
    echo "Das erstellte Archiv befinden sich in ${ZIEL}/${DATUM}/${DATUM}.tar.gz" >>$LOG  
	umount $USB$DEVICE >> $LOG
    echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
		# Prüfen ob VM gestartet werden konnte
		if  [ $? = 255 ]; then
			echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
			mail_err
			else
 
			echo "$(date +%d-%m-%Y): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG  
		fi 
 
		mail_final
		exit
 
		else
			echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
			#Prüfen ob VM gestartet werden konnte
			if  [ $? = 255 ]; then
				echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
				mail_err
					else
						echo "-------------------------------------------------------------------" >>$LOG  
						echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG      
					fi
		#Backup war erfolgreich also beenden wir die .log entsprechend und verschicken die Mail	 
		echo "------------------------------------------------------------ " >> $LOG  
		echo "Das Backup von ${VM_1} wurde am ${DATUM} um $(date +%H:%M) Uhr erfolgreich beendet und in ${ZIEL}/${DATUM}/${DATUM}.tar.gz gespeichert." >> $LOG  
		umount $USB$DEVICE 1>>$LOG 2>>$LOG_ERR
		mail_final
 
fi
Member: winlin
winlin Mar 22, 2013 at 13:00:18 (UTC)
Goto Top
supi danke...das ist gleich der nächste schritt den ich ändern werde...
Mitglied: 64748
64748 Mar 22, 2013 at 13:29:33 (UTC)
Goto Top
In die Zeile mit der for-Schleife
for i in 01 02 03 04 05 06 07 do VM_ORDNER1=w7vm$i;
gehört entwede ein Semikolon for "do" oder ein Zeilenumbruch. Also
for i in 01 02 03 04 05 06 07; do VM_ORDNER1=w7vm$i;
oder
for i in 01 02 03 04 05 06 07 
    do VM_ORDNER1=w7vm$i;
Markus
Member: winlin
winlin Mar 25, 2013 at 08:39:48 (UTC)
Goto Top
Hey Markus!

nachdem ich deine Änderung übernommen habe, läuft das Skript zwar gerade immer noch - bekomme aber trotzdem folgenden Fehler:
[root@linuxhost vmware]# ./BACKUP_VM_TEMPLATE
1
./BACKUP_VM_TEMPLATE: line 68: /dev/mapper/vgroot
193681860 / 1048576 : syntax error: operand expected (error token is "/dev/mapper/vgroot  
193681860 / 1048576 ")  

Zeile 68 ist gerade diese hier:
 ZIELERG=$(( $ZIEL1 / 1048576 ))
Mitglied: 64748
64748 Mar 25, 2013 at 09:11:44 (UTC)
Goto Top
Gib
ZIEL1=2000000
ZIELERG=$(( $ZIEL1 / 1048576 ))
echo $ZIELERG
im Terminal ein. Was passiert?

Du musst die einzelnen Zeilen im Terminal ausprobieren um Fehler zu finden.

Markus
Member: winlin
winlin Mar 25, 2013 updated at 09:27:40 (UTC)
Goto Top
hmmmm das werde ich gleich mal testen...gib dir auch gleich ein Feedback.

Gebackupt hat er nun trotzdem, leider nicht in das Verzeichnis das ich ihm angegeben habe sonder im Wurzelverzeichnis:
/25-03-2013/25-03-2013.tar.gz

#!/bin/bash
#######################
# Backupskript VMware #       
#######################
 
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!!
# ---------------------------------------------------------
for i in 01 02 03 04 05 06 07; do VM_ORDNER1=w7vm$i;
#VM_ORDNER1="w7vm$i" #In welchem Ordner liegt die VM 
VM_BACKUP1="data1/vm" #Der komplette Pfad zum VM Ordner  
VM_1="W7_x64.vmx" #Name der VM  
BACKUPORDNER="w7_vm_backup" #Name des Backup-Ordners, wird angelegt falls nicht vorhanden.   
LOGZIEL="/data1/vm/" #Pfad zu den Logs  
USER="xxx"  
PW="xxx"  
IP="https://127.0.0.1/sdk" #Nur in AUSNAHMEFÄLLEN ändern. (Bei Standartinstallationen kann dies so bleiben)  
PLATTE="/data2/VMTEST" #Mountpoint  
CLEAN=0 #Alte Backups im Ordner "BACKUPORDNER" bei Platzmangel löschen? 1=ja, 0=nein 
#done
# ---------------------------------------------------------
# AB HIER NICHTS MEHR ÄNDERN
# ---------------------------------------------------------
DATUM="$(date +%d-%m-%Y)"  
LOG="${LOGZIEL}/${DATUM}.log"  
LOG_ERR="${LOGZIEL}/${DATUM}_err.log"  
ZIEL=""  
MOUNTED=0
DEVICE=""  

#Wenn nicht vorhanden wird Backup-Ordner erstellt.
if ! [ -d $ZIEL ]; then
	echo "Erstelle Ziel-Ordner (${ZIEL})." >>$LOG  
	echo | mkdir $ZIEL 1>> $LOG 2>> $LOG_ERR
		if ! [ $? = 0 ]; then
			echo "Ordner $ZIEL konnte nicht erstellt werden. Backup wird abgebrochen." >>$LOG  
			exit
			else
				echo "Ordner ${ZIEL} wurde erstellt." >> $LOG  
			fi
 
else
	echo "Ordner (${ZIEL}) bereits vorhanden." >> $LOG  
fi
 
#Speicherplatzabfrage. 
#Wenn CLEAN auf 1 gesetzt, wird bei zu geringem Speicherplatz der Backupordner gelöscht. 
#Backup-Rotation in Planung....
S="/"  
MB=0
MENGEQ=" GB"  
MENGEZ=" GB"  
MENGED=" GB"  
LIMIT=1
LAUF=2
END=0
echo 1
for i in $(seq 1 $LAUF); do
	if [ $END = 0 ]; then
		QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1)  
		ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai")  
		QUELLEERG=$(( $QUELLE / 1048576 ))
			if [ $QUELLEERG -lt $LIMIT ]; then
				QUELLEERG=$(( $QUELLE / 1024 ))
				MB=1
				MENGEQ=" MB"   
			fi
 
		ZIELERG=$(( $ZIEL1 / 1048576 ))
			if [ $MB = 1 ]; then
				ZIELERG=$(( $ZIEL1 / 1024 ))
				MENGEZ=" MB"  
				MENGED=" MB"   
			fi

		DIFFERENZ=$(( $ZIELERG - $QUELLEERG ))
		PROZENT=$(( $DIFFERENZ * 100 / $ZIELERG ))
		NUTZ=$(( 100 - $PROZENT ))

				if  [ $ZIELERG -lt $QUELLEERG ]; then
					if [ $CLEAN = 1 ]; then
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
						echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
						echo " " >> $LOG  
						echo "Speicherplatz nicht ausreichend. Ordner ${ZIEL} wird geleert." >> $LOG  
						echo "...." >> $LOG  
						echo | touch $ZIEL/test.file 1>> $LOG 2>> $LOG_ERR
						echo | rm -r $ZIEL/* 1>> $LOG 2>> $LOG_ERR
					else
						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG_ERR  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG_ERR  
						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG_ERR  
						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG_ERR  
						echo " " >> $LOG_ERR  
						echo "Speicherplatz nicht ausreichend. Backup-Vorgang wird abgebrochen." >> $LOG_ERR  
						exit
					fi
				else
					END=1
					echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG  
					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG  
					echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG  
					echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG  
					echo " " >> $LOG  
					echo "Speicherplatz ausreichend. Backup wird gestartet." >> $LOG  
				fi				
	fi
done

# VMs in den Suspend setzen und Erfolg abfragen
# 0 = i.O.
# 255 = Fehler
 
echo | vmrun -T server -h $IP -u $USER -p $PW suspend "[ha-datacenter/standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
if  [ $? = 255 ]; then
		echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht in den Suspend Modus versetzt werden." >>$LOG_ERR  
		echo "Backup wurde abgvim chen" >>$LOG_ERR  
		exit
			else
				echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich in den Suspend-Mode versetzt" >>$LOG  
fi	
 
 
 
#Verzeichnis für neues Backup erstellen falls noch nicht vorhanden
if ! [ -d $ZIEL/$DATUM ]; then
		echo | mkdir $ZIEL/$DATUM >> $LOG
fi
 
#Jetzt kann tar loslegen
cd /
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG
 
#Auf Fehler während tar prüfen:
# 0 = fehlerfrei,
echo "Errorlevel TAR: "$? >> $LOG   
 
if  [ $? != 0 ] ; then
    echo "ACHTUNG: Beim Backup (tar) von (${VM_BACKUP1}) wurden am ${DATUM} um $(date +%H:%M) Uhr Fehler/Meldungen ausgegeben!" >>$LOG  
    echo "Das erstellte Archiv befinden sich in ${ZIEL}/${DATUM}/${DATUM}.tar.gz" >>$LOG  
	echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
		# Prüfen ob VM gestartet werden konnte
		if  [ $? = 255 ]; then
			echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
			else
 
			echo "$(date +%d-%m-%Y): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG  
		fi 
 
		exit
 
		else
			echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR  
 
			#Prüfen ob VM gestartet werden konnte
			if  [ $? = 255 ]; then
				echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR  
					else
						echo "-------------------------------------------------------------------" >>$LOG  
						echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG      
					fi
		#Backup war erfolgreich also beenden wir die .log entsprechend 
		echo "------------------------------------------------------------ " >> $LOG  
		echo "Das Backup von ${VM_1} wurde am ${DATUM} um $(date +%H:%M) Uhr erfolgreich beendet und in ${ZIEL}/${DATUM}/${DATUM}.tar.gz gespeichert." >> $LOG  
		
fi
Mitglied: 64748
64748 Mar 25, 2013 at 11:15:52 (UTC)
Goto Top
So, ich hab das mal ausprobiert mit der Berechnung ob der Speicherplatz reicht. Zuverlässig geht es mit bc
ZIELERG=$(echo $ZIEL1 / 1048576 | bc -l )
Markus
Mitglied: 64748
64748 Mar 25, 2013 at 11:18:11 (UTC)
Goto Top
Am einfachsten wäre es, wenn Du nur den Teil des Codes posten würdest, der nicht funktioniert. Du musst Dir die Variablen anzeigen lassen, die eigentlich verwendet werden sollen, also "echo" einbauen wo was nicht geht. Das ganze Skript ist so kaum nachvollziehbar.

Markus