Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VMBackup unter Linux

Frage Entwicklung Batch & Shell

Mitglied: winlin

winlin (Level 2) - Jetzt verbinden

04.03.2013 um 12:00 Uhr, 3505 Aufrufe, 43 Kommentare

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
01.
vmrun -T server -h https://server01.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft 
02.
vmrun -T server -h https://server02.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft 
03.
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
01.
<code> 
02.
vmrun -T server -h https://server01.com/sdk start'[ha-datacenter/standard] win7vm/win7vm.vmx'  
03.
vmrun -T server -h https://server02.com/sdk start'[ha-datacenter/standard] win7vm/win7vm.vmx'  
04.
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.
43 Antworten
Mitglied: hmarkus
04.03.2013 um 12:49 Uhr
Hallo,

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
Bitte warten ..
Mitglied: winlin
04.03.2013 um 12:51 Uhr
ja mach es unter linux.

gibt es irgendwo ein beispiel skript das ich für mich anpassen könnte?
Bitte warten ..
Mitglied: hmarkus
04.03.2013 um 13:03 Uhr
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
Bitte warten ..
Mitglied: winlin
04.03.2013 um 13:04 Uhr
habe eigentlich ein gutes skript - abr der will hier vmware-cmd ausführen. ich habe nur vmrun. Kannst du mir helfen?
01.
#! /bin/bash 
02.
# Roderick Derks 
03.
# www.r71.nl 
04.
# 20070227 
05.
06.
# backup vmware's virtual machines to a remote computer 
07.
# 1. check if backupserver is running 
08.
# Actions 2, 3 and 4 are per vm: 
09.
# 2. stop the vm if it is running 
10.
# 3. local copy the vm files 
11.
# 4. start the vm if it was running 
12.
# 5. remote copy of the backups created in step 3 
13.
################################################################### 
14.
 
15.
 
16.
### day and hour 
17.
    DAY=$(date | cut -d" " -f1) 
18.
    HOUR=$(date|tr -s " "|cut -d" " -f4| cut -d":" -f1) 
19.
### logfile 
20.
    export LOGFILE="/var/log/backup_vmware_servers.log" 
21.
    if [ ! -e "${LOGFILE}" ] 
22.
       then touch "$LOGFILE" # create a new logfile if not present 
23.
    fi 
24.
### variables 
25.
    VM_HOST_SRC="HOST" 
26.
    VM_HOST_REMOTE_DEST="TARGETHOST" 
27.
    VM_ROOT_SRC="/lok/HOST/w7vm" 
28.
    VM_LOCAL_BACKUP_DEST="/lok2/backup" 
29.
    VM_ROOT_REMOTE_DEST="/lok2/backup" 
30.
    VM_REMOTE_DEST="${VM_HOST_REMOTE_DEST}:${VM_ROOT_REMOTE_DEST}" 
31.
 ##   MAILSERVER="yourmailserver.yourmail.com" 
32.
 ##   EMAILADDRESS=" test@test.de" 
33.
 
34.
 
35.
################################################################### 
36.
### check local machine name 
37.
if [ $HOSTNAME != "${VM_HOST_SRC}" ]; then 
38.
   echo Hostname=${HOSTNAME}: 
39.
   echo "Dit script will only run on ${VM_HOST_SRC}" 
40.
   exit 
41.
fi 
42.
 
43.
echo $HOSTNAME > ${LOGFILE}          # flush logfile and add data 
44.
date >> ${LOGFILE} 
45.
echo >> ${LOGFILE} 
46.
 
47.
 
48.
################################################################### 
49.
 
50.
IFS=$'\n' # needed to prevent problems with filenames containing spaces in arrays 
51.
for VM_PATH_FILE in $(find ${VM_ROOT_SRC} -type f -name *.vmx) 
52.
do 
53.
 
54.
  echo VM: ${VM_PATH_FILE} | tee -a ${LOGFILE} 
55.
  echo | tee -a ${LOGFILE} 
56.
 
57.
  ## 
58.
  ## stop vm's if they are running 
59.
  ## 
60.
 
61.
  vmrun ${VM_PATH_FILE} list|grep -q "getstate() = on" 
62.
  if [ $? -eq 0 ]; then 
63.
     echo "Shutting down VM at `date`." | tee -a ${LOGFILE} 
64.
     #array0=( "${array0[@]}" "${VM_PATH_FILE}" ) # add to array, these vm's  will  be started later on 
65.
     BOOT="1" 
66.
####     vmware-cmd ${VM_PATH_FILE} stop soft >> ${LOGFILE} 
67.
  else 
68.
     echo "VM is not running." >> ${LOGFILE}; echo "VM is not running." 
69.
     BOOT="0" 
70.
  fi 
71.
 
72.
 
73.
 
74.
  ## 
75.
  ## start backup 
76.
  ## 
77.
 
78.
  VM_PATH=`echo ${VM_PATH_FILE}|rev|cut -d"/" -f2-|rev` # remove last field (using rev to remove first field, is easier) 
79.
  echo VM_PATH: $VM_PATH 
80.
 
81.
  echo "Starting local backup at `date`. (This is going to take a while...)" | tee -a ${LOGFILE} 
82.
 
83.
  # Local rsync copy command (to a local disk) 
84.
  VM_ROOT_SRC_VMDIR=`echo ${VM_PATH}|awk -F "${VM_ROOT_SRC}" '{ print $2 }'` 
85.
  #echo rsync -avu ${VM_PATH}/ ${VM_LOCAL_BACKUP_DEST}${VM_ROOT_SRC_VMDIR} 
