Xen Server 5.5 – Virtuelle Maschinen über Snapshots sichern

Letzte Woche haben wir unsere Xen-Server-Farm auf die aktuelle Version 5.5 hochgezogen. Herausragendste Merkmale des aktuellen Virtualisierers sind imho v.a. das Workload-Loadbalancing, die “native” Unterstützung unseres SAN sowie die Möglichkeit, Snapshots von laufenden virtuellen Maschinen anzulegen.

So ist es endlich möglich, automatisiert Backups der Server anzulegen. Ich habe für unsere Umgebung ein kleines Sicherungsscript erstellt, das für einen Server einen Snapshot anlegt, aus diesem eine virtuelle Maschine generiert, und diese in einen NFS-Share wegsichert:

#!/bin/bash

### Backup einer virtuellen Maschine in NFS-Share
# $1 – Name der zu sichernden Maschine
#
# (w) 07/2009 Stefan Peters
#

PATH=/opt/xensource/bin:/sbin:/bin:/usr/bin:$PATH

# Variablen definieren
BACKUP_SHARE=server:/var/nfsshare
BACKUP_DIR=/media/backup

DATUM=$(date +%F)

logger -s “Backup VM ${1} – Backup gestartet”

# Existiert das Zielverzeichnis für den NFS-Mountpoint?
if [ ! -d ${BACKUP_DIR} ]; then
mkdir -p ${BACKUP_DIR}
fi

# pruefen, ob die NFS-Freigabe fuer die Backups gemountet ist und ggf. einhaengen
mount |grep ${BACKUP_DIR} >/dev/null
if [ "$?" -ne "0" ]; then
mount.nfs $BACKUP_SHARE $BACKUP_DIR 2>/dev/null
if [ "$?" -gt "0" ]; then
logger -s “Backup VM ${1} – Backup-Share konnte nicht gemounted werden”
exit 1
fi
fi

# pruefen, ob die zu sichernde VM existiert
xe vm-list |egrep “RW\): ${1}$” >/dev/null
if [ "$?" -ne "0" ]; then
logger -s “Backup VM ${1} – VM existiert nicht”
exit 1
fi

# Snapshot erstellen
strSnapshot=$(xe vm-snapshot vm=${1} new-name-label=${DATUM}_${1})

# Snapshot zu VM wandeln
xe template-param-set is-a-template=false uuid=${strSnapshot}

# Snapshot sichern
BACKUP_VM=${BACKUP_DIR}/${1}.xva
BACKUP_VM_OLD=${BACKUP_VM}_TMP

if [ -f "${BACKUP_VM}" ]; then
mv “${BACKUP_VM}” “${BACKUP_VM_OLD}”
fi

xe vm-export vm=${strSnapshot} filename=”${BACKUP_VM}”
if [ "$?" -ne "0" ]; then
logger -s “Backup VM ${1} – Backup fehlgeschlagen”
else
rm “${BACKUP_VM_OLD}”
logger -s “Backup VM ${1} – Backup erfolgreich abgeschlossen”
fi

# Snapshot loeschen
xe vm-uninstall uuid=${strSnapshot} force=true

# Backup-Share unmounten
umount $BACKUP_DIR 2>/dev/null

exit 0

Dem Script wird als Parameter der Name der zu sichernden Maschine mitgegeben.

Wenn bereits eine Sicherung der betreffenden Maschine existiert, so wird diese zunächst umbenannt und erst nach dem erfolgreichem Abschluss der Serversicherung gelöscht.

Über Stefan

Meine Leidenschaft, sowohl im beruflichen als auch im privaten Bereich, gilt seit mittlerweile über 15 Jahren Linux-Systemen. Einen speziellen Schwerpunkt in diesem Bereich habe ich nicht - nur Debian-basiert sollte es sein.
Dieser Artikel wurde in #!/bin/bash, Linux veröffentlicht.Permalink als Favorit speichern.

