VMBackup unter Linux
Hallo Leute,
ich möchte von Linux aus virtuelle Win7-Maschinen sichern. Diese laufen alle auf einer VMware Workstation v8. Aus diesem Grund will ich das gerne mit "vmrun" durchführen. Folgende Anforderungen sind gegeben und ich hoffe das mir jemand helfen kann das Bash-Skript fertigzustellen oder einfach ein paar Tipps zu geben da ich nicht so der Programmiere bin:
1. Die virtuellen Maschinen laufen auf drei verschiedenen Linux Workstations
2. Diese sollen immer am Monatsanfag "in Wartung gehen"
3. Die Sicherung erfolgt auf einem Linux Fileserver, der Share besteht auf allen Maschinen
4. Nach der Sicherung der VM´s sollen diese wieder gestartet werden
1. Überprüfen ob die VM´s laufen, falls ja Schritt 1 ausführen falls nicht gleich zu Schritt 2 übergehen
2. STOPPEN der VM´s
3. Die VM´s auf den drei Servern in .tar packen mit Datumsstempel und in das Share verzeichnis kopieren
4. NAch Beendigung des Kopiervorgangs alle VM´s wieder starten
5. Alle Aktionen in einer Logfile ablegen.
Kann das ganze ja auch als Batch von einem Windowsrechner ausführen da ich VMIX installiert hab.
ich möchte von Linux aus virtuelle Win7-Maschinen sichern. Diese laufen alle auf einer VMware Workstation v8. Aus diesem Grund will ich das gerne mit "vmrun" durchführen. Folgende Anforderungen sind gegeben und ich hoffe das mir jemand helfen kann das Bash-Skript fertigzustellen oder einfach ein paar Tipps zu geben da ich nicht so der Programmiere bin:
1. Die virtuellen Maschinen laufen auf drei verschiedenen Linux Workstations
2. Diese sollen immer am Monatsanfag "in Wartung gehen"
3. Die Sicherung erfolgt auf einem Linux Fileserver, der Share besteht auf allen Maschinen
4. Nach der Sicherung der VM´s sollen diese wieder gestartet werden
1. Überprüfen ob die VM´s laufen, falls ja Schritt 1 ausführen falls nicht gleich zu Schritt 2 übergehen
2. STOPPEN der VM´s
vmrun -T server -h https://server01.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft
vmrun -T server -h https://server02.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft
vmrun -T server -h https://server03.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft
3. Die VM´s auf den drei Servern in .tar packen mit Datumsstempel und in das Share verzeichnis kopieren
4. NAch Beendigung des Kopiervorgangs alle VM´s wieder starten
vmrun -T server -h https://server01.com/sdk start'[ha-datacenter/standard] win7vm/win7vm.vmx'
vmrun -T server -h https://server02.com/sdk start'[ha-datacenter/standard] win7vm/win7vm.vmx'
vmrun -T server -h https://server03.com/sdk start'[ha-datacenter/standard] win7vm/win7vm.vmx'
5. Alle Aktionen in einer Logfile ablegen.
Kann das ganze ja auch als Batch von einem Windowsrechner ausführen da ich VMIX installiert hab.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 202727
Url: https://administrator.de/forum/vmbackup-unter-linux-202727.html
Ausgedruckt am: 04.04.2025 um 23:04 Uhr
43 Kommentare
Neuester Kommentar

Hallo,
Ich würde auf jedem der Linux-Server einen Cronjob einrichten. Der startet zum vorgesehenen Datum auf dem Linuxserver das Skript welches die VM anhält, einpackt, rüberkopiert und wieder startet.
Für infos über den cron-Dämon lese die Manpage für crond und crontab. Es gibt darüber auch im Internet Informationen.
Zusätzlich solltest Du es so einrichten, dass jedes der drei Skripten Dich darüber informiert, wenn was nicht funktioniert und dass Du nach Abschluss der Aufgabe informiert wirst.
Markus
Kann das ganze ja auch als Batch von einem Windowsrechner ausführen da ich VMIX installiert hab.
wieso Batch? wieso Windows?Ich würde auf jedem der Linux-Server einen Cronjob einrichten. Der startet zum vorgesehenen Datum auf dem Linuxserver das Skript welches die VM anhält, einpackt, rüberkopiert und wieder startet.
Für infos über den cron-Dämon lese die Manpage für crond und crontab. Es gibt darüber auch im Internet Informationen.
Zusätzlich solltest Du es so einrichten, dass jedes der drei Skripten Dich darüber informiert, wenn was nicht funktioniert und dass Du nach Abschluss der Aufgabe informiert wirst.
Markus