86.
####  rsync -avu ${VM_PATH}/ ${VM_LOCAL_BACKUP_DEST}${VM_ROOT_SRC_VMDIR} >> ${LOGFILE} 
87.
 
88.
  echo Local backup finished at `date`. | tee -a ${LOGFILE} 
89.
 
90.
 
91.
  ## 
92.
  ## start VM if it was running 
93.
  ## 
94.
 
95.
  if [ $BOOT -eq 1 ]; then 
96.
  echo "Starting VM" | tee -a ${LOGFILE} 
97.
####  vmware-cmd "${VM_PATH_FILE}" start >> ${LOGFILE} 
98.
  fi 
99.
  if [ $BOOT -eq 0 ]; then 
100.
  echo "VM wasn't running so it will not be started." | tee -a ${LOGFILE} 
101.
  fi 
102.
 
103.
  echo | tee -a ${LOGFILE} 
104.
 
105.
  echo "------------------------------------------------------------" | tee -a ${LOGFILE} 
106.
done 
107.
 
108.
 
109.
date >> ${LOGFILE} 
110.
echo "All VM's have been backed up and started at `date`." | tee -a ${LOGFILE} 
111.
 
112.
 
113.
################################################################### 
114.
 
115.
 
116.
# check if remote server is up using return value: 1 is failed (down), 0 is success (up) 
117.
echo | tee -a ${LOGFILE} 
118.
echo Starting remote backup procedure. | tee -a ${LOGFILE} 
119.
 
120.
ping ${VM_HOST_REMOTE_DEST} -c2|grep -q " 0% packet loss" 
121.
if [ $? -eq 0 ]; then 
122.
   echo 
123.
   echo ${VM_HOST_REMOTE_DEST} is up, ping test succeeded. | tee -a ${LOGFILE} 
124.
 
125.
   # Copy local backup to a remote server. 
126.
   echo Remote backup started at `date`.. | tee -a ${LOGFILE} 
127.
####   rsync -avu -e ssh ${VM_LOCAL_BACKUP_DEST}/ ${VM_REMOTE_DEST} >> ${LOGFILE} 
128.
   echo Remote backup finished at `date`. | tee -a ${LOGFILE} 
129.
 
130.
else 
131.
   echo 
132.
   echo ${VM_HOST_REMOTE_DEST} unreachable, ping failed: no remote backup. | tee -a ${LOGFILE} 
133.
fi 
134.
 
135.
echo | tee -a ${LOGFILE} 
136.
 
137.
 
138.
################################################################### 
139.
 
140.
 
141.
## 
142.
## Mail 
143.
## 
144.
 
145.
 
146.
#ping ${MAILSERVER} -c2|grep -q " 0% packet loss" 
147.
#if [ $? -eq 0 ]; then 
148.
#   echo 
149.
#   echo ${MAILSERVER} is up, ping test succeeded. | tee -a ${LOGFILE} 
150.
 
151.
#else 
152.
#   echo 
153.
#   echo ${MAILSERVER} unreachable, ping failed: waiting for 90 seconds to give it some time to boot. | tee -a ${LOGFILE} 
154.
 
155.
 #  sleep 90 # my mailserver is probably booting now so wait a little bit 
156.
   #exit 1 
157.
#fi 
158.
 
159.
#echo "Sending e-mail to ${EMAILADDRESS}" >> ${LOGFILE} 
160.
#date >> ${LOGFILE}          # logfile aanvullen 
161.
#mail -s "VMWare backupscipt finished" ${EMAILADDRESS} <${LOGFILE} 
162.
 
163.
#exit 0 
164.
 
Bitte warten ..
Mitglied: hmarkus
04.03.2013, aktualisiert um 13:20 Uhr
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.
vmrun -T server -h https://server01.com/sdk stop '[ha-datacenter/standard] win7vm/win7vm.vmx' soft >> ${LOGFILE}
Du musst überlegen, wie elaboriert Dein Skript sein soll/muss. Wahrscheinlich reichen wenige Zeilen. Ein Logfile ist sinnvoll.

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

Markus
Bitte warten ..
Mitglied: winlin
04.03.2013, aktualisiert um 13:55 Uhr
ach du hast recht ich nehme besser dein Beispiel aus dem Link. Kannst du mir nur sagen wie ich anstatt den USB Platten ganz normale Verzeichnisse zum sichern verwenden kann? Würde es gerne auf einem /share speichern das auf allen MAschinen verbinden ist anstatt auf USB Platten (Zeile 13-20):
01.
 
02.
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!! 
03.
# --------------------------------------------------------- 
04.
VM_ORDNER1="/hdd1/vm/w7vm01" #In welchem Ordner liegt die VM 
05.
VM_BACKUP1="/share/backup/vm" #Der komplette Pfad zum VM Ordner 
06.
VM_1="w7-vm01" #Name der VM 
07.
BACKUPORDNER="backup" #Name des Backup-Ordners, wird angelegt falls nicht vorhanden. 
08.
LOGZIEL="/hdd1/vm/vm_backup_logs" #Pfad zu den Logs, muss vorhanden sein. 
09.
MAIL="test@test.de" #Mailempfänger 
10.
USER="root" #Administrator für VMware Server 2 
11.
PW="PWD" #PW für Administrator VMware Server 2 
12.
IP="https://127.0.0.1:8333/sdk" #Nur in AUSNAHMEFÄLLEN ändern. (Bei Standartinstallationen kann dies so bleiben) 
13.
PLATTEN="2" #USB-Platten wurden vorher in Datei /etc/fstab mit der option *noauto* und der entsprechenden UUID eingetragen 
14.
#Beispiel für die Zeile in der fstab. 
15.
##Platte1 
16.
#UUID=C0364D39364D31A8   /mnt/usb        ntfs    noauto,user,defaults    0 
17.
##Platte2 
18.
#UUID=4234536453323A34   /mnt/usb1       ntfs    noauto,user,defaults    0 
19.
#Es werden NTFS formatierte Platten vorausgesetzt. 
20.
USB="/media/usb1" #Mountpoints müssen "/mnt/einhängepunkt(nummer_laufend)" lauten. 
21.
CLEAN=0 #Alte Backups im Ordner "BACKUPORDNER" bei Platzmangel löschen? 1=ja, 0=nein 
22.
# --------------------------------------------------------- 
23.
# AB HIER NICHTS MEHR ÄNDERN 
24.
# --------------------------------------------------------- 
25.
 
Bitte warten ..
Mitglied: hmarkus
04.03.2013, aktualisiert um 16:25 Uhr
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:
mount backupserver:/usr/local/backups /mnt/backup
Und Du kannst dann als Pfad /mnt/backup nehmen. In Deinem obigen Skript
VM_BACKUP1="/mnt/backup/"
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
Bitte warten ..
Mitglied: hmarkus
05.03.2013 um 09:02 Uhr
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:
. /usr/local/etc/vmbackup.conf
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
Bitte warten ..
Mitglied: winlin
05.03.2013 um 09:23 Uhr
Hallo,

habe den Fileservershare auf der Maschine gemountet unter /mnt/cdrom. Kann auch drauf zugreifen
Das habe ich dann im Backupskript eingetragen:
01.
VM_BACKUP1="/mnt/cdrom" #Der komplette Pfad zum VM Ordner  
02.
USB="/mnt/cdrom" #Mountpoints müssen "/mnt/einhängepunkt(nummer_laufend)" lauten.
Nachdem ich es ausgeführt habe, erscheint das im Logfile:
01.
mount: can't find /mnt/cdrom1 in /etc/fstab or /etc/mtab 
02.
Keine Speichermedien gefunden. Backup wurde abgebrochen!
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 09:36 Uhr
Das hier
mount: can't find /mnt/cdrom1 in /etc/fstab or /etc/mtab 
bedeutet, dass Du entweder die zu mountende Partition in /etc/fstab einfügen musst, dann kann mit
mount /mnt/cdrom
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
mount $USB$DEVICE -o force 1>> $LOG 2>> $LOG_ERR
es setzt also den Eintrag in fstab voraus.

Der Mount-Befehl im Skript müsste die Form
mount server:/pfad/zur/backup/partition/ /mnt/cdrom
haben.

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 09:58 Uhr
das hat natürlich geklappt nachdem ich es geändert habe. Nun läuft das Skript an aber die Berechnung der Speicherplatzmenge ist aber falsch:
01.
Größe VM........................: 368 GB 
02.
Verfügbarer Speicherplatz.......: 153 GB 
03.
Freier Speicherplatz nach Backup: -215 GB 
04.
Platzbedarf in %................: 240 % 
05.
 
06.
Speicherplatz nicht ausreichend. Backup-Vorgang wird abgebrochen.
Bitte warten ..
Mitglied: hmarkus
05.03.2013 um 10:11 Uhr
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
Bitte warten ..
Mitglied: winlin
05.03.2013, aktualisiert um 10:22 Uhr
naja das hat jetzt geklappt nachdem ich etwas rumprobiert habe...Ist halt etwas unverständlich die Konstanten die man am Anfang des Skripts angeben muss...aber ich denke das es nun korrekt ist:
01.
VM_ORDNER1="w7vm01" #HIER HABE ICH DEN NAMEN MEINES VM ORDNERS ANGEGE NINDEM DIE VMX DATEI LIEGT 
02.
VM_BACKUP1="/pfad/vm/w7vm01/" #Der komplette Pfad zum VM Ordner Indem die vmx liegt 
03.
VM_1="Windows_7_x64.vmx" #Name der VM 
04.
BACKUPORDNER="backup" #Name des Backup-Ordners, wird angelegt falls nicht vorhanden.
Bitte warten ..
Mitglied: winlin
05.03.2013, aktualisiert um 10:22 Uhr
aber nun erhalte ich den Fehler das die VM nicht in den Suspend Modus versetzt werden konnte....oh mann:
01.
mount: can't find /mnt/cdrom in /etc/fstab or /etc/mtab 
02.
ACHTUNG: Die Virtuelle Maschine (w7vm01/Windows_7_x64.vmx) konnte nicht in den Suspend Modus versetzt werden. 
03.
Backup wurde abgebrochen
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 10:31 Uhr
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
Bitte warten ..
Mitglied: winlin
05.03.2013 um 10:33 Uhr
Habe ich gerade so gemacht....den Fehler mit dem mount Befehl habe ich gefunden und behoben...nun bleibt er jedoch immer noch hier stehen:
01.
ACHTUNG: Die Virtuelle Maschine (w7vm01/Windows_7_x64.vmx) konnte nicht in den Suspend Modus versetzt werden. Backup wurde abgebrochen
Ist der einzogste Fehler im LOG. Die Codezeilen sehen so aus:
01.
# VMs in den Suspend setzen und Erfolg abfragen 
02.
# 0 = i.O. 
03.
# 255 = Fehler 
04.
 
05.
echo | vmrun -T server -h $IP -u $USER -p $PW suspend "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR 
06.
if  [ $? = 255 ]; then 
07.
                echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht in den Suspend Modus versetzt werden." >>$LOG_ERR 
08.
                echo "Backup wurde abgebrochen" >>$LOG_ERR 
09.
                umount $USB$DEVICE >> $LOG_ERR 
10.
                mail_err 
11.
                exit 
12.
                        else 
13.
                                echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich in den Suspend-Mode versetzt" >>$LOG 
14.
fi
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 10:43 Uhr
Probier erstmal den vmrun-Befehl, so wie er dort steht auf der Kommandozeile aus. Die Abfrage
if [ $? = 255 ]; then 
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
echo $?
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
Bitte warten ..
Mitglied: winlin
05.03.2013 um 10:42 Uhr
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.
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 10:46 Uhr
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.

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013, aktualisiert um 10:58 Uhr
noch eine Sache hätt ich noch markus...wenn ich in meinem vm Ordner mehrere VM´s habe, kann ich die doch auch mit diesem Skript sichern, oder?!

Pfad zum VM-Ordner:
/hdd01/vm/

VM´s:
w7vm01/Windows_7_x64.vmx
w7vm02/Windows_7_x64.vmx
w7vm03/Windows_7_x64.vmx

Würd dann so aussehen:
01.
# VM01 
02.
VM_ORDNER1="w7vm01" #HIER HABE ICH DEN NAMEN MEINES VM ORDNERS ANGEGEBEN NINDEM DIE VMX DATEI LIEGT  
03.
VM_BACKUP1="/pfad/vm/w7vm01/" #Der komplette Pfad zum VM Ordner Indem die vmx liegt  
04.
VM_1="Windows_7_x64.vmx" #Name der VM  
05.
# VM02 
06.
VM_ORDNER2="w7vm02" #HIER HABE ICH DEN NAMEN MEINES VM ORDNERS ANGEGEBEN NINDEM DIE VMX DATEI LIEGT  
07.
VM_BACKUP2="/pfad/vm/w7vm02/" #Der komplette Pfad zum VM Ordner Indem die vmx liegt  
08.
VM_1="Windows_7_x64.vmx" #Name der VM  
09.
# VM03 
10.
VM_ORDNER2="w7vm02" #HIER HABE ICH DEN NAMEN MEINES VM ORDNERS ANGEGEBEN NINDEM DIE VMX DATEI LIEGT  
11.
VM_BACKUP2="/pfad/vm/w7vm02/" #Der komplette Pfad zum VM Ordner Indem die vmx liegt  
12.
VM_1="Windows_7_x64.vmx" #Name der VM 
Problem ist nur das im kompletten Skript immer $VM_ORDNER1/$VM_1 angegeben ist. Muss ich das ändern in $VM_ORDNER%/$VM_% ???
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 10:59 Uhr
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
for vm in w7vm01/Windows_7_x64.vmx w7vm02/Windows_7_x64.vmx w7vm03/Windows_7_x64.vmx; do
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
/usr/local/bin/backupscript.sh w7vm01/Windows_7_x64.vmx VM_BACKUP1
im Skript ist dann
$1 = w7vm01/Windows_7_x64.vmx 
$2 = VM_BACKUP1
Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 11:06 Uhr
also dann so:
01.
#VM01 
02.
VM_ORDNER%1="w7vm01" #In welchem Ordner liegt die VM 
03.
VM_BACKUP%1="/share/pfad/vm/w7vm01/" #Der komplette Pfad zum VM Ordner 
04.
VM_%1="Windows_7_x64.vmx" #Name der VM 
05.
#VM02 
06.
VM_ORDNER%1="w7vm02" #In welchem Ordner liegt die VM 
07.
VM_BACKUP%1="/share/pfad/vm/w7vm02/" #Der komplette Pfad zum VM Ordner 
08.
VM_%1="Windows_7_x64.vmx" #Name der VM 
09.
#VM03 
10.
VM_ORDNER%1="w7vm03" #In welchem Ordner liegt die VM 
11.
VM_BACKUP%1="/share/pfad/vm/w7vm03/" #Der komplette Pfad zum VM Ordner 
12.
VM_%1="Windows_7_x64.vmx" #Name der VM
Bitte warten ..
Mitglied: hmarkus
05.03.2013 um 11:10 Uhr
Du meinst vermutlich '$' anstatt '%'. Und ich werde da nicht richtig schlau draus, beschreib mal, wie Du es genau machen möchtest.

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 11:59 Uhr
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?
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 12:14 Uhr
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.
#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
Dann änderst Du
USB="/mnt/usb" #Mountpoints müssen "/mnt/einhängepunkt(nummer_laufend)" lauten.
in
BKPPARTITION=/pfad/zur/backup/partition/  # dorthin sichern
Und dann außerhalb dieses Codeblocks überall da, wo $USB steht $BKPPARTITION schreiben. Beachte, dass Du die Anführungszeichen im Code nicht brauchst, es kommen ja keine Leerzeichen im Pfad vor. Allerdings solltest Du um unliebsame Überraschungen zu vermeiden, die Umlaute vermeiden, also z.B. 'ä' durch 'ae' ersetzen! auch in den Kommentaren! Das funktioniert nämlich u.U. nicht mehr, wenn auf dem Rechner mal nach einem Update z.B. $LANG falsch gesetzt ist.

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
Bitte warten ..
Mitglied: winlin
05.03.2013 um 12:28 Uhr
hab ich genauso gemacht...
Logfile:
01.
Keine Speichermedien gefunden. Backup wurde abgebrochen!
Bitte warten ..
Mitglied: hmarkus
05.03.2013 um 12:33 Uhr
Zitat von winlin:
hab ich genauso gemacht...
Logfile:
01.
> Keine Speichermedien gefunden. Backup wurde abgebrochen! 
02.
> 
Ja, das ist klar
#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
das muss auch auskommentiert werden, sonst wird die Variable $MOUNTED abgefragt, die aber in dem auskommentierten Codeblock angelegt wird.

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 13:14 Uhr
hatte ich eben auskomentiert...is mir auch aufgefallen...naja sieht alles schon besser aus...jetzt hab ichs mal wieder ausgeführt und warte...beim ausführen kam ein error den ich danach auswerten werden...vorab schon mal:
01.
[root@hostname vm]# ./BACKUP_skript.sh 
02.
03.
./BACKUP_skript.sh: line 111: /dev/mapper/vgroot-root 
04.
208520816 / 1048576 : syntax error: operand expected (error token is "/dev/mapper/vgroot-root 
05.
208520816 / 1048576 ")
Bitte warten ..
Mitglied: hmarkus
05.03.2013 um 13:19 Uhr
Was genau steht denn in Zeile 111?

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 13:23 Uhr
01.
88 #Speicherplatzabfrage. 
02.
     89 #Wenn CLEAN auf 1 gesetzt, wird bei zu geringem Speicherplatz der Backupordner gelöscht. 
03.
     90 #Backup-Rotation in Planung.... 
04.
     91 S="/" 
05.
     92 MB=0 
06.
     93 MENGEQ=" GB" 
07.
     94 MENGEZ=" GB" 
08.
     95 MENGED=" GB" 
09.
     96 LIMIT=1 
10.
     97 LAUF=2 
11.
     98 END=0 
12.
     99 echo 1 
13.
    100 for i in $(seq 1 $LAUF); do 
14.
    101         if [ $END = 0 ]; then 
15.
    102                 QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1) 
16.
    103                 ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai") 
17.
    104                 QUELLEERG=$(( $QUELLE / 1048576 )) 
18.
    105                         if [ $QUELLEERG -lt $LIMIT ]; then 
19.
    106                                 QUELLEERG=$(( $QUELLE / 1024 )) 
20.
    107                                 MB=1 
21.
    108                                 MENGEQ=" MB" 
22.
    109                         fi 
23.
    110 
24.
    111                 ZIELERG=$(( $ZIEL1 / 1048576 )) 
25.
    112                         if [ $MB = 1 ]; then 
26.
    113                                 ZIELERG=$(( $ZIEL1 / 1024 )) 
27.
    114                                 MENGEZ=" MB" 
28.
    115                                 MENGED=" MB" 
29.
    116                         fi 
30.
    117 
31.
    118                 DIFFERENZ=$(( $ZIELERG - $QUELLEERG )) 
32.
    119                 PROZENT=$(( $DIFFERENZ * 100 / $ZIELERG )) 
33.
    120                 NUTZ=$(( 100 - $PROZENT )) 
34.
    121 
35.
    122                                 if  [ $ZIELERG -lt $QUELLEERG ]; then 
36.
    123                                         if [ $CLEAN = 1 ]; then 
37.
    124                                                 echo "Größe VM........................: "$QUELLEERG$MENGEQ         >> $LOG 
38.
    125                                                 echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >>         $LOG 
39.
    126                                                 echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED         >> $LOG 
40.
 
Bitte warten ..
Mitglied: hmarkus
05.03.2013, aktualisiert um 13:56 Uhr
Lass die Berechnung komplett weg und parse stattdessen die Ausgabe von
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
und mit folgendem Befehl
markus@samsung:~$ MEM=$(df -h | grep vm | cut -d G -f 3) 
markus@samsung:~$ echo $MEM 
20
ergibt sich der verfügbare Speicher auf der vm-Partition. Aber Vorsicht, der cut-Befehl ist hier sehr unsicher.

Markus
Bitte warten ..
Mitglied: winlin
05.03.2013 um 14:06 Uhr
nach dem auskommentieren mit der berechnung des speichers, läuft er seit einigen minuten ohne fehler...mal sehen was als ergebnis rauskommt... Speicher hat er wirklich genug und die Platten sind sehr gross...
Bitte warten ..
Mitglied: winlin
06.03.2013, aktualisiert um 12:31 Uhr
hi habe ein erfolgreiches Logfile:
01.
atum: 06-03-2013 
02.
Zeit: 10:40 
03.
/mnt/cdrom gemountet. 
04.
Erstelle Ziel-Ordner (/mnt/cdrom/backup). 
05.
Ordner /mnt/cdrom/backup wurde erstellt. 
06.
Größe VM........................: 0 MB 
07.
Verfügbarer Speicherplatz.......: 229397 MB 
08.
Freier Speicherplatz nach Backup: 229397 MB 
09.
Platzbedarf in %................: 0 % 
10.
 
11.
Speicherplatz ausreichend. Backup wird gestartet. 
12.
10:42: Virtuelle Maschine (Windows7.vmx) wurde erfolgreich in den Suspend-Mode versetzt 
13.
scr2/vm/ 
14.
Errorlevel TAR: 0 
15.
------------------------------------------------------------------- 
16.
10:42: Virtuelle Maschine (Windows7.vmx) wurde erfolgreich gestartet 
17.
------------------------------------------------------------ 
18.
Das Backup von Windows7.vmx wurde am 06-03-2013 um 10:42 Uhr erfolgreich beendet und in /mnt/cdrom/backup/06-03-2013/06-03-2013.tar.gz gespeichert.
Sieht ja alles gut aus bis auf oben mit der Grösse des VM-Ordners...wieso denn 0MB? Wo berechnet er etwas falsches?

Konfiguration:
01.
 
02.
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!! 
03.
# --------------------------------------------------------- 
04.
VM_ORDNER1="Windows7" #In welchem Ordner liegt die VM 
05.
VM_BACKUP1="hdd2/vm/" #Der komplette Pfad zum VM Ordner 
06.
VM_1="Windows7.vmx" #Name der VM 
07.
BACKUPORDNER="backup" #Name des Backup-Ordners, wird angelegt falls nicht vorhanden. 
08.
LOGZIEL="/tmp/vm/" #Pfad zu den Logs, muss vorhanden sein. 
09.
MAIL="testuser@test.de" #Mailempfänger 
10.
USER="root" #Admin für VMware Server 2 
11.
PW="password" #PW für Administrator VMware Server 2 
12.
IP="https://hostname.domain.com/sdk" #Nur in AUSNAHMEFÄLLEN ändern. (Bei Standartinstallationen kann dies so bleiben) 
13.
PLATTEN="2" #USB-Platten wurden vorher in Datei /etc/fstab mit der option *noauto* und der entsprechenden UUID eingetragen 
14.
CLEAN=0 #Alte Backups im Ordner "BACKUPORDNER" bei Platzmangel löschen? 1=ja, 0=nein 
15.
# --------------------------------------------------------- 
16.
# AB HIER NICHTS MEHR ÄNDERN 
17.
# --------------------------------------------------------- 
18.
DATUM="$(date +%d-%m-%Y)" 
19.
LOG="${LOGZIEL}/${DATUM}.log" 
20.
LOG_ERR="${LOGZIEL}/${DATUM}_err.log" 
21.
ZIEL="" 
22.
MOUNTED=0 
23.
DEVICE=""
Das erstellen der TAR Files:
01.
#Verzeichnis für neues Backup erstellen falls noch nicht vorhanden 
02.
if ! [ -d $ZIEL/$DATUM ]; then 
03.
                echo | mkdir $ZIEL/$DATUM >> $LOG 
04.
fi 
05.
 
06.
#Jetzt kann tar loslegen 
07.
cd / 
08.
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG
Bitte warten ..
Mitglied: hmarkus
06.03.2013, aktualisiert 07.03.2013
Hallo,

also mindestens einige der if-statements im Script werden wohl nicht funktionieren.

Es muss z.B. heißen
if [ $MB == 1 ]; then
und nicht
if [ $MB = 1 ]; then
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 VM
VMSIZE=$(ls -lh /usr/local/vm/slackware/ | cut -d " " -f 5)
wobei 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.
Bitte warten ..
Mitglied: winlin
06.03.2013 um 12:55 Uhr
ich denke das mit der Speicherabfrage etc. lass ich lieber sein...ich weiss ja das ich immer genug Platz auf dem Fileserver habe wo die VM gesichert wird....oder was denkst du? Und vor allem da ich mich ja net so gut auskenne....
Bitte warten ..
Mitglied: hmarkus
06.03.2013, aktualisiert um 13:04 Uhr
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: http://www.administrator.de/wissen/manpages-effizient-nutzen-170683.htm ...

Markus
Bitte warten ..
Mitglied: winlin
06.03.2013 um 13:46 Uhr
Die komplette Speicherabfrage erstmal rauskommentiert....Ich weiss nur icht wieso er mir zwar erfolgreich eine Log erstellt das alles geklappt hat, öffne ich jedoch das tar sehe ich nur meinen leeren VM-Ordner....der sichert gar nicht meine VM sondern nur den leeren ordner...
Bitte warten ..
Mitglied: hmarkus
06.03.2013 um 13:58 Uhr
Du muss prüfen, was die Variablen beinhalten, die in dem Skript benutzt werden, also einfach ein paar echo Befehle einbauen.
... 
#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 
...
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
Bitte warten ..
Mitglied: winlin
06.03.2013, aktualisiert um 14:05 Uhr
das werde ich gleich mal ausprobieren um nachvollziehen zu können was gemacht wird...
hier aber das Skript:
01.
#!/bin/bash 
02.
#################################### 
03.
# Backupskript VMware              #        
04.
#################################### 
05.
  
06.
# Ab hier alle Einstellungen überprüfen und ggf. anpassen!! 
07.
# --------------------------------------------------------- 
08.
VM_ORDNER1="w7-vm01" 
09.
VM_BACKUP1="hdd2/vm/"  
10.
VM_1="Windows7.vmx" 
11.
BACKUPORDNER="backup"  
12.
LOGZIEL="/hdd1/vm/"  
13.
USER="root"  
14.
PW="passwort" 
15.
IP="https://hostname.domain.com/sdk" 
16.
PLATTEN="2" 
17.
USB="/mnt/cdrom" 
18.
CLEAN=0 
19.
# --------------------------------------------------------- 
20.
# AB HIER NICHTS MEHR ÄNDERN 
21.
# --------------------------------------------------------- 
22.
DATUM="$(date +%d-%m-%Y)" 
23.
LOG="${LOGZIEL}/${DATUM}.log" 
24.
LOG_ERR="${LOGZIEL}/${DATUM}_err.log" 
25.
ZIEL="" 
26.
MOUNTED=0 
27.
DEVICE="" 
28.
  
29.
mail_err () 
30.
{  
31.
  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Fehler" $MAIL < $LOG_ERR 
32.
}  
33.
  
34.
mail_final () 
35.
{  
36.
  echo | mail -s "${DATUM}, $(date +%H:%M) Backup-Erfolg" $MAIL <$LOG 
37.
}  
38.
  
