Raspberry Pi und Bacula…

Lange Zeit hatte ich hier für meine kleine Serverumgebung ein BareOS laufen, vor einiger Zeit dann aber auf Bacula gewechselt.

So lange der Director auf einem der Raspberry Pi lief war auch alles gut, vor ein paar Monaten folge dann aber noch ein Umzug auf Proxmox in ein LXC Container.

Für bestehende Backupjobs kein Problem, sowohl x86 als auch arm-hf Quellen sind super weiter gelaufen (Incremental forever).

Ein neuer Client unter arm-hf lief allerdings nicht, immer beim starten der Sicherung (Initial Full) ist der bacula-fd mit einem SigFault weg gecrasht. Da dieses System nicht soo wichtig war hab ich es dann dabei belassen, vor ein paar Tagen hatte ich aber noch andere Probleme und dabei sind die wichtigen Raspberri Pi Systeme auch ausgelaufen und wollten ein neues Full Backup machen.

Hier sind dann genau die selben Probleme hoch, welche stellenweise auch im Netz diskutiert wurden. Eine Lösung für die Kombination arm-hf bacula-fd und x86 bacula-dir als gemeinsame Problemursache gibt es wohl nicht. Zu seltener Use-Case, um da viel Zeit rein zu investieren…

Da fiel mir heute morgen ein, das der bareos-fd ja auch ein bacula Compability Mode hat und é voila, eingerichtet und das Backup läuft 1A 🙂

Also Tipp wenn ihr das Problem habt:
Nutzt den bareos-fd (bareos-client) zusammen mit dem Bacula Director.

Anbei noch die Fehlermeldung vom Bacula FD:

Apr 16 07:02:55 raspi-vzmon bacula-fd[4551]: Bacula interrupted by signal 11: Segmentation violation
Apr 16 07:02:55 raspi-vzmon bacula-fd[4551]: Kaboom! bacula-fd, raspi-vzmon.mgmt.2-cpu.local-fd got signal 11 - Segmentation violation at 16-Apr-2021 07:02:55. Attempting traceback.
Apr 16 07:02:55 raspi-vzmon bacula-fd[4551]: Kaboom! exepath=/usr/sbin/
Apr 16 07:02:55 raspi-vzmon bacula-fd: Bacula interrupted by signal 11: Segmentation violation
Apr 16 07:02:55 raspi-vzmon bacula-fd[4551]: Calling: /usr/sbin/btraceback /usr/sbin/bacula-fd 4551 /var/lib/bacula
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: bsmtp: bsmtp.c:488-0 Failed to connect to mailhost localhost
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: The btraceback call returned 1
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: LockDump: /var/lib/bacula/bacula.4551.traceback
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: lockmgr.c:1221-0 lockmgr disabled
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: smartall.c:400-2863311530 Orphaned buffer: raspi-vzmon.mgmt.2-cpu.local-fd 536 bytes at bd4690 from bsockcore.c:157
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: smartall.c:400-2863311530 Orphaned buffer: raspi-vzmon.mgmt.2-cpu.local-fd 280 bytes at bd0f58 from jcr.c:384
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: smartall.c:400-2863311530 Orphaned buffer: raspi-vzmon.mgmt.2-cpu.local-fd 280 bytes at bd1950 from jcr.c:388
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: smartall.c:400-2863311530 Orphaned buffer: raspi-vzmon.mgmt.2-cpu.local-fd 312 bytes at bd3400 from bsock.c:852
Apr 16 07:03:00 raspi-vzmon bacula-fd[4551]: raspi-vzmon.mgmt.2-cpu.local-fd: smartall.c:400-2863311530 Orphaned buffer: raspi-vzmon.mgmt.2-cpu.local-fd 4120 bytes at bd4ac0 from bsockcore.c:156
Apr 16 07:03:00 raspi-vzmon systemd[1]: bacula-fd.service: Main process exited, code=killed, status=11/SEGV
Apr 16 07:03:00 raspi-vzmon systemd[1]: bacula-fd.service: Failed with result 'signal'.
Apr 16 07:04:00 raspi-vzmon systemd[1]: bacula-fd.service: Service RestartSec=1min expired, scheduling restart.
Apr 16 07:04:00 raspi-vzmon systemd[1]: bacula-fd.service: Scheduled restart job, restart counter is at 3.
Apr 16 07:04:00 raspi-vzmon systemd[1]: Stopped Bacula File Daemon service.

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…).