Backup von Proxmox auf Synology NAS

heli-wolf

New Member
Jul 8, 2024
13
0
1
Ich möchte meine Docker Volumes auf Proxmox sichern und diese dann auf mein Synology Backup Verzeichnis kopieren.
Folgendes Skript kommt zum Einsatz:

Code:
# Verzeichnis, das gesichert werden soll
source_dir="/var/lib/docker/volumes"
# Verzeichnis, in dem die Backups gespeichert werden sollen
backup_dir="/opt/docker_backups"
# Anzahl der zu behaltenden Backups
keep_backups=10
# Aktuelles Datum und Uhrzeit
current_datetime=$(date +"%Y-%m-%d_%H-%M-%S")
# Name für das Backup-Archiv
backup_filename="${current_datetime}-backup.tar"
# Zielserver-Informationen
remote_user="xxxxxx"
remote_server="192.168.178.xx"
remote_dir="volume2/Backup_Proxmox/docker"
# # # # # # # # # # # # # # # # # # # # # # # #
#           Ende der Konfiguration            #
# # # # # # # # # # # # # # # # # # # # # # # #

remote_target="${remote_user}@${remote_server}"
backup_fullpath="${backup_dir}/${backup_filename}"
 
# Docker-Container herunterfahren
docker stop $(docker ps -q)
# Erstelle das Backup-Archiv
tar -cpf "${backup_fullpath}" "${source_dir}"
# Docker-Container wieder starten
docker start $(docker ps -a -q)
# Komprimiere das Backup-Archiv
gzip "${backup_fullpath}"
backup_fullpath="${backup_fullpath}.gz"
# Kopiere das Backup auf den Zielserver mit SCP ohne Passwort
scp "${backup_fullpath}" "${remote_target}:$remote_dir/"
# Lösche ältere lokale Backups mit `find`
find "$backup_dir" -type f -name "*-backup.tar.gz" -mtime +$keep_backups -exec rm {} \;
# Lösche ältere remote Backups mit `find`
ssh "${remote_target}" "find ${remote_dir} -type f -name '*-backup.tar.gz' -mtime +$keep_backups -exec rm {} \;"
 
echo "Backup wurde erstellt: ${backup_fullpath} und auf ${remote_target} kopiert."
die Sicherung auf Proxmox funktioniert perfekt aber er findet das Verzeichnis auf der Synology nicht. Das Verzeichnis ist aber vorhanden und wird aber nicht erkannt.
habe ich da in der Schreibweise einen Fehler??
Bin um jede Unterstützung sehr dankbar.
 
Edit: was spuckt er denn als Ergebnis aus, wenn Du per scp ohne Variablen eine Datei kopierst? :volume2 ist bei der Syno korrekt?
 
Last edited:
er sagt mir immer dass er das Verzeichnis nicht findet.
Mittlerweile bin ich dem Problem schon etwas näher gekommen, denn ich kann nicht so einfach mit Root Rechten auf die synology.

