Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

Datensicherungskonzept [gelöst]

Hilfe bei Problemen mit der Installation oder Benutzung des VMware GSX Server und VMware Server 1.

Moderatoren: Dayworker, irix

Experte
Beiträge: 1188
Registriert: 08.11.2005, 13:08
Wohnort: bei Berlin

Beitragvon e-e-e » 07.11.2006, 15:03

Hallo,

ich würde meinen, daß evtl. zum kopieren und komprimieren der VM´s eine Minute ein bisschen wenig Zeit ist (hängt natürlich von Größe der VM und der Geschwindigkeit der HDD ab), abgesehen davon könnte die Reihenfolge nicht stimmen: erst VM im Host komprimieren und wegkopieren, dann Ubuntu und Squid starten, dann alle 3 runterfahren und um 2:04 Uhr Other.vmx starten ???

Gruß Ronny

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 07.11.2006, 16:22

e-e-e hat geschrieben:Hallo,

ich würde meinen, daß evtl. zum kopieren und komprimieren der VM´s eine Minute ein bisschen wenig Zeit ist (hängt natürlich von Größe der VM und der Geschwindigkeit der HDD ab), abgesehen davon könnte die Reihenfolge nicht stimmen: erst VM im Host komprimieren und wegkopieren, dann Ubuntu und Squid starten, dann alle 3 runterfahren und um 2:04 Uhr Other.vmx starten ???

Gruß Ronny


Das ist nicht eine Minute sondern eine Stunde. Ich sehe gerade ich habe nen Riesenfehler gemacht... 01 50 * * * gibt es garnicht. Es müsste 50 01 * * *heißen damit es 1:50 ist.
Er hat also im laufenden betrieb komprimiert und deshalb hatte er heute morgen auch so ein Riesenproblem mit dem vmx´s

Die Other.vmx ist eine reale Maschine, die auch in Verwendung ist.

Wie leicht sich doch solche Fehler immer wieder einschleichen....

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 09.11.2006, 12:31

Hier nochmal kurz der aktuelle Stand der Dinge.
Ich habe es eben einmal mit einer unwichtigen Maschine ausprobiert. Ich habe sie mit cron heruntergefahren, dann mit tar cz ein Backup von dem ganzen Unterordner erstellen lassen und mit netcat alles kopiert. Das doofe ist ich kann die tar.gz die dabei erstellt wird und die richtige Größe auch hat nicht verwenden.
Sie lässt sich einfach nicht öffnen.

Leider kann ich aber meines Wissens nach mit dd nicht ganze Ordner nach netcat kopieren.
Wäre eigentlich die beste Lösung, weil dann nichts gepackt werden muss und ich nicht in Platzbedrängnis auf meinem Vmware Server komme.

Gibt es keine vernünftige Möglichkeit einen ganzen Ordner einfach übers Netzwerk nach Windows zu kopieren ?

Samba würde sich da auch anbieten, wenn der Server die Freigabe bekommt.
Dann könnte man das doch theoretisch auch mit nem Windows Script machen oder ?

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 12.11.2006, 20:06

Meine Datensicherung läuft seit Freitag. Bei eienr Probe hat alles gut geklappt.
Ich konnte jede einzelne Maschine in VmWare Workstation einbinden.

Ich werde die Scripte und die Anleitung dafür morgem hier posten.

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 13.11.2006, 09:26

So hier nun die versprochene Anleitung.
Dateianhänge
Datensicherungskonzept für den freien VMWare Server auf Debian Basis.pdf
(17.89 KiB) 77-mal heruntergeladen

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 14.11.2006, 07:18

Das mit den anhängen klappt hier im Forum irgendwie nicht so gut.
Hier ist es ganz normal in Text Form.


Datensicherungskonzept für den freien VMWare Server auf Debian Basis


Nachfolgend wird ein Datensicherungskonzept für einen Vmware Server beschrieben.
Hierbei werden Komplettsicherungen aller Gäste angefertigt, die über ein Netzlaufwerk auf einen Windows Server übertragen werden um zB. Auf Band gesichert werden zu können.
Dafür wird lediglich eine funktionierende Samba Anbindung und Cron benötigt.

Als erstes müssen die Gastsysteme ausgeschaltet werden. Das funktioniert auf 2 verschiedene Wege. Falls auf den Gästen die Vmware Tools installiert sind können sie mit folgendem Befehl in den suspend Modus geschickt werden.

