Automatische Backups von virtuellen Maschinen

Gestern saß ich an einem Skript, welches mir automatisch meine virtuellen Maschinen sichern sollte. Das Problem dabei war allerdings, dass die Variante mit dem xe vm-export Kommando erforderlich macht, die VM vorher herunter zu fahren. Auf der Suche nach einer besseren Lösung für dieses Problem z.B. über die Snapshot Funktion vom XenServer 5.5, bin ich auf ein Skript von Andy Burton gestoßen. Dieses kleine Skript sichert, gesteuert über eine Config-Datei, alle oder nur bestimmte virtuelle Maschinen als Snapshot auf z.B. ein Windows File Share. Zusammen mit einem Cron Job eine schlanke und sehr nützliche Lösung, die ich nachfolgend mal genauer beschreibe.

Backup einrichten

Das Linux in der Domäne 0 sowie die XENAPI bieten uns hier ideale Möglichkeiten. Zuerst benötigen wir ein Netzwerkshare in dem wir unsere Backups speichern können. Linux hat hier den Vorteil, dass es Netzwerkfreigaben wie normale Verzeichnisse in das System einbinden kann. Für viele wird hier ein freigegebener Ordner auf einem Windows Host die einfachste Lösung sein, es geht aber auch mit NFS Freigaben. Wie das Mapping eines Windows Shares funktioniert habe ich zwar hier schon beschrieben, aber das folgende Skript ist hier soviel wie eine Advanced Version davon.

Wenn wir ein Share auf einem Windows Server angelegt haben (Rechte beachten), müssen wir uns diese Freigabe noch mit der XenServer Console mappen. Hierfür verbinden wir uns mit SSH auf unseren XenServer (oder mit der xsconsole) und legen uns ein neues Verzeichnis an, das die Windows Freigabe auf dem XenServer repräsentieren soll.

[root@xenserver /]# mkdir /backup

Danach mounten wir uns die Windows Freigabe mit folgendem Kommando:

[root@xenserver /]# mount -t cifs "//192.168.0.1/backup" -o username=user,password=passwort /backup

Die Bezeichnung der Freigabe und die IP-Adresse des Windows Server müssen natürlich an die Gegebenheiten angepasst werden. Wichtig jedoch ist, dass wir einen Slash (/) statt dem sonst üblichen Backslash (\) verwenden müssen.

Wenn es keine Fehlermeldung gab, sollte der Ordner jetzt vom XenServer aus genutzt werden. Überprüfen können wir das mit dem Kommando mount, das dann in etwa folgende Ausgabe liefert:

[root@xenserver /]# mount | grep backup
//192.168.0.1/backup on /backup type cifs (rw,mand)
[root@xenserver /]#

Nun müssen wir uns an das eigentliche Skript machen. Hierfür legen wir noch einen Ordner an, in dem wir unser Skript ablegen. Das machen wir wie folgt:

[root@xenserver /]# mkdir /home/backup
[root@xenserver /]# cd /home/backup
[root@xenserver backup]# wget http://www.andy-burton.co.uk/files/xenserver_backup/xenserver_backup.tar.gz
...
23:45:25 (12.9 MB/s) - `xenserver_backup.tar.gz' saved [3181/3181]
[root@xenserver backup]# tar -xzf xenserver_backup_3.0.tar.gz
[root@xenserver backup]# chmod 700 vm_backup.*

Nur noch einmal zur Erklärung. In der erste Zeile legen wir ein Verzeichnis backup unter dem Verzeichnis home an. Zeile zwei wechselt dann mit einem cd in das neue Verzeichnis und Zeile drei holt dann mit einem wget das gepackte Skript von Andy Burton's Website. Nachdem das Skript heruntergeladen wurde, entpacken wir die Skriptdateien in Zeile 4 in das aktuelle Verzeichnis (also /home/backup). Abschließend in Zeile fünf geben wir dem User root noch alle Rechte für die Skripte.

Die Konfigurationsdatei passt eigentlich schon, wenn ihr euch an die Anleitung gehalten habt. Werfen wir doch mal einen Blick in die Datei vm_backup.cfg.

[root@xenserver backup]# cat vm_backup.cfg

Folgendes sollte dann zu sehen sein:

[root@xenserver backup]# cat vm_backup.cfg
#!/bin/bash
#
# Citrix XenServer 5.5 VM Backup Config
# This script contains config settings used by the VM backup script
#
# @version      3.01
# @created      24/11/2009
# @lastupdated  01/12/2009
#
# @author       Andy Burton
# @url          http://www.andy-burton.co.uk/blog/
# @email        andy@andy-burton.co.uk
#

#
# Settings
#

# Set log path

log_path="/home/backup/vm_backup.log"

# Enable logging
# Remove to disable logging

log_enable

# Local backup directory
# You can link this to a Windows CIFS share using the blog article

backup_dir="/backup/"

# Backup extension
# .xva is the default Citrix template/vm extension

backup_ext=".xva"

# Which VMs to backup. Possible values are:
# "all" - Backup all VMs
# "running" - Backup all running VMs
# "list" - Backup all VMs in the backup list (see below)
# "none" - Don't backup any VMs, this is the default

backup_vms="running"

# VM backup list
# Only VMs in this list will be backed up when backup_ext="list"
# You can add VMs to the list using: add_to_backup_list "uuid"

# Example:
# add_to_backup_list "2844954f-966d-3ff4-250b-638249b66313"

# Current Date
# This is appended to the backup file name and the format can be changed here
# Default format: YYYY-MM-DD_HH-MM-SS

date=$(date +%Y-%m-%d_%H-%M-%S)
[root@enserver backup]#

Zum editieren dieser Datei stehen zwei Editoren zur Verfügung. Für den Fortgeschrittenen User der vi Editor (vi vm_backup.cfg) und für alle anderen der nano Editor (nano vm_backup.cfg). Welchen ihr davon benutzt bleibt euch überlassen. Da die Konfigurationsdatei eigentlich gut dokumentiert ist, gehe ich nicht weiter darauf ein.

In der Standardeinstellung sichert das Skript alle VM's die den Status „running“ haben. Welche das genau sind bekommt ihr mit folgendem Kommando raus:

xe vm-list power-state=running

Bei der Ausgabe werdet ihr feststellen, dass die „Control domain on host: xenserver“ ebenfalls aufgeführt wird. Das Skript fragt jedoch den Namen ab und übergeht die Domäne 0 beim Backup. Wenn jetzt alles stimmt, können wir das Backup starten. Das geschieht mit dem folgenden Kommando:

[root@xenserver backup]# ./vm_backup.sh

Auf der Console passiert jetzt erstmal eine ganze Weile nichts mehr. Aber in dem Windows Share sollte schon die erste .xva Datei auftauchen. Zusätzlich wird im gleichen Verzeichnis noch eine Log-Datei angelegt, die im Fehlerfall sehr hilfreich sein kann.

Hier ist aber noch nichts automatisiert. Wenn wir automatisch z.B. am 1 Tag des Monats diese virtuellen Maschinen sichern möchten, brauchen wir noch einen Cron Job. Auch dieser ist relativ schnell angelegt. Am Prompt geben wir einfach folgendes ein:

[root@xenserver backup]# crontab -e

Leider öffnet der sich die Crontab Datei im vi Editor, der für nicht UNIX Admins etwas schwer zu bedienen ist. Zuerst betätigen wir die Taste [i] um in den Insert-Mode zu kommen. Danach geben wir die folgende Zeile ein (die kleinen Punkte (⋅) sind Leerzeichen):

0⋅0⋅1⋅*⋅*⋅/home/vm_backup⋅>>⋅/home/vm_backup.log⋅2>&1

Die ersten 5 Zeichen (0⋅0⋅1⋅*⋅*) repräsentieren Minute⋅Stunde⋅Tag des Monats⋅Monat⋅Tag der Woche (0-6 - 0=Sonntag). Danach folgt das Skript das ausgeführt werden soll und mit » die Ausgabe in ein Logfile. Mehr über crontab ist hier zu finden.

Abschließen müssen wir die Zeile noch mit einem Return. Danach drücken wir die Taste [ESC] um wieder in den Befehlsmodus zu kommen und geben folgendes ein um die Datei zu speichern und den vi Editor zu beenden:

:wq

Das war es auch schon. Ab sofort sichert der XenServer jeden 1. des Monats alle VM's die den Status „running“ haben.

xenserver/vmbackupht.txt · Zuletzt geändert: 08.02.2011 - 11:32 von Thomas Krampe
Sie befinden sich hier: Willkommen im Xenmaster WikiCitrix XenServerAutomatische Backups von virtuellen Maschinen