Sicherung von LXD Containern

Leider ist in den 2.xx Versionen von LXD noch keine direkte Backup-Funktion eingebaut.

Der Workaround geht über:

  • Snapshot der VM erstellen
  • Snapshot in Image wandeln
  • Image exportieren

Für diese Schritte hab ich mir mal ein Skript zusammen gebaut, das ich nicht vorenthalten will:

#!/bin/bash
datum=$(date +%Y-%m-%d)
backupdir=/mnt/data/backup/lxd
#vmliste=$(lxc list | awk '$4 == "STARTED" {print $2}')
vmliste=$(lxc list --format csv -c n)

echo "Starte Backup auf $(hostname -f)"
echo " "
date
echo " "
echo "Sicherungsliste:"
echo $vmliste
echo " "
for vm in $vmliste
do
 echo "Sichere VM: " $vm
 lxc snapshot $vm backup && echo "Snapshot erfolgreich"
 lxc publish $vm'/backup' --alias $vm'-backup' --compression none && echo "Publish erfolgreich"
 [ -d $backupdir/$datum ] || mkdir $backupdir/$datum
 lxc image export $vm-backup $backupdir/$datum/$vm.tar && echo "Export erfolgreich"
 lxc image delete $vm-backup && echo "Image Cleanup erfolgreich"
 lxc delete $vm/backup && echo "Snapshot Cleanup erfolgreich"
 [ -e /var/lib/lxd/containers/$vm/backup.yaml ] && cp /var/lib/lxd/containers/$vm/backup.yaml $backupdir/$datum/$vm.yaml && echo "Config kopiert"
 echo " "
done

date
echo " "
echo "Sicherungen abgeschlossen."

Die Formatierung und Ausgaben zielen herbei auf meine cron-Mail-Formatierung ab 😉

Am Anfang ist noch ein „Switch“, ggfs nur die laufenden VMs zu sichern.

Ich habe die gzip-Komprimierung aus Performancegründen abgeschaltet, andernfalls dauert der Publish sehr lange. Das Image ist dann zwar größer, aber auch bedeutend schneller fertig (bei meinem etwas schwachen Server…).