Automatische inkrementelle Backups von OpenVZ VE
OpenVZ bietet von sich aus keine Methode um die Virtuellen Maschinen (VE) sinnvoll zu sichern. Allerdings sind die VEs vom Hauptsystem aus gesehen nichts anderes als “normale” Ordner. Sofern man die VE stoppt, kann man auf diesen Dateien auch ohne Probleme ein Backup starten.
Nun will man aber bekannterweise für ein Backup den Server nur kurz oder am Besten überhaupt nicht herunterfahren. Die optimale Lösung mit nicht herunterfahren war mir zu stressig, für das nur kurz herunterfahren war aber schnell die Lösung gefunden: rsync mit dem Parameter –link-dest. So muss ich nur einmal ein volles Backup ziehen und rsync erzeugt bei allen darauffolgenden Backups Hardlinks im Dateisystem und reduziert so ganz nebenbei auch noch den Platzbedarf für die Backups. Trotzdem sieht jeder Backupordner wie ein vollständiges Backup aus.
Um das ganze jede Nacht zu automatisch laufen lassen zu können, habe ich noch eine kleine Schleife um das eigentliche Backup gebaut, die die aktuell laufenden VEs automatisch findet und sichert. Aktuell nicht aktive VEs werden auch nicht gesichert, an ihnen werden ja auch keine Änderungen durchgeführt. Sollte also eine VE dazu kommen, so wird in der darauf folgenden Nacht automatisch ein Full-Backup der VE geschrieben und solange die VE aktiv ist diese auch automatisch inkrementell gesichert.
[CODE]
#!/bin/bash
DATUM=`date +%F`;
VZ_HOME=/vz/private
BKP_BASE=/backup/virtual
LAST_RUN=`cat $BKP_BASE/lastRun.date`
for veid in `ls $VZ_HOME`;
do
if [ `vzctl status $veid | awk '{print $5}'` == "running" ]; then
if [ ! -d $BKP_BASE/$veid ]; then
mkdir -p $BKP_BASE/$veid;
fi;
echo “Backing up VE $veid”;
BKP_PATH=”$BKP_BASE/$veid/$DATUM”;
vzctl stop $veid;
rsync -a –delete –link-dest=$BKP_BASE/$veid $LAST_RUN $VZ_HOME/$veid/ $BKP_BASE/$veid/$DATUM;
vzctl start $veid;
fi;
done;
echo $DATUM > $BKP_BASE/lastRun.date
[/CODE]
Was noch fehlt ist ein Script, dass die angelegten Daily Backups ausdünnt und so Monthly und Yearly Backups anlegt. Die Ordner der Daily Backups können einfach gelöscht werden, da verlinkte Dateien erst vom Dateisystem verschwinden, wenn der letzte Link gelöscht wurde…
























Marc sagt
am 4. Dezember 2007 @ 11:44
Allein weil du awk nutzt bist du mögig ^^
Stefan sagt
am 5. Dezember 2007 @ 07:39
Wieso ohne vi, grep, awk, sed und die vielen anderen Helferlein in einer richtigen Shell wäre das Leben doch unerträglich mühsam.
grep und awk sind die Datenbankabfragen des kleinen Mannes.
Kir Kolyshkin sagt
am 5. Dezember 2007 @ 11:21
Nice and clean script, thanks!
May I suggest using something like
vzlist -o veid -H
for getting the list of running VEs? It will work better since not all VEs may reside in $VE_HOME.
Also, to get VE_PRIVATE for each VE, you have to set VEID and then source /etc/vz/vz.conf and /etc/vz/conf/$VEID.conf (in that order).
Finally, there’s a vzdump script you might want to take a look at: http://www.proxmox.com/cms_proxmox/en/virtualization/openvz/vzdump/
PS sorry ich bin nicht sprechen sie deutsche, read this page using google translate.
Patrick Seeger sagt
am 5. Dezember 2007 @ 12:05
Thanks for the hints, I’ll use them for a later version if I ever do one
vzdump does not really do what I want to achieve. It dumps the vz (normally by using rsync like I do) and packs it into a tar file. Including the configuration.
My script also uses rsync, but for a different storage. It stores the backups incremetally on a separate disk using hard links to save space on the disk. This would not really be possible if I’d use vzdump.
If you have any problems with the article, I could try to make a clean translation