11 Antworten zu Xen Server 5.5 – Virtuelle Maschinen über Snapshots sichern

  1. Pingback: Yet another Linux Blog » Blog Archive » Xen-Snapshots ballern Storage zu

  2. Pascal Schwarz schreibt:

    sehr schön, ich habe praktisch genau das selbe script geschrieben, aber ohne den trick mit xe template-param-set is-a-template=false.

    ich möchte das ganze aber noch so erweitern, dass die images/xva’s direkt komprimiert werden. da template-export aber weder in fifos (siehe http://pascal-schwarz.ch/blog/index.php/2009/08/28/compression-using-fifos/) noch nach stdout schreibt, sehe ich dafür irgendwie keine lösung… hast Du da evtl noch ne idee?

  3. Stefan schreibt:

    @Pascal:

    So adhoc fällt mir da jetzt auch keine Lösung ein. Einzig ein komprimierendes Filesystem auf dem Backup-Datenträger wäre wohl möglich. Da gibt es beispielsweise compFUSEd (http://freshmeat.net/projects/compf/).

    Aber ob das wirklich sinnvoll ist, steht auf einem anderen Blatt. Und außerdem scheint compFUSEd auch seit 2007 nicht mehr weiterentwickelt worden zu sein – auch wenn Anfang 2008 noch durchzuführende Arbeiten an dem Projekt angegeben wurden.

    Ich sehe aber mal, ob ich da eine andere Lösung finde.

    Gruß
    Stefan

  4. Pascal Schwarz schreibt:

    Ich habe dazu auch fusecompress gefunden, das scheint mir neuer und funktioniert bei mir auf Ubuntu ziemlich gut. Im XenServer installieren ist mir bisher aber noch nicht gelungen.
    Es ist auch nicht soooo wichtig, einfach dünkts mich Schade, soviel Speicherplatz zu “verschwenden”, schliesslich lassen sich die XVA’s doch sehr gut komprimieren, in meinen Tests mit 7Zip und LZMA (OK, das ist ziemlich stark komprimiert), zwischen 30 und 80% Platzersparnis.

  5. Engwuck schreibt:

    Wunderbares Skript, hab’s gleich mal bei uns eingeführt :) Wieso sowas nicht gleich von Citrix mitgeliefert wird…

    Eine Änderung habe ich eingeführt: auf “meinem” Speichermedium (Thecus 8800) wird die .xva als root:root anelegt mit Zugriffsrechten, die es bei Zugriff über CIFS für “Otto Normaladmin” unsichtbar bleiben lassen. also einfach vor dem “Backup erfolgreich abgeschlossen” noch ein chmod 644 eingefügt. Damit kann ich’s dann auch wieder einfacher über die graphische Oberfläche reimportieren….

    Hat es einen Grund, wieso das Skript das Backup-Share nicht wieder umounted?

  6. Stefan schreibt:

    @Engwuck:

    stimmt, der Unmount fehlte. Habe ich berichtigt. Vielen Dank.

    Gruß
    Stefan

  7. kossmac schreibt:

    @Engwuck
    sowas liefert Citrix schon mit, allerdings lassen sie sich diesen Service etwas kosten: Scheduled Backups etc.

  8. bp schreibt:

    Besten Dank. Genau nach so was hatte ich gesucht :)

  9. Darko Hojnik schreibt:

    Hi

    Sieht ja nett aus :)
    Ist das mittlerweile auch mit der OpenSource Version von XEN möglich?

    Derzeit experementiere ich mit nativem ZFS unter Linux. ZFS kann Kompression. Reiser4 auch. Nebenbei bemerkt.

  10. Stefan schreibt:

    @Darko:

    Die Open-Source-Variante unterstützt das imho zur Zeit noch nicht. Da würde ich wohl LVM-Snapshots machen.

    Gruß
    Stefan

  11. Lucas schreibt:

    Wie performant ist den das? Wenn ich jetzt 120 VMs auf meinem BB laufen hab und dann das Skript ausführe, kann es da zu Lags oder Problemen kommen?

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>