00 01 * * * /usr/bin/vmware-cmd /var/lib/vmware/Virtual\ Machines/VMMASCHINE/VMMASCHINE.vmx suspend

Das versetzt die virtuelle Maschine jeden Tag um 1:00 Uhr Nachts in den Schlaf.

Achtung:
( Die Zeiten sind dabei abhängig vom Zeitpunkt der anderen Sicherungen auf den Windows Servern. Sie sollten nach Möglichkeit nach Dienstschluss, aber vor der täglichen Sicherung auf Band erfolgen.)

Die Uptime geht in der Zeit nicht verloren und es wird an der selben Stelle fortgefahren wo die Maschine vorher beendet worden ist.
Falls das nicht funktionieren sollte kann man alternativ auch die ganze Maschine ausschalten.

00 01 * * * /sbin/init 0

Dadurch wird die virtuelle Maschine um 1:00Uhr Nachts komplett ausgeschaltet.

Nun benötigt man von der Windowsmaschine ein Netzlaufwerk zum VmWare Server in der man Schreibrechte hat.
Über den Taskplaner kann dann der gewünschte Zeitpunkt eingestellt werden in dem folgendes Script zu einem frei wählbaren Zeitpunkt ausgewählt werden kann.


IF EXIST D:\BACKUP\ GOTO ENTFERNEN1

@ECHO Prüfe ob Backupverzeichnis existiert

:ENTFERNEN1

@ECHO Entferne alte Dateien aus dem Backupverzeichnis
@ECHO Alle Meldungen werden unterdrückt.

D:
del /f /q D:\BACKUP\*.*
del /f /q D:\BACKUP\VMMASCHINE\*.*
del /f /q D:\BACKUP\VMMASCHINE2\*.*
del /f /q D:\BACKUP\VMMASCHINE3\*.*


GOTO :BACKUP1

:BACKUP1

@ECHO Kopiere Verzeichnisse vom Netzlaufwerk, des VMWARE
@ECHO Servers. Netzlaufwerk mit Hilfe von Samba hergestellt.
@ECHO Die Option /s ist zum kopieren von ganzen Verzeichnissen
@ECHO Nicht unbedingt notwendig.

Y:
XCOPY /s Y:\Ubuntu\*.* D:\BACKUP\VMMASCHINE\*.*
XCOPY /s Y:\Squid\*.* D:\BACKUP\VMMASCHINE2\*.*
XCOPY /s Y:\nagi\*.* D:\BACKUP\VMMASCHINE3\*.*


Anschließend können die virtuellen Maschinen vom VMWare Server aus wieder per Cron gestartet werden. Der Zeitpunkt muss auch hier wieder durch ausprobieren erforscht werden.



00 04 * * * /usr/bin/vmware-cmd /var/lib/vmware/Virtual\ Machines/VMMASCHINE/ VMMASCHINE start
01 04 * * * /usr/bin/vmware-cmd /var/lib/vmware/Virtual\ Machines/ VMMASCHINE2 / VMMASCHINE2.vmx start
02 04 * * * /usr/bin/vmware-cmd /var/lib/vmware/Virtual\ Machines/ VMMASCHINE 3/ VMMASCHINE3.vmx start


Nun sollte das Backup vollständig funktionieren. Auf diese Weise werden zumindest Vollsicherungen der Gäste angelegt.

Um den Host zu sichern sei hier auf folgende Anleitung verwiesen.

http://www.newbie-net.de/anleitung_backup.html

Member
Beiträge: 152
Registriert: 17.06.2005, 08:18

Beitragvon ioman » 14.11.2006, 10:38

Alternativende hat geschrieben:Falls das nicht funktionieren sollte kann man alternativ auch die ganze Maschine ausschalten.

00 01 * * * /sbin/init 0

Dadurch wird die virtuelle Maschine um 1:00Uhr Nachts komplett ausgeschaltet.


Schaltet das nicht den Host aus? :D
Wenn dann müsste man das ja im Gastsystem machen oder?

Gruß
ioman

Member
Beiträge: 80
Registriert: 23.02.2006, 08:36

Beitragvon Alternativende » 16.11.2006, 20:36

Ich dachte das würde daraus bereits hervor gehen.

Member
Beiträge: 6
Registriert: 27.05.2006, 09:48

Beitragvon lisan » 21.11.2006, 07:23

Ihr muesst die variablen oben im script anpassen.
Das script basiert auf vmware-cmd und rsync.
Es ist bei weitem nicht rund aber ihr koennt es gerne ausbauen, fuer mehr sollte man auf die perl-api zurueckgreifen, der komfort mit vmware-cmd ist begrenzt.

Heinweise!:
Waehrend des backups werden ALLE virtuellen maschinen, die ins backup einbezogen sind suspendet. Es wird NICHT verhindert, dass jemand waehrend des backups maschinen einschaltet!
Keine Historie - es wird ein Spiegel erstellt.

Empfehlenswert ist eine SAN-Anbindung ueber iscsi.

Gruss,
lisan.

Code: Alles auswählen

#!/bin/bash

# /usr/sbin/back_virtual_machines
#
# Script to backup virtual machines.
#
# Written by Arvid Walter <arvid.walter@...>

# NOTE: This script does not prevent users from changing states of
# virtual machines during backup procedures
#

# TODO: - Traps - z.B. rechner wird ausgeschaltet, SIGHUP etc.
#       - mail bei problemen versenden
#       - platte voll
#       - sonstige fehler
#       - IFS local binden
#       x commons script, liste an targets angeben
#           change on 6.9.2006 - Arvid
#       - nur maschinen suspenden, die gerade synchronisiert werden sollen
#      ziemlich schwer, da man erkennen muss, welche maschinen zum
#               synchronisierenden rsyncmodul gehoeren!
#       - Konfigurationdatei fuer mehrere Quelle-Ziel Verbindungen

# the fieldseparator
IFS=$'\n'

VERSION=0.32

SYNC_USER=               # rsynd user
SYNC_PASSWORD=            # rsynd password
SYNC_SRC=<vmwareserver auf dem rsyncd laeuft>            # rsync source host
SYNC_DEST="/var/lib/vmware/VirtualMachines2/"   # rsync destination
RSYNC_OPTIONS="--log-format='%t %o %f'"      # misc options for rsync
RSYNC_TARGETS="project1 project2"      # specifies the targets to sync to

MAINTAINER="arvid.walter@..."      # maintainer address

VM_PASS=""            # vmware-server ROOT password
VM_USER="root"               # admin account for the vmware-server
VM_HOST=${SYNC_SRC}            # vmware-server ip or hostname

LOG="/var/log/backup"            # log file

# dependencies
# Ensure all of there are available in ur environment
VM_CMD=/usr/bin/vmware-cmd         # vmware-cmd
AWK=/usr/bin/awk            # awk
RSYNC=/usr/bin/rsync            # rsync client

# check if vmware-cmd is avaible
[ -x ${AWK} -a -x ${VM_CMD} -a -x ${RSYNC} ] || echo "Missing component, check dependencies" || exit 0

function usage()
{
cat << EOF
Usage: backup_virtual_machines [OPTION] {start}...
(Backups all installed vitual machines).

Mandatory arguments to long options are mandatory for short options too.
  -s   shutdown vmware server to prevent users
       from switching machines on while backup is running .
  -h   display this help and exit
  -l   prints out a list affected virtual machines
       or 'actually: what can I sync'
  -v   output version information and exit
EOF
}

# this function checks the state of a virtual machine
# on HOst ${VM_HOST} for user ${VM_USER} with users password ${VM_PASS}
# @return 0: on, 1: suspended, 2: off, -1: unknown
checkstate() {
   if [ x"$1" == "x" ]; then
      echo "FATAL: Please input a virtual machines config file"
      return "-1"
   fi
   
   case `${VM_CMD} \
      -U ${VM_USER} \
   -P ${VM_PASS} \
   -H ${VM_HOST} \
      $1 getstate|awk '{ print $3 }'` in \
      on )
         return 0
         ;;
      suspended )
         return 1
         ;;
      off )
         return 2
         ;;
      * )     return -1;
         ;;
      esac
# prevent checkstate from unknown states
return -1
}

# Sets the state of a virtual machine $1 to $2
# returns 0: on success, 1: on unknown states, 2: state change errors
setstate() {
   local machine="$1"  # a virtual machines config file
   local newstate="$2" # the state to switch to

   if [ x"$machine" == "x" ]; then
      echo "FATAL: Please input a virtual machines config file"
      return "-1"
   fi
   if [ x"$newstate" == "x" ]; then
      echo "FATAL: Please input a state"
      return "-1"
   fi

   case ${newstate} in
      start | stop | suspend ) ${VM_CMD} \
                -U ${VM_USER} \
                -P ${VM_PASS} \
                -H ${VM_HOST} ${machine} ${newstate}
                return ${?}
   ;;
   * ) echo "Cannot not state to ${newstate}, cause it is unknown."
       return 1
   ;;
   esac

return 0;
}

# This one suspends running machines
# state[] will hold all suspended machines
suspend_machines() {
  # suspend running machines
  for machine in `${VM_CMD} \
   -U ${VM_USER} \
   -P ${VM_PASS} \
   -H ${VM_HOST} -l`; do
   if checkstate ${machine}; then
      # remember this machine
      state[${#state[@]}]=${machine}
      # suspend machine
      if ! setstate ${machine} suspend; then
            echo "Cannot suspend virtual machine $machine : " `basename ${machine}`
            return 1
      fi
   fi
  done
return 0
}

# This funtion triggers machines that
# have been suspended by suspend_machine using
# state[]
wakeup_machines() {
  # restart formaly running machines
  for machine in ${state[@]}; do
   # check state
   checkstate ${machine}
   if [ $? == 1 ]; then
     if ! setstate ${machine} start; then
      echo "Cannot start virtual machine : `basename ${machine}`"
     fi
   else
      # the state changed while the script is running
      echo "FATAL: State changed while script is running"
   fi
  done
}

# This function runs data synchronisation
# using SYNC_SRC and SYNC_DEST as source and
# destination
sync() {
  local IFS=" "
  for target in ${RSYNC_TARGETS}; do
    echo "syncing $target ..."
    RSYNC_PASSWORD=${SYNC_PASSWORD} rsync -avz ${RSYNC_OPTIONS} \
         ${SYNC_USER}@${SYNC_SRC}::${target} \
       ${SYNC_DEST}/${target}
  done
}

# prints a list of all files in a module
list() {
# check existence
  for target in ${RSYNC_TARGETS}; do
     # dive recursively into directories
   RSYNC_PASSWORD=${SYNC_PASSWORD} rsync -r\
      ${SYNC_USER}@${SYNC_SRC}::${target}\
      |grep \.vmx$\
      |${AWK} '{ vmname=""; for (i=5; i<=NF; i++) vmname=vmname$i; print vmname }';
  done
}

backup() {
  suspend_machines
  if [ "$?" != 0 ]; then
     echo "FATAL: Cannot suspend a machine - i wont sync"
  else
     sync
  fi
  wakeup_machines
echo
}

while getopts hvls: options; do
   case $options in
      h) # call for help
         usage
    exit 0
         ;;
      s) # shutdown vmware server flag
         echo "Presently shuting down a remote vmware server is not implemeted yet. Stay tuned."
    exit 2
    ;;
      v) # version info
         echo ${VERSION}
    exit 0
    ;;
      l) # list available targets
         rsync ${SYNC_SRC}::
    exit 0
    ;;
      *) # unknown option
         usage
    exit 1
         ;;
   esac
done

case $1 in
   start)
     backup
     ;;
   *)
     echo "Unkown comand >$1<"
     usage
     exit 1
     ;;
esac


rsyncd conf auf dem vmware-server

Code: Alles auswählen

uid = root
gid = root
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
hosts allow = <ip des backup hosts>
slp refresh = 300

[vmwareimages]
        path = /var/lib/vmware/Virtual Machines
        comment = all vmware images
        auth users = admin
        secrets file = /etc/rsyncd.secrets

[project1]
        path = /var/lib/vmware/Virtual Machines/Project1
        comment = Project1 Server
        auth users = admin
        secrets file = /etc/rsyncd.secrets

[project2]
        path = /var/lib/vmware/Virtual Machines/Project2
        comment = Project2 Server
        auth users = admin
        secrets file = /etc/rsyncd.secrets


crontab

Code: Alles auswählen

30 0 * * * root backup_target.sh start >/dev/null 2>&1


Zurück zu „VMserver 1 und GSX“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste