Backup und Restore¶
Als Erstes kümmern wir uns um ein Notfall-Backup des KVM-Servers selbst. Dieses sollte immer dann erstellt/erneuert werden, wenn es größere Veränderungen am Server gegeben hat. Also genau jetzt! ;-)
In unserem Beispiel ist die Backup-Platte direkt am Server angeschlossen. Für die Praxis ist sicherlich eine externe USB3 HDD zu empfehlen, die direkt an den KVM-Server angeschlossen wird.

Notfallbackup des KVM-Servers¶
Das Backup wird mit Hilfe von CloneZilla erstellt. Hier nutzen wir die Funktionalität, ganze Platten in ein Image zu schreiben. Das ISO-Image wird auf einen USB-Stick geschrieben, der auch als Bootmedium genutzt wird (z.B. mittels dd ).
Im nächsten Schritt bereiten wir die Backup-HDD vor, indem wir diese Partitionieren und Formatieren.
Hinweis
ACHTUNG Dabei gehen alle vorhandenen Daten auf der Platte verloren!
Partitionieren
# fdisk /dev/sdX
Formatieren
# mkfs.ext4 /dev/sdX1
Alle Vorbeitungen sind getroffen und das Backup kann erstellt werden.
Hinweis
Der Screencast erstellt das Backup noch ohne die ipfire und server VM-LVMs. Sind Diese vorhanden, dauert der ganze Vorgang natürlich entsprechend länger.
Notfallrestore des KVM-Servers¶
Im Falle eines Totalverlustes des KVM-Servers kann Dieser einfach neu installiert werden. Schneller geht es aber mit dem gerade erstellten Backup. Dieses wird die komplette HDD inklusive Bootsektor und LVM wiederherstellen.
Hinweis
ACHTUNG Dabei gehen alle vorhandenen Daten auf der Platte verloren!
Backup der VMs ipfire und server¶
Die virtuellen Maschinen werden als Ganzes gesichert. Ein Backup besteht dabei aus Kopien der virtuellen Festplatten und der Konfigurationsbeschreibung. Erstellt wird das Backup im laufenden Betrieb mit Hilfe eines LVM-Snapshots. Damit das auch funktioniert, sollten immer noch 10-20 % Platzreserve in der Volumen-Group vorhanden sein.
Hinweis
Niemals den gesamten Platz virtuellen Festplatten zuweisen.
Das Backup sollte jedes Wochenende ausgeführt werden, da es je nach Größe der virtuellen Festplatten länger dauern kann.
Die Kopien der virtuellen HDDs werden mit der lzop Kompression gesichert. Damit sollte eine Platzersparnis von bis zu einem Viertel der Originalgröße zu erreichen sein ohne die Backupzeit zu sehr zu verlängern.
In unserem Fall wird die Backup-Platte direkt an den Server angeschlossen. Weitere Möglichkeiten sind USB3-Platten oder NFS-Dateifreigaben auf einem NAS.
Als Backup-Tool verwenden wir virt-backup .
Installation der Backupsoftware
Paketabhängigkeiten:
# apt-get install libxml-simple-perl libsys-virt-perl lzop
Installation z.B. nach: /usr/local
Entpacken des Archivs
# cd /usr/local
# tar -xzvf virtbackup-xxx.tar.gz
# ln -s virt-backup virt-backup-xxx
# cd virt-backup
# chmod ugo+x virt-backup
Erstellen eines Aliases
# cd /usr/local/bin
# ln -s /usr/local/virt-backup/virt-backup
Erstellen eines Backup-Ordners
# mkdir /media/virt-backup
Mounte Backup-HDD
# mount /dev/sdx1 /media/virt-backup
Erstelle Ordner fuer VMs
# mkdir /media/virt-backup/VMs
Unmounte Backup-HDD
# umount /media/virt-backup
Optional: Testen des Backups von Hand
Mounte Backup-HDD
# mount /dev/sdx1 /media/virt-backup
Test Backup ipfire
# virt-backup --vm=ipfire --debug --no-offline --compress=lzop --blocksize=4M --backupdir=/media/virt-backup/VMs/
Test Backup server
# virt-backup --vm=server --debug --no-offline --compress=lzop --blocksize=4M --backupdir=/media/virt-backup/VMs/
Loesche Backup ipfire
# virt-backup --vm=ipfire --debug --cleanup --backupdir=/media/virt-backup/VMs/
Loesche Backup server
# virt-backup --vm=server --debug --cleanup --backupdir=/media/virt-backup/VMs/
Unmounte Backup-HDD
# umount /media/virt-backup
Erstellen eines Backup-Skriptes
Erstellen der Datei z.B. mittels vi
# vi /root/virt-backup.sh
#!/bin/bash
source /root/.profile
# Mounte Backup-HDD
mount /dev/sdx1 /media/virt-backup
# Loesche altes Backup ipfire
/usr/local/bin/virt-backup --vm=ipfire --debug --cleanup --backupdir=/media/virt-backup/VMs/
# Backup ipfire
/usr/local/bin/virt-backup --vm=ipfire --debug --no-offline --compress=lzop --blocksize=4M --backupdir=/media/virt-backup/VMs/
# Loesche altes Backup server
/usr/local/bin/virt-backup --vm=server --debug --cleanup --backupdir=/media/virt-backup/VMs/
# Backup server
/usr/local/bin/virt-backup --vm=server --debug --no-offline --compress=lzop --blocksize=4M --backupdir=/media/virt-backup/VMs/
# Unmounte Backup-HDD
umount /media/virt-backup
Skript ausführbar machen
# chmod ugo+x /root/virt-backup.sh
Erstellen eine Crontab-Jobs
# crontab -e
# VM Backup Samstags 20 Uhr
0 20 * * 6 /root/virt-backup.sh > /root/virt-backup.log 2>&1
Hinweis
Wichtig ist es, eine Leerzeile nach Definition des Jobs einzufügen. Ansonsten wird der Auftrag nicht ausgeführt.
Naürlich muss die Swap-Partition des servers nicht gesichert werden. Also einfach im Backup-Skript ausklammern! Kleine Hausaufgabe [1] … ;-)
Ein Log des Backups ist unter /root/virt-backup.log
zu finden.
Restore der VMs ipfire und server¶
Jedes Backup ist nur ein Backup, wenn Du sicher sein kannst, dass auch ein Restore funktioniert. Exemplarisch werden wir ein Restore bei der Firewall ipfire durchführen, sowohl der gesamten VM als auch einzelner Dateien der virtuellen Festplatte.
Hinweis
Es ist sinnvoll, dass Zurückspielen der virtuellen HDDs einer VM in einer Screen-Session durchzuführen. Da der Vorgang u.U. sehr lange dauert, kann die Sitzung verlassen werden, ohne das es zum Abbruch des Befehles kommt (Gleiches Prinzip wie bei linbo-remote …).
Die wichtigsten Dinge dabei sind(KVM-Server):
Installation notwendiger Pakete
# apt-get install kpartx pv
Optional: Anlegen eines Restore-Verzeichnisses
# mkdir /media/virt-restore
Mounten der Backup-HDD
# mount /dev/sd1X /media/virt-restore
Beim Restore ist es wichtig, dass die betroffene VM heruntergefahren ist. DES WEITEREN GEHEN ALLE VORHANDENEN DATEN VERLOREN!
Restore der virtuellen HDD am Beispiel der Firewall
Aufruf Screen
# screen
Starten des Restores
# lzop -dc /media/virt-restore/VMs/ipfire/ipfire_vda.img.lzo |pv -s 50G |dd of=/dev/kvm-vg/ipfire bs=4M
Allgemein
# lzop -dc <Quelle> |pv -s <Groesse der HDD> |dd of=<Ziel> bs=4M
Die Screen-Sitzung kann mit STRG+A+D beendet werden. Gestartet wird die Sitzung mit:
Finden der ID
# screen -ls
Öffnen der Sitzung
# screen -r <ID>
Hinweis
Im Screencast wird die komplette VM gelöscht. Dies ist nicht notwendig! Man kann aber … ;-)
Nachdem die HDD wiederhergestellt wurde, muss, nur falls nicht mehr vorhanden, die Definition der VM auch wiederherstellt werden.
Wiederherstellen der VM-Definition
# virsh define /media/virt-restore/VMs/ipfire/ipfire.xml
Allgemein
# virsh define <Name>.xml
Hinweis
Falls die VM neben einer vorhanden VM wiederhergestellt werden soll, muss in der XML-Datei der Name geändert werden, sowie die vorhanden MAC-Adressen der Netzwerkkarten und die UUID gelöscht werden. Die MAC-Adressen und die UUID werden dann beim Import neu generiert. Wenn Du ganz sicher gehen willst, kannst Du zusätzlich im Virt-Manager die Netzwerkkarten auch noch deaktivieren.
---snip---
# Ändern
<name>ipfire</name>
# Löschen
<uuid>0fa619e6-32e7-44e4-be31-920696bab268</uuid>
<mac address='52:54:00:49:20:91'/>
Lokales Einbinden der VM HDDs auf dem KVM-Server
Um einzelne Dateien wiederherzustellen, ist es möglich, die virtuellen Festplatten lokal auf dem KVM-Server zu mounten (Die HDD darf natürlich nicht aktiv sein).
# lvscan
Sichtbar machen der Partitionen
# kpartx -a /dev/mapper/kvm--vg-ipfire
Allgemein
# kpartx -a <HDD> oder auch <RAW Image>
Optional: Anlegen eines Verzeichnisses
# mkdir /media/HDD-restore
Mounten einer Partition
# mount /dev/mapper/kvm--vg-ipfire1 /media/HDD-restore
Unmounten einer Partition
# umount /media/HDD-restore
Freigeben der Partitionen der HDD
# kpartx -d /dev/mapper/kvm--vg-ipfire
Allgemein
# kpartx -d <HDD> oder auch <RAW Image>
[1] | /usr/local/bin/virt-backup –vm=server –debug –no-offline –compress=lzop –blocksize=4M –exclude=vdb –backupdir=/media/virt-backup/VMs/ |