20.06.2014

Einfaches Backup von QCOW2 basierten KVM Maschinen

Dieser Blogeintrag erweitert grundsätzlich den Blogeintrag Backups mit (externen) Snapshots mittels KVM unter Ubuntu 14.04 um ein in der Praxis einfach zu verwendendes Script, um KVM Maschinen bequem zu sichern.

Umgebung

Sämtliche Informationen gelten für folgende Testumgebung:

  • Ubuntu 14.04 64bit Server
  • Single Host
  • Disk format: qcow2
  • Um die Snapshots sinnvoll zu speichern wird ein externer Speicher benötigt. Am einfachsten ein NAS, welches via NFS o.Ä. auf dem Host gemountet wird.

Das Script wurde schlussendlich nur mit Ubuntu 14.04 getestet, sollte jedoch auf sämtlichen KVM/libvirt betriebenen Systemen laufen.

Backup erstellen

Das Script bkvm von Luca Lazzeroni, habe ich ein wenig erweitert, damit dieses nun das Sichern von KVM-Maschinen unterstützt, welche sich nicht im Status 'running' befinden. Normalerweise verwendet das Script die virsh Funktion blockcopy. Weil sich dieser jedoch weigerte, ein offline Image zu kopieren, übernimmt dies nun halt das gute alte rsync.

Das Backup wird durch den Aufruf des Scripts gestartet:

/bin/bash bkvm.sh <VMName>

Es erstellt am angegeben Speicherort folgende Ordnerhierarchie:

Backupdir
├── example
│   ├── backup-0
│   │   ├── example-memory
│   │   ├── example.qcow2-backup.qcow2
│   │   └── example.xml
│   ├── backup-1
│   │   ├── example-memory
│   │   ├── example.qcow2-backup.qcow2
│   │   └── example.xml

Sofern eine Mailadresse angegeben ist, wird eine Mailbenachrichtigung versendet; inklusive Information im Subject, ob das Backup funktioniert hat.

Meine bkvm_extended-Version gibt es auf meinem Github-Account. Verbesserungen, etc. werden selbstverständlich gerne angenommen.

Wie auch Luca in seinem Blog betont, gilt natürlich, dass ich in keinster Weise garantiere, dass dieses Script einwandfrei funktioniert.

Alle Maschinen sichern

Damit das Script nicht einzeln angestossen werden muss, hier noch ein kleines Zusatzscript, welches für Backupninja konzipiert wurde, jedoch ohne weiteres auch als standalone verwendet werden kann (eine Shebang wäre dann natürlich keine schlechte Idee). Das Script sichert sämtliche definierten Maschinen (virsh list --all), welche nicht in der Exclude-Liste auftauchen:

# Backupninja SH-Handler to snapshot kvm machines

#Initials
BKVM=`/usr/local/scripts/bkvm.sh`

# List with all kvm machines which are defined on this host
VMLIST=`virsh list | awk '{print $2}' | sed '/^$/d' | grep -v Name`

# Array with kvm machines to exclude from backup
EXCLUDE=(example1 example2)

echo "Start Backup KVM Machines"
# Functions

function arraycontains() {
    local vm=$1
    local in=1
    for element in $EXCLUDE; do
        if [[ $element == $vm ]]; then
            in=0
            break
        fi
    done
    return $in
}

# Run the script
# Run default bkvm.sh for all vms
for vm in $VMLIST
do
    echo $vm
    arraycontains $vm
    if [ $? -eq 1 ];
    then
        echo "$vm is getting backuped"
        /bin/bash /usr/local/scripts/bkvm.sh $vm
    else
        echo "$vm is on the exclude list"
    fi
done

Restore

Dies wurde von mir noch nicht getestet, jedoch sollte laut Luca folgender Befehl funktionieren:

virsh restore <file>

Also die VM definieren, schauen dass das Backup-Image am korrekten Ort liegt und dann als File das RAM-Abbild angeben. Mit der Option --running müsste KVM die Maschine dann gleich als running betiteln.

Weitere Artikel zum Thema KVM unter Ubuntu 14.04

Anmerkungen und Korrekturen bitte via Kontakt