39.
#USB-Platten werden gemountet  
40.
for i in $(seq 1 $PLATTEN); do 
41.
    if [ $MOUNTED = 0 ]; then 
42.
	echo "Datum: "$DATUM >> $LOG 
43.
	echo "Zeit: "$(date +%H:%M) >> $LOG 
44.
#	echo | mount $USB$DEVICE -o force 1>> $LOG 2>> $LOG_ERR 
45.
	echo | mount FILESERVER:/hdd2/vm/ /mnt/cdrom/ 
46.
	if [ $? = 0 ]; then 
47.
	    ZIEL=$USB"/"$BACKUPORDNER 
48.
	    MOUNTED=1 
49.
	    echo "${USB}${DEVICE} gemountet." >>$LOG 
50.
	else 
51.
	    DEVICE=$(( $DEVICE + 1 )) 
52.
	fi 
53.
    fi 
54.
done 
55.
  
56.
#Wenn keine der Platten eingebunden werden kann: EXIT mit Error-Mail 
57.
if [ $MOUNTED = 0 ]; then 
58.
    echo "Keine Speichermedien gefunden. Backup wurde abgebrochen!" >>$LOG_ERR 
59.
	mail_err 
60.
    exit 
61.
fi 
62.
  
63.
#Wenn nicht vorhanden wird Backup-Ordner erstellt. 
64.
if ! [ -d $ZIEL ]; then 
65.
	echo "Erstelle Ziel-Ordner (${ZIEL})." >>$LOG 
66.
	echo | mkdir $ZIEL 1>> $LOG 2>> $LOG_ERR 
67.
		if ! [ $? = 0 ]; then 
68.
			echo "Ordner $ZIEL konnte nicht erstellt werden. Backup wird abgebrochen." >>$LOG 
69.
			mail_err 
70.
			exit 
71.
			else 
72.
				echo "Ordner ${ZIEL} wurde erstellt." >> $LOG 
73.
			fi 
74.
  
75.
else 
76.
	echo "Ordner (${ZIEL}) bereits vorhanden." >> $LOG 
77.
fi 
78.
  
79.
#Speicherplatzabfrage.  
80.
#Wenn CLEAN auf 1 gesetzt, wird bei zu geringem Speicherplatz der Backupordner gelöscht.  
81.
#Backup-Rotation in Planung.... 
82.
#S="/" 
83.
#MB=0 
84.
#MENGEQ=" GB" 
85.
#MENGEZ=" GB" 
86.
#MENGED=" GB" 
87.
#LIMIT=1 
88.
#LAUF=2 
89.
#END=0 
90.
#echo 1 
91.
#for i in $(seq 1 $LAUF); do 
92.
#	if [ $END = 0 ]; then 
93.
#		QUELLE=$(du -s $S$VM_BACKUP1 | tr -s " " | cut -d "/" -f 1) 
94.
#		ZIEL1=$(df $S$ZIEL | tr -s " " | cut -d " " -f 4 | grep -v "Avai") 
95.
#		QUELLEERG=$(( $QUELLE / 1048576 )) 
96.
#			if [ $QUELLEERG -lt $LIMIT ]; then 
97.
#				QUELLEERG=$(( $QUELLE / 1024 )) 
98.
#				MB=1 
99.
#				MENGEQ=" MB"  
100.
#			fi 
101.
#  
102.
#		ZIELERG=$(( $ZIEL1 / 1048576 )) 
103.
#			if [ $MB = 1 ]; then 
104.
#				ZIELERG=$(( $ZIEL1 / 1024 )) 
105.
#				MENGEZ=" MB" 
106.
#				MENGED=" MB"  
107.
#			fi 
108.
109.
#		DIFFERENZ=$(( $ZIELERG - $QUELLEERG )) 
110.
#		PROZENT=$(( $DIFFERENZ * 100 / $ZIELERG )) 
111.
#		NUTZ=$(( 100 - $PROZENT )) 
112.
113.
#				if  [ $ZIELERG -lt $QUELLEERG ]; then 
114.
#					if [ $CLEAN = 1 ]; then 
115.
#						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG 
116.
#						echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG 
117.
#						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG 
118.
#						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG 
119.
#						echo " " >> $LOG 
120.
#						echo "Speicherplatz nicht ausreichend. Ordner ${ZIEL} wird geleert." >> $LOG 
121.
#						echo "...." >> $LOG 
122.
#						echo | touch $ZIEL/test.file 1>> $LOG 2>> $LOG_ERR 
123.
#						echo | rm -r $ZIEL/* 1>> $LOG 2>> $LOG_ERR 
124.
#					else 
125.
#						echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG_ERR 
126.
#						echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG_ERR 
127.
#						echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG_ERR 
128.
#						echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG_ERR 
129.
#						echo " " >> $LOG_ERR 
130.
#						echo "Speicherplatz nicht ausreichend. Backup-Vorgang wird abgebrochen." >> $LOG_ERR 
131.
#						mail_err 
132.
#						exit 
133.
#					fi 
134.
#				else 
135.
#					END=1 
136.
#					echo "Größe VM........................: "$QUELLEERG$MENGEQ >> $LOG 
137.
#					echo "Verfügbarer Speicherplatz.......: "$ZIELERG$MENGEZ >> $LOG 
138.
#					echo "Freier Speicherplatz nach Backup: "$DIFFERENZ$MENGED >> $LOG 
139.
#					echo "Platzbedarf in %................: "$NUTZ" %" >> $LOG 
140.
#					echo " " >> $LOG 
141.
#					echo "Speicherplatz ausreichend. Backup wird gestartet." >> $LOG 
142.
#				fi				 
143.
#	fi 
144.
#done 
145.
  
146.
# VMs in den Suspend setzen und Erfolg abfragen 
147.
# 0 = i.O. 
148.
# 255 = Fehler 
149.
  
150.
echo | vmrun -T server -h $IP -u $USER -p $PW suspend "[ha-datacenter/standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR 
151.
if  [ $? = 255 ]; then 
152.
		echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht in den Suspend Modus versetzt werden." >>$LOG_ERR 
153.
		echo "Backup wurde abgebrochen" >>$LOG_ERR 
154.
		umount $USB$DEVICE >> $LOG_ERR 
155.
		mail_err 
156.
		exit 
157.
			else 
158.
				echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich in den Suspend-Mode versetzt" >>$LOG 
159.
fi	 
160.
  
161.
  
162.
  
163.
#Verzeichnis für neues Backup erstellen falls noch nicht vorhanden 
164.
if ! [ -d $ZIEL/$DATUM ]; then 
165.
		echo | mkdir $ZIEL/$DATUM >> $LOG 
166.
fi 
167.
  
168.
#Jetzt kann tar loslegen 
169.
cd / 
170.
echo | tar -czvf $ZIEL/$DATUM/$DATUM.tar.gz $VM_BACKUP1 1>>$LOG 2>>$LOG 
171.
  
172.
#Auf Fehler während tar prüfen: 
173.
# 0 = fehlerfrei, 
174.
echo "Errorlevel TAR: "$? >> $LOG  
175.
  
176.
if  [ $? != 0 ] ; then 
177.
    echo "ACHTUNG: Beim Backup (tar) von (${VM_BACKUP1}) wurden am ${DATUM} um $(date +%H:%M) Uhr Fehler/Meldungen ausgegeben!" >>$LOG 
178.
    echo "Das erstellte Archiv befinden sich in ${ZIEL}/${DATUM}/${DATUM}.tar.gz" >>$LOG 
179.
	umount $USB$DEVICE >> $LOG 
180.
    echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR 
181.
  
182.
		# Prüfen ob VM gestartet werden konnte 
183.
		if  [ $? = 255 ]; then 
184.
			echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR 
185.
			mail_err 
186.
			else 
187.
  
188.
			echo "$(date +%d-%m-%Y): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG 
189.
		fi  
190.
  
191.
		mail_final 
192.
		exit 
193.
  
194.
		else 
195.
			echo | vmrun -T server -h $IP -u $USER -p $PW start "[standard] $VM_ORDNER1/$VM_1" 1>>$LOG 2>>$LOG_ERR 
196.
  
197.
			#Prüfen ob VM gestartet werden konnte 
198.
			if  [ $? = 255 ]; then 
199.
				echo "ACHTUNG: Die Virtuelle Maschine ($VM_ORDNER1/$VM_1) konnte nicht gestartet werden." >>$LOG_ERR 
200.
				mail_err 
201.
					else 
202.
						echo "-------------------------------------------------------------------" >>$LOG 
203.
						echo "$(date +%H:%M): Virtuelle Maschine ($VM_1) wurde erfolgreich gestartet" >>$LOG     
204.
					fi 
205.
		#Backup war erfolgreich also beenden wir die .log entsprechend und verschicken die Mail	  
206.
		echo "------------------------------------------------------------ " >> $LOG 
207.
		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 
208.
		umount $USB$DEVICE 1>>$LOG 2>>$LOG_ERR 
209.
		mail_final 
210.
  
211.
fi
Bitte warten ..
Mitglied: hmarkus
06.03.2013 um 20:00 Uhr
Wie schon geschrieben, in den if-Ausdrücken muss == anstatt = stehen.

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
Du musst entweder
LOG="${LOGZIEL}${DATUM}.log"
schreiben, oder den Pfad
LOGZIEL=/hdd1/vm
schreiben, sonst ist der slash '/' doppelt.

Und Du kannst die meisten Anführungszeichen weglassen.

Markus
Bitte warten ..
Mitglied: hmarkus
06.03.2013 um 21:15 Uhr
Jetzt hab ich mal überall echo reingesetzt und das hier ist die Ausgabe davon
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
wobei die Verzeichnisse und Dateien hier natürlich nicht vorhanden sind,

Markus
Bitte warten ..
Mitglied: hmarkus
07.03.2013, aktualisiert um 10:28 Uhr
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)
01.
#!/bin/sh 
02.
 
03.
# Zwei Argumente, 1. Partition und 2. Datei mit vollstaendigem Pfad 
04.
AVAIL=$(df --output=target,avail | grep $1 | awk '{ print $2 }') 
05.
echo $AVAIL 
06.
 
07.
FILESIZE=$(ls -l $2 | awk '{ print $5 }') 
08.
echo $FILESIZE 
09.
 
10.
if (( $AVAIL < $FILESIZE )); then 
11.
    echo "Nicht genug Speicherplatz" 
12.
    exit 1  
13.
else 
14.
    echo "Genug Speicherplatz verfuegbar" 
15.
    exit 0  
16.
fi
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Linux Tools
Docker - Minimize your containers with alpine linux

Link von Sheogorath zum Thema Linux Tools ...

Monitoring
System Monitoring für Windows, Linux (5)

Frage von manuelw zum Thema Monitoring ...

Viren und Trojaner
gelöst WHM cPanel Anti Virensoftware für Linux ? (2)

Frage von xpstress zum Thema Viren und Trojaner ...

Windows Netzwerk
Konfiguration Linux VM in IIS-Manager (10)

Frage von HansWerner1 zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...