Code:
Login als: admin_xxxx
PW: xxxxxx
anschließend: sudo -i
PW: `xxxxxx
anschließend bin ich mit root@192.168.178.x auf meiner Diskstation.
Aber wie bringe ich diesen Loginbefehl in mein Skript??
 
Synology und SSH/SCP ist bis heute nicht sonderlich durchdacht. rsync ist da anders, aber auch "speziell" umgesetzt.

Was würde denn gegen ein Backup via SMB/CIFS sprechen?

Ich nutze bspw. sowas (Auszug aus einem meiner Docker-"Server"):

Bash:
#!/bin/bash

docker stop $(docker ps -a -q)
now=$(date +"%Y_%m_%d_%I_%M_%p")
tar -pcvzf /mnt/DS3622/backup_DOCKERSRV6_$now.tar.gz /docker/ /data /var/lib/docker/volumes
docker start $(docker ps -a -q)
find /mnt/DS3622/*.tar.gz -type f -mtime +30 -delete

Die Freigabe könntest Du auch restriktiv für einen User ohne Admin-Rechte setzen.
 
Last edited:
nichts spricht dagegen, mir ist SMB/CIFS ohnehin viel lieber.
Aber leider bin ich im Skriptschreiben noch nicht erfahren und so bin ich immer auf Vorlagen angewiesen.
wie muss ich mein Skript umbauen, dass ich die Sicherung mit SMB/CIFS machen kann?
Code:
tar -pcvzf /mnt/DS3622/backup_DOCKERSRV6_$now.tar.gz /docker/ /data /var/lib/docker/volumes
das muss ich nur wie folgt ändern, oder?
Code:
tar -pcvzf /mnt/volume2/Proxmox_Backup/docker/backup_DOCKERSRV6_$now.tar.gz /docker/ /data /var/lib/docker/volumes
"Volume2/Proxmox_Backup/docker/ " ist mein Zielordner.
 
Nur zum Verständnis: WO führst Du das Script aus? In einer VM oder direkt auf dem Proxmox VE (wobei man Docker nicht direkt auf dem PVE laufen lassen sollte)?

Im obigen Beispiel handelt es sich um einen CIFS mount einer DS3622 in einer VM. Dieser wird via fstab unter /mnt/DS3622 eingehangen.

Aber schreibe doch bitte mal, wo genau Du das ausführen willst.
 
Ich habe Proxmox laufen und darauf eine VM mit Homeassistant. Direkt auf Proxmox habe ich Docker und Portainer installiert und über Portainer laufen einige Container und die sollten gesichert werden.
Meine Synology ist nur über das Netzwerk mit Proxmox verbunden, das heißt weder eine VM noch über Mount eingebunden.
Das Skript würde ich am Liebsten mit einem Cron-Job automatisch einmal in der Woche direkt auf Proxmox laufen lassen.
Was hältst du von der Konstellation und wie könnte ich das umsetzten?
 
In dem Fall würde ich einen SMB/CIFS Mount auf die Freigabe der Synology im PVE erstellen, das geht über die GUI (Datacenter -> Storage -> Add -> SMB/CIFS).

Wenn dieser dann bspw. "Synology" benannt wird, ist er unter

/mnt/pve/Synology

zu finden via Shell. Dann müsstest Du im Script den mount point bzw. das Verzeichnis entsprechend abändern auf /mnt/pve/Synology/ .

Nicht vergessen, das Script via

chmod +x name-des-scripts.sh

ausführbar zu machen und dann via

crontab -e

einen neuen cronjob erstellen.

Ich würde aber Docker - wie bereits erwähnt - nicht direkt im PVE laufen lassen. Das ist "bad practice", nimm lieber eine VM oder ggf. einen LXC.
 
In dem Fall würde ich einen SMB/CIFS Mount auf die Freigabe der Synology im PVE erstellen
Nur eine kleine Anmerkung: Bei seinem SMB-Mount gibt es keinen Standby/SpinDown (keine Ahnung ob das erwünscht ist) der Platten im Synology mehr. Bei NFS funktioniert das weiterhin ....
 
ich glaube das ich das ohnehin schon eingerichtet habe, da ich ja meine Backups von Proxmox (VM) bereits auf meine Synology speichere.
Bei mir schaut die Storage wie folgt aus:
1720531519880.png
 
Ich glaube damit sind auch die Bedenken von Ernst beachtet, denn die derzeitige Sicherung läuft über NFS - oder interpretiere ich das falsch?
 
jetzt hätte ich noch eine blöde Frage - wie erstelle ich einen crontab -e
habe nur gehört, dass damit Routinen automatsiert werden können, aber mehr leider nicht.
 
In der shell

crontab -e

Bei Nachfrage würde ich „1 - nano“ als Editor verwenden.

Dann unterhalb der auskommentierten Zeilen bspw. das eintragen:

0 4 * * SUN /pfad/zum/script.sh

Das würde jeden Sonntag morgens um 4 das Script ausführen. Wochentag und Uhrzeit kannst Du natürlich anpassen. Zum Speichern des crontabs STRG+X drücken.
 
Vorerst einmal VIELEN VIELEN DANK für die Unterstützung. Ich wäre ohne Hilfe hoffnungslos verloren.
Verstehe ich das jetzt richtig, dass ich in deinem Skript:
tar -pcvzf /mnt/DS3622/backup_DOCKERSRV6_$now.tar.gz /docker/ /data /var/lib/docker/volumes
nur den Pfad: tar -pcvzf /mnt/pve/Synology_NAS/backup_DOCKERSRV6_$now.tar.gz ändern muss.
Was bedeutet die folgende Codezeile: /docker/ /data /var/lib/docker/volumes
das ist das Quellverzeichnis auf Proxmox: /var/lib/docker/volumes
Aber was bedeutet: /docker/ /data
 
Die Verzeichnisse /docker und /data existieren bei meiner VM und werden mitgesichert. Diese kannst Du löschen.

./../backup_DOCKERSRV6_$now.tar.gz kannst Du beliebig umbenennen. Bspw. ./../dockerbackup_$now.tar.gz

Die Variable $now ergibt immer das Datum mit Uhrzeit während der Ausführung am Ende des Dateinamens vor der Erweiterung .tar.gz

Den letzten Befehl solltest Du noch anpassen, wenn Du wöchentlich sicherst und 10 die letzten Backups behalten willst:

find /mnt/pve/Synology_NAS/*tar.gz -type f -mtime 71

Es wird also alles vom Typ tar.gz in dem Verzeichnis gelöscht, was älter als 71 Tage ist.
 
Last edited:
Super, vielen Dank!!
ich werde das heute abend mal zusammenbauen und dann mal testen.
Ich werde dir hoffentlich bald eine Erfolgsmeldung senden können.
 
Leider keine Erfolgsmeldung: er findet auf meiner Synology NAS kein Verzeichnis.
Folgende Code habe ich eingetragen:
Code:
docker stop $(docker ps -a -q)
now=$(date +"%Y_%m_%d_%I_%M_%p")

# Erstelle das Backup-Archiv
tar -pcvzf /mnt/pve/Synology_NAS/Backup_$now.tar.gz /var/lib/docker/volumes
# Docker-Container wieder starten
docker start $(docker ps -a -q)

find /mnt/pve/Synology_NAS/*.tar.gz -type f -mtime 71 -delete
 
echo "Backup wurde erstellt: ${backup_fullpath} und auf ${remote_target} kopiert."
 
Ich habe jetzt mein Skript nocheinmal ein bisschen überarbeitet und folgenden Code eingetragen:

Code:
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # #
#                Konfiguration                #
# # # # # # # # # # # # # # # # # # # # # # # #

# Verzeichnis, das gesichert werden soll
source_dir="/var/lib/docker/volumes"
# Verzeichnis, in dem die Backups gespeichert werden sollen
backup_dir="/opt/docker_backups"
# Anzahl der zu behaltenden Backups
keep_backups=10
# Aktuelles Datum und Uhrzeit
current_datetime=$(date +"%Y-%m-%d_%H-%M-%S")
# Name für das Backup-Archiv
backup_filename="${current_datetime}-backup.tar"
# Zielserver-Informationen
remote_dir="/mnt/pve/Synology_NAS"

# # # # # # # # # # # # # # # # # # # # # # # #
#           Ende der Konfiguration            #
# # # # # # # # # # # # # # # # # # # # # # # #

backup_fullpath="${backup_dir}/${backup_filename}"
 
# Docker-Container herunterfahren
docker stop $(docker ps -q)
# Erstelle das Backup-Archiv
tar -cpf "${backup_fullpath}" "${source_dir}"
# Docker-Container wieder starten
docker start $(docker ps -a -q)
# Komprimiere das Backup-Archiv
gzip "${backup_fullpath}"
backup_fullpath="${backup_fullpath}.gz"
# Kopiere das Backup auf den Zielserver mit SCP ohne Passwort

tar -pczf "$remote_dir"/$backup_fullpath "$source_dir"

# Lösche ältere lokale Backups mit `find`
find "$backup_dir" -type f -name "*-backup.tar.gz" -mtime +$keep_backups -exec rm {} \;
# Lösche ältere remote Backups mit `find`
#ssh "${remote_target}" "find ${remote_dir} -type f -name '*-backup.tar.gz' -mtime +$keep_backups -exec rm {} \;"
 
echo "Backup wurde erstellt: ${backup_fullpath} und auf ${remote_target} kopiert."
und dann habe ich folgende Meldung erhalten.
die Sicherung auf Proxmox hat ohne Probleme funktioniert, aber auf der Synology ist nichts gelandet!

Code:
root@proxmox:~# ./backup_docker_volumes.sh
5c60bc745a11
cc968b7c9775
3bfb1bda82a3
5a6ac60a6870
725387ae3a11
ef886f62463c
afe8f6ce1c81
tar: Removing leading `/' from member names
5c60bc745a11
cc968b7c9775
3bfb1bda82a3
5a6ac60a6870
725387ae3a11
ef886f62463c
afe8f6ce1c81
tar: Removing leading `/' from member names
tar (child): /mnt/pve/Synology_NAS//opt/docker_backups/2024-07-10_14-46-21-backup.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: /mnt/pve/Synology_NAS//opt/docker_backups/2024-07-10_14-46-21-backup.tar.gz: Wrote only 4096 of 10240 bytes
tar: Child returned status 2
tar: Error is not recoverable: exiting now
Backup wurde erstellt: /opt/docker_backups/2024-07-10_14-46-21-backup.tar.gz und auf  kopiert.
root@proxmox:~#
 
tar (child): /mnt/pve/Synology_NAS//opt/docker_backups/2024-07-10_14-46-21-backup.tar.gz

In Deinem Script fügt er 2 Slashes hinter …_NAS ein und fällt dann auf die Nase
 
das habe ich jetzt geändert, er kann aber noch immer nicht die Sicherung durchführen.

Code:
root@proxmox:~# ./backup_docker_volumes.sh
5c60bc745a11
cc968b7c9775
3bfb1bda82a3
5a6ac60a6870
725387ae3a11
ef886f62463c
afe8f6ce1c81
tar: Removing leading `/' from member names
5c60bc745a11
cc968b7c9775
3bfb1bda82a3
5a6ac60a6870
725387ae3a11
ef886f62463c
afe8f6ce1c81
tar: Removing leading `/' from member names
tar (child): /mnt/pve/Synology_NAS/opt/docker_backups/2024-07-10_15-59-53-backup.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: /mnt/pve/Synology_NAS/opt/docker_backups/2024-07-10_15-59-53-backup.tar.gz: Wrote only 4096 of 10240 bytes
tar: Child returned status 2
tar: Error is not recoverable: exiting now
Backup wurde erstellt: /opt/docker_backups/2024-07-10_15-59-53-backup.tar.gz und auf /mnt/pve/Synology_NAS kopiert.
root@proxmox:~#
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!