http://www.techgras.de/2009/10/vmware-server-2-backup-script-fur-linux- ...
Das sieht doch vielversprechend aus, wenn Du den Code nicht verstehst, findest Du hier http://tldp.org/LDP/abs/html/ alles was Du brauchst. Ansonsten einfach hier fragen.
Markus
Das sieht doch vielversprechend aus, wenn Du den Code nicht verstehst, findest Du hier http://tldp.org/LDP/abs/html/ alles was Du brauchst. Ansonsten einfach hier fragen.
Markus

Wahrscheinlich reicht es, den vmrun-Befehl, so wie in Deinem Eingangsposting ins Skript zu schreiben. Ich kann das hier nicht ausprobieren weil hier kein Vmware läuft.
Wenn Du den Befehl so ins Skript schreibst, wie Du ihn auch auf der Kommandozeile ausführen kannst, dann sollte das erstmal reichen.
Du musst überlegen, wie elaboriert Dein Skript sein soll/muss. Wahrscheinlich reichen wenige Zeilen. Ein Logfile ist sinnvoll.
Markus
Wenn Du den Befehl so ins Skript schreibst, wie Du ihn auch auf der Kommandozeile ausführen kannst, dann sollte das erstmal reichen.
vmrun -T server -h https://server01.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft >> ${LOGFILE}
Markus

Also das hier ist Blödsinn.
Es reicht stattdessen
Ich guck mir das Skript mal weiter an, aber vermutlich kann man ziemlich viel ausmisten.
Markus
### day and hour
17. DAY=$(date | cut -d" " -f1)
18. HOUR=$(date|tr -s " "|cut -d" " -f4| cut -d":" -f1)
Es reicht stattdessen
DAY=$(date +%a)
HOUR=$(date +%H)
Markus

Wenn Du auf dem Server, wo die Backups gespeichert werden sollen, ein NFS-Share einrichtest, dann wäre diese Freigabe einzubinden, wie eine lokale Partition, Beispiel: Und Du kannst dann als Pfad /mnt/backup nehmen. In Deinem obigen Skript Wobei das mit dem NTFS-Dateisystem in diesem Falle irrelevant ist.
Ich würde allerdings eher rsync benutzen um die tar-Datei auf den anderen Computer zu kopieren.
Markus
mount backupserver:/usr/local/backups /mnt/backup
VM_BACKUP1="/mnt/backup/"
Ich würde allerdings eher rsync benutzen um die tar-Datei auf den anderen Computer zu kopieren.
Markus

Guten Morgen,
ich habe nochmal über das Skript nachgedacht. Eine Sache mache ich immer anders, und zwar teile ich solche Skripten in zwei Dateien auf. Die Konfiguration kommt in eine Datei, das ist der Teil, den Du um 13:55 gepostet hast, daraus machst Du eine Datei "vmbackup.conf" und den ausführbaren restlichen Teil des Skripts nennst Du entsprechend "vmbackup.sh". Dann kannst Du die Konfiguration sourcen. Wenn also z.B. das ausführbare Skript in /usr/local/bin/ liegt und die Konfiguration in /usr/local/etc/, dann würdest Du im Skript so: die Konfiguration einlesen.
Der Vorteil ist, dass Du für alle VMs ein und dasselbe Skript benötigst, nur die Konfigurationsdateien auf den verschiedenen Servern sind unterschiedlich.
Markus
ich habe nochmal über das Skript nachgedacht. Eine Sache mache ich immer anders, und zwar teile ich solche Skripten in zwei Dateien auf. Die Konfiguration kommt in eine Datei, das ist der Teil, den Du um 13:55 gepostet hast, daraus machst Du eine Datei "vmbackup.conf" und den ausführbaren restlichen Teil des Skripts nennst Du entsprechend "vmbackup.sh". Dann kannst Du die Konfiguration sourcen. Wenn also z.B. das ausführbare Skript in /usr/local/bin/ liegt und die Konfiguration in /usr/local/etc/, dann würdest Du im Skript so:
. /usr/local/etc/vmbackup.conf
Der Vorteil ist, dass Du für alle VMs ein und dasselbe Skript benötigst, nur die Konfigurationsdateien auf den verschiedenen Servern sind unterschiedlich.
Markus

Das hier bedeutet, dass Du entweder die zu mountende Partition in /etc/fstab einfügen musst, dann kann mit gemountet werden. Oder Du muss den mount-Befehl anders schreiben, nämlich welche -Partition Freigabe wo im Verzeichnis gemountet werden soll. Im Skript steht ja nur es setzt also den Eintrag in fstab voraus.
Der Mount-Befehl im Skript müsste die Formhaben.
Markus
mount: can't find /mnt/cdrom1 in /etc/fstab or /etc/mtab
mount /mnt/cdrom
mount $USB$DEVICE -o force 1>> $LOG 2>> $LOG_ERR
Der Mount-Befehl im Skript müsste die Form
mount server:/pfad/zur/backup/partition/ /mnt/cdrom
Markus

Du musst den Befehl zur Berechnung des Speicherplatzes anpassen, hast Du den denn mal ausprobiert? also man kann den verfügbaren Speicherplatz auch auf einem NFS-share prüfen, das habe ich gerade ausprobiert.
Markus
Markus

Das mit dem mount-Befehl musst Du wahrscheinlich zuerst in Ordnung bringen, sonst weiß man nicht, wo das Skript Fehler produziert.
Du solltest die Befehle im Skript mal Schritt für Schritt auf der Kommandozeile durchführen. Dann siehst Du, was nicht funktioniert. Wenn was nicht geht, dann passe den Code auf der Kommandozeile an, wenn es dann klappt, dann schreib ihn ins Skript.
Falls es wirklich ein Problem mit dem Suspend Modus ist, da kenne ich mich nicht aus. Wie lautet denn nun der mount-Befehl der im Skript ausgeführt wird?
Markus
Du solltest die Befehle im Skript mal Schritt für Schritt auf der Kommandozeile durchführen. Dann siehst Du, was nicht funktioniert. Wenn was nicht geht, dann passe den Code auf der Kommandozeile an, wenn es dann klappt, dann schreib ihn ins Skript.
Falls es wirklich ein Problem mit dem Suspend Modus ist, da kenne ich mich nicht aus. Wie lautet denn nun der mount-Befehl der im Skript ausgeführt wird?
Markus

Probier erstmal den vmrun-Befehl, so wie er dort steht auf der Kommandozeile aus. Die Abfrage
bedeutet, dass nach dem Rückgabewert des vmrun-Befehls gefragt wird. Genauer: $? enthält den Rückgabewert des letzten Befehls, meistens 0 wenn alles glatt gelaufen ist.
Also nachdem Du vmrun auf der Kommandozeile ausgeführt hast, mache mal
Um das obige zu interpretieren, musst Du Dich mit den Rückgabewerten des vmrun-Befehls (Fehlercodes) beschäftigen. In Deinem Skript wird erwartet, dass 255 bedeutet, dass die VM nicht suspended werden konnte. Wenn das tatsächlich nicht klappt (auch auf der Kommandozeile), dann schau Dir mal die Berechtigungen an.
Markus
if [ $? = 255 ]; then
Also nachdem Du vmrun auf der Kommandozeile ausgeführt hast, mache mal
echo $?
Markus

Zitat von @winlin:
juhuuu jetzt macht er ja was
)) es lag an $IP da stand 127.0.0.1 drin...habe nun mal den FQDN reingeschrieben und nun läuft
er durch und macht mir auch ein Backup! Also Backup läuft noch sag dir bescheid wenn es abgeschlossen ist. Du bist echt ne
superhilfe gewesen. Danke für deinen rat.
Nichts zu danken, freut mich, dass es jetzt funktioniert.juhuuu jetzt macht er ja was
er durch und macht mir auch ein Backup! Also Backup läuft noch sag dir bescheid wenn es abgeschlossen ist. Du bist echt ne
superhilfe gewesen. Danke für deinen rat.
Markus

Ach so, ich hatte das so verstanden, dass die VMs auf drei verschiedenen Rechnern laufen.
Du musst die dann nur hintereinander ausführen. Ich würde das allerdings nicht in einer Schleife machen, also sondern für jede VM einen eigenen Cronjob anlegen und das vielleicht an drei aufeinanderfolgenden Tagen machen. Dann hast Du bei einer Fehlfunktion länger Zeit um zu reagieren.
Du könntest das so machen, dass das Skript den Pfad zur VM also Kommandozeilenparameter bekommt. Die Variablen $1, $2 usw enthalten die Kommandozeilenparameter. Du lässt also das Skript aufrufen mit im Skript ist dann
Markus
Du musst die dann nur hintereinander ausführen. Ich würde das allerdings nicht in einer Schleife machen, also
for vm in w7vm01/Windows_7_x64.vmx w7vm02/Windows_7_x64.vmx w7vm03/Windows_7_x64.vmx; do
Du könntest das so machen, dass das Skript den Pfad zur VM also Kommandozeilenparameter bekommt. Die Variablen $1, $2 usw enthalten die Kommandozeilenparameter. Du lässt also das Skript aufrufen mit
/usr/local/bin/backupscript.sh w7vm01/Windows_7_x64.vmx VM_BACKUP1
$1 = w7vm01/Windows_7_x64.vmx
$2 = VM_BACKUP1
Markus

Du meinst vermutlich '$' anstatt '%'. Und ich werde da nicht richtig schlau draus, beschreib mal, wie Du es genau machen möchtest.
Markus
Markus

Zitat von @winlin:
Auf das komm ich dann nochmal zurück wenn ich mein eigentliche Frage "verarbeitet" habe....
wie stelle ich das Skript (http://www.techgras.de/2009/10/vmware-server-2-backup-script-fur-linux- ..) so um das er gar
keine USB Platten mehr mounted etc. Wenn ich es einfach auf die zweite Festplatte die in der Maschine ist sichern will?
Wenn die Partition immer gemounted ist, dann kommentiere einfach im Skript den Teil mit dem Mounten aus.Auf das komm ich dann nochmal zurück wenn ich mein eigentliche Frage "verarbeitet" habe....
wie stelle ich das Skript (http://www.techgras.de/2009/10/vmware-server-2-backup-script-fur-linux- ..) so um das er gar
keine USB Platten mehr mounted etc. Wenn ich es einfach auf die zweite Festplatte die in der Maschine ist sichern will?
#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
# if [ $? = 0 ]; then
# ZIEL=$USB$DEVICE"/"$BACKUPORDNER
# MOUNTED=1
# echo "${USB}${DEVICE} gemountet." >>$LOG
# else
# DEVICE=$(( $DEVICE + 1 ))
# fi
# fi
#done
USB="/mnt/usb" #Mountpoints müssen "/mnt/einhängepunkt(nummer_laufend)" lauten.
BKPPARTITION=/pfad/zur/backup/partition/ # dorthin sichern
Falls Du jedoch die Partition nur zum Sichern mountest, also die lokale Partition mounten willst, dann mache einfach einen entsprechenden Eintrag in der /etc/fstab und ändere in dem Codeblock wo gemountet wird ebenfalls $USB nach $BKPPARTITION.
Markus

Zitat von @winlin:
hab ich genauso gemacht...
Logfile:
Ja, das ist klardas muss auch auskommentiert werden, sonst wird die Variable $MOUNTED abgefragt, die aber in dem auskommentierten Codeblock angelegt wird.
hab ich genauso gemacht...
Logfile:
> Keine Speichermedien gefunden. Backup wurde abgebrochen!
>
#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
Markus

Was genau steht denn in Zeile 111?
Markus
Markus

Lass die Berechnung komplett weg und parse stattdessen die Ausgabe von
Beispiel: Ausgabe von df -h bei mir und mit folgendem Befehl ergibt sich der verfügbare Speicher auf der vm-Partition. Aber Vorsicht, der cut-Befehl ist hier sehr unsicher.
Markus
df -h
Beispiel: Ausgabe von df -h bei mir
markus@samsung:~$ df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda5 25G 19G 4,5G 81% /
/dev/sda6 20G 16G 3,1G 84% /home
/dev/sda10 11G 8,2G 2,2G 80% /usr/local
/dev/sda7 60G 55G 1,6G 98% /usr/local/public
/dev/sda8 60G 37G 20G 65% /usr/local/vm
tmpfs 2,0G 1,7M 2,0G 1% /dev/shm
/dev/sda3 98G 49G 50G 50% /usr/local/win7
markus@samsung:~$ MEM=$(df -h | grep vm | cut -d G -f 3)
markus@samsung:~$ echo $MEM
20
Markus

Hallo,
also mindestens einige der if-statements im Script werden wohl nicht funktionieren.
Es muss z.B. heißen und nicht
Den ganzen Codeblock solltest Du ersetzen. Berechnen des freien Speicherplatzes kann mit df erfolgen,
MEM=$(df -h --output=avail | grep -i vm)
wobei Du mit grep nach etwas suchen musst, dass nur im Pfad des Backverzeichnisses vorkommt.
Größe der VMwobei hier bei mir dieses Verzeichnis eine VM enthält.
Wenn Du das Skript ausgemistet hast, dann wird es wohl problemlos laufen, dann ist es aber auch wesentlich übersichtlicher.
Markus
Edit: der oben durchgestrichene Code funktioniert nicht, weil bei der Option --output der String nach dem grep sucht nicht ausgegeben wird.
also mindestens einige der if-statements im Script werden wohl nicht funktionieren.
Es muss z.B. heißen
if [ $MB == 1 ]; then
if [ $MB = 1 ]; then
Den ganzen Codeblock solltest Du ersetzen. Berechnen des freien Speicherplatzes kann mit df erfolgen,
wobei Du mit grep nach etwas suchen musst, dass nur im Pfad des Backverzeichnisses vorkommt.
Größe der VM
VMSIZE=$(ls -lh /usr/local/vm/slackware/ | cut -d " " -f 5)
Wenn Du das Skript ausgemistet hast, dann wird es wohl problemlos laufen, dann ist es aber auch wesentlich übersichtlicher.
Markus
Edit: der oben durchgestrichene Code funktioniert nicht, weil bei der Option --output der String nach dem grep sucht nicht ausgegeben wird.

Es ist eine gute Möglichkeit zu Lernen. Wenn Du mal Zeit hast, dann gib Dich daran, die Speicherabfrage in's Skript einzubauen, dann kannst Du auch den Cronjob einrichten und z.B. die Konfiguration vom Skript trennen, so wie ich es oben beschrieben habe.
Du kannst das Skript auch als schlechtes Beispiel nehmen, es sind viel zu viele komplizierte Codeschnipsel darin enthalten und auch einige Fehler. Lies Dir mal die manpages von df und date durch, da merkst Du schnell, dass das meiste viel einfacher geht.
Und wenn Du mit dem Lesen der Manpages Schwierigkeiten hast, dann ist hier eine Anleitung: Manpages effizient nutzen
Markus
Du kannst das Skript auch als schlechtes Beispiel nehmen, es sind viel zu viele komplizierte Codeschnipsel darin enthalten und auch einige Fehler. Lies Dir mal die manpages von df und date durch, da merkst Du schnell, dass das meiste viel einfacher geht.
Und wenn Du mit dem Lesen der Manpages Schwierigkeiten hast, dann ist hier eine Anleitung: Manpages effizient nutzen
Markus

Du muss prüfen, was die Variablen beinhalten, die in dem Skript benutzt werden, also einfach ein paar echo Befehle einbauen.
vielleicht postest Du mal das gesamte Skript, so wie Du es jetzt laufen lässt, dann werde ich mir das heute abend mal ansehen. Im Moment habe ich zu wenig Überblick. Und bitte poste auch nochmal die genauen Pfade und Dateinamen.
Markus
...
#Jetzt kann tar loslegen
echo $ZIEL
echo $DATUM
echo $VM_BACKUP1
cd /
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG
...
Markus

Wie schon geschrieben, in den if-Ausdrücken muss == anstatt = stehen.
Und bei den Ordnernamen hast Du mindestens einen Fehler,
Du musst entweder schreiben, oder den Pfad schreiben, sonst ist der slash '/' doppelt.
Und Du kannst die meisten Anführungszeichen weglassen.
Markus
Und bei den Ordnernamen hast Du mindestens einen Fehler,
markus@samsung:~$ LOGZIEL="/hdd1/vm/"
markus@samsung:~$ DATUM="$(date +%d-%m-%Y)"
markus@samsung:~$ LOG="${LOGZIEL}/${DATUM}.log"
markus@samsung:~$ echo $LOGZIEL
/hdd1/vm/
markus@samsung:~$ echo $DATUM
06-03-2013
markus@samsung:~$ echo $LOGZIEL
/hdd1/vm/
markus@samsung:~$ echo $LOG
/hdd1/vm//06-03-2013.log
LOG="${LOGZIEL}${DATUM}.log"
LOGZIEL=/hdd1/vm
Und Du kannst die meisten Anführungszeichen weglassen.
Markus

Jetzt hab ich mal überall echo reingesetzt und das hier ist die Ausgabe davonwobei die Verzeichnisse und Dateien hier natürlich nicht vorhanden sind,
Markus
VM_ORDNER1 = w7-vm01
VM_BACKUP1 = hdd2/vm/
VM_1 = Windows7.vmx
BACKUPORDNER = backup
LOGZIEL = /hdd1/vm/
USER = root
PW = passwort
IP = https://hostname.domain.com/sdk
PLATTEN = 2
USB = /mnt/cdrom
CLEAN = 0
DATUM = 06-03-2013
LOG = /hdd1/vm//06-03-2013.log
LOG_ERR = /hdd1/vm//06-03-2013_err.log
ZIEL =
MOUNTED = 0
DEVICE =
USB mounten
i = 1
./bkp_2.sh: Zeile 61: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
./bkp_2.sh: Zeile 62: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
mount: Nur „root“ kann dies tun
DEVICE = 1
i = 2
./bkp_2.sh: Zeile 61: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
./bkp_2.sh: Zeile 62: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
mount: Nur „root“ kann dies tun
DEVICE = 2
Keine Speichermedien gefunden. Backup wurde abgebrochen!
./bkp_2.sh: Zeile 101: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
./bkp_2.sh: Zeile 176: vmrun: Kommando nicht gefunden.
ACHTUNG: Die Virtuelle Maschine (w7-vm01/Windows7.vmx) konnte nicht in den Suspend Modus versetzt werden.
Backup wurde abgebrochen
umount: /mnt/cdrom2 ist laut „mtab“ nicht eingehängt
mkdir: das Verzeichnis „/06-03-2013“ kann nicht angelegt werden: Keine Berechtigung
tar -czvf /06-03-2013/06-03-2013.tar.gz hdd2/vm/
./bkp_2.sh: Zeile 201: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
ACHTUNG: Beim Backup (tar) von (hdd2/vm/) wurden am 06-03-2013 um 20:38 Uhr Fehler/Meldungen ausgegeben!
Das erstellte Archiv befinden sich in /06-03-2013/06-03-2013.tar.gz
./bkp_2.sh: Zeile 206: /hdd1/vm//06-03-2013.log: Datei oder Verzeichnis nicht gefunden
./bkp_2.sh: Zeile 207: vmrun: Kommando nicht gefunden.
06-03-2013: Virtuelle Maschine (Windows7.vmx) wurde erfolgreich gestartet
Markus

Ich habe bei der Berechnung des Verfügbaren Speicherplatzes eine Fehler gemacht. Folgendes Skript nimmt zwei Argumente, 1. einen String der die Partition identifiziert und 2. den kompletten Pfad zur Datei (VM)Der Rückgabewert ist 0 wenn genug Platz und 1 anderenfalls. Allerdings rechnet es nicht sehr genau, es wäre also noch genug Platz, wenn der verfügbare Platz und die Dateigröße auf ein Byte genau gleich sind. Das kann man aber problemlos ändern.
Den kompletten Codeblock zum Berechnen des Speicherplatzes und evtl. Löschen von Backups würde ich so nicht schreiben, es reicht aus, wenn das Skript bei zu wenig Speicher mit einer entsprechenden Fehlermeldung abbricht, dann kann man manuell löschen und es nochmal starten.
Markus
#!/bin/sh
# Zwei Argumente, 1. Partition und 2. Datei mit vollstaendigem Pfad
AVAIL=$(df --output=target,avail | grep $1 | awk '{ print $2 }')
echo $AVAIL
FILESIZE=$(ls -l $2 | awk '{ print $5 }')
echo $FILESIZE
if (( $AVAIL < $FILESIZE )); then
echo "Nicht genug Speicherplatz"
exit 1
else
echo "Genug Speicherplatz verfuegbar"
exit 0
fi
Den kompletten Codeblock zum Berechnen des Speicherplatzes und evtl. Löschen von Backups würde ich so nicht schreiben, es reicht aus, wenn das Skript bei zu wenig Speicher mit einer entsprechenden Fehlermeldung abbricht, dann kann man manuell löschen und es nochmal starten.
Markus