QNAP – Backup mit UrBackup (Container Station, Urbackup-Server)

Nachdem nun der HP Microserver N36L nun auch schon mehrere Jahre auf dem Buckel hat, wird es Zeit diesen zu ersetzen. Auf dme N36L lief bisher immer ausschließlich der UrBackup Server für meine Clients. Dort war Openmediavault als debian-basierte NAS Distribution installiert. Als ich das System damals aufgesetzt hatte, war Docker gerade so am entstehen. Deswegen war OMV mit Debian die einzige Möglichkeit einigermaßen standardisiert UrBackup zu installieren. Zeitweise gab es auf OMV auch ein UrBackup Plugin, welches jedoch heute ebenfalls nicht mehr verfügbar ist.

Deswegen ist es jetzt an der Zeit, das System umzustellen auf ein neues System. Heute wähle ich ein Standard-NAS von QNAP und installiere UrBackup als Docker Container.

Urbackup bietet eine komfortable Möglichkeit Backups von Clients zu erstellen, zentral verwaltet, Internetfähig – und das als Open Source. Lokal muss nur einmal der Client installiert werden, die Settings werden zentral verwaltet, und sofort laufen alle Backups wie gewohnt. Vollkommen DAU-tauglich.

Im QNAP muss die Container Station installiert sein, darüber werden die Docker Container erstellt und verwaltet. Hier klickt man recht einfach wieder auf Erstellen im Menü links, danach auf „Applikation erstellen“. Es folgt ein Dialog zur Konfiguration des Docker Containers.

Hier wird die Konfigutationsdatei eines Docker Containers in der Auszeichnungssprache YAML beschrieben. Der Anwendung selbst gibt man einen Namen, bspw. „urbackupserver“. Die YAML beinhaltet alle für die Ausführung notwendigen Ressourcen. Im folgenden die YAML-Datei. Die eigenen Verzeichnisse sollten unter „volumes“ an die eigenen Bedürfnisse angepasst werden:

version: '2'

services:
  urbackup:
    image: uroni/urbackup-server:latest
    container_name: urbackup
    restart: unless-stopped # | no | always | on-failure # v2 compose
    environment:
      - PUID=1000  # Enter the UID of the user who should own the files here
      - PGID=1000  # Enter the GID of the user who should own the files here
      - TZ=Europe/Berlin # Enter your timezone
    volumes:
      - /share/Container/container-urbackup-server/database:/var/urbackup
      - /share/Container/container-urbackup-server/backups:/backups
      # Uncomment the next line if you want to bind-mount the www-folder
      #- /path/to/wwwfolder:/usr/share/urbackup
    network_mode: "host"
    # Activate the following two lines for BTRFS support
    #cap_add:
    #  - SYS_ADMIN

Nach der Validierung der YAML kann die Einstellung übernommen werden. Dann startet die Docker Umgebung automatisch und wie immer kann die Weboberfläche von UrBackup erreicht werden:

http://<URBACKP-SERVER>:55414/

Datenmigration

Will man einen bestehenden Server migrieren, so muss die Docker umgebung auf dem QNAP gestoppt werden (Grafische Oberfläche in der Container Station unter Übersicht) und die bestehende UrBackup Umgebung ebenfalls. Bei meiner Debian Umgebung per SSH wie folgt zu erledigen (alternativ Sevice im OMV UrBackup Plugin deaktivieren):

service urbackupsrv stop

Jetzt müssen zwei wichtige Verzeichnisse migriert werden. Einmal der Speicherort der Datenbank (bei mir /var/urbackup) und das Verzeichnis aller Backups (bei mir auf dem OMV System unter /srv/dev-disk-by-id-md-name-*****/urbackup/). Die Migraion kann recht einfach über RSYNC erfolgen. Folgenden Befehl habe ich auf dem alten Debian-Quell-NAS für die Migration des Datenverzeichnisses abgesetzt:

rsync -avh --stats --progress /srv/dev-disk-by-id-md-name-*****/urbackup/ <SSH-user>@<TARGET NAS IP>:/share/Container/container-urbackup-server/backups

Das ganze kann natürlich auch per SCP erledigt werden:

scp -pr -C ./BACKUP/urbackup/* admin@nas-backup.home:/share/Container/container-urbackup-server/backups/

Wichtig ist, dass SSH auf dem Zielsystem (in meinem Fall das QNAP) aktiviert ist und der login funktioniert. Beim ersten Aufruf wird nachgefragt, ob der Key akzeptiert werden soll – das muss bestätigt werden.

Oder man verwendet dazu einfach die Funktionen des NAS und erstellt einen Synchronisierungsauftrag über die QNAP „Hybrid Backup Station“. Dabei muss jedoch beachtet werden, dass Symlinks / Hardlinks bei manchen Überagungsarten nicht mitkopiert werden.

Die Synchronisation der Datenbank muss ebenfalls durchgeführt werden:

rsync -avh --stats --progress /var/urbackup <SSH-user>@<TARGET NAS IP>:/share/Container/container-urbackup-server/database

Wie immer ist die Dauer der Kopiervorgangs im wesentlichen abhängig von der Performance der Einzelkomponenten. Bei vielen kleinen Dateien hängt es üblicherweise an der Performance der Festplatten, bei größeren Dateien ist das Netzwerk der limitierende Faktor. Es hilft zumeist deswegen nur Geduld.

Symlinks wurden bei mir per rsync kopiert, zeigen aber eventuell auf den falschen Pfad. Die Pfadkorrektur kann man recht einfach korrigieren, sofern Entware std 1.03 auf dem QNAP mit installiert ist und damit die erweiterten Funktionen von find zur Verfügung stehen. Der Umzug kann mit folgendem Befehl umgesetzt werden:

find /share/Container/container-urbackup-server/backups -lname '/srv/dev-disk-by-id-md-name-*/urbackup/*' -exec sh -c 'ln -snf "/share/Container/container-urbackup-server/backups$(readlink "$0")" "$0"' {} \;

Es müssten die Dateiberechtigungen auf dem NAS noch angeschaut werden. Dem Docker Container geben wir mit, dass PUID und PGID je 1000 ist. Das sollte natürlich auf dem QNAP dann ebenfalls der Fall sein. Sonst bekommen wir einen Fehler beim Start des Containers. Hiervon betroffen sind sowohl des database als auch das backup Verzeichnis.

find ./ -not -user 1000 -exec chown 1000:1000 {} \;

Jetzt kann der neue UrBackup Server per Docker Container wieder gestartet werden und das Webinterface sollte wie gewohnt erreichbar sein:

http://<URBACKUP-SERVER>:55414/

Beim Login im Webinterface kann es sein, dass noch der Alte Pfad für die Datenablage konfiguriert ist. Bei OMV habe ich als Datenlaufwerk folgendes Verzeichnis konfiguriert gehabt:

/srv/dev-disk-by-id-md-name-*/urbackup/

Deswegen macht mich UrBackup im Webinterface auf den falschen Pfad aufmerksam, dass es diesen nicht erreichen kann. Im Webinterface kann über Einstellungen -> Allgemein -> Server der Sichersspeicherpfad auf die neue Docker-Umgebung angepasst werden:

/backups

Diesen Pfad haben wir in der YAML als Docker-internen Mountpfad angegeben.

An den Clients müssen keine Änderungen vorgenommen werden. Die LAN Clients finden den Server per UDP Broadcasts. Die Internet Clients sind üblicherweise hinter der Firewall per NAT an den Server angebunden, deswegen muss höchstens in der Firewall die NAT Ziel IP auf den neuen UrBackup Server umgezogen werden.

root@NAS4:/etc/urbackup# cat backupfolder
/media/BACKUP/urbackup

Beim Urbackup Server gibt es weiterhin eine Möglichkeit der Migration. Dort muss jeweils der remote-Pfad im aktuellen System gemounted werden, damit das funktioniert:
https://www.urbackup.org/administration_manual.html#x1-9500010.8

Quellen

https://www.urbackup.org/
https://hub.docker.com/r/uroni/urbackup-server
https://forums.urbackup.org/t/moving-clients-on-new-server/8614
https://urbackup.atlassian.net/wiki/spaces/US/pages/1441795/Restoring+Images+from+PXE
https://unix.stackexchange.com/questions/18360/how-can-i-relink-a-lot-of-broken-symlinks
https://forum.qnap.com/viewtopic.php?t=139689