Problem: VPS mit rootless Podman Container die (völlig überraschend) Daten erzeugen die man (auch völlig überraschend) sichern will – aber nicht beim Hoster wegen Kosten und 3-2-1 Regel (wenn wir uns mal das 3 und 2 wegdenken).

Subproblem: Wegen UID Mapping haben die Daten die Container erzeugt einen Owner mit einer gemappten UID und somit kann der (unberechtigte) User der die Podman Container betreibt nicht auf die Daten zugreifen.

Lösung: Daten mit root und rclone als TAR (wegen Erhalt UIDs) nach OneDrive sichern und mit rclone alte Files löschen lassen.

  1. rclone installieren

  2. rclone config
    1. als Name „onedrive“ angeben
    2. type of storage „Microsoft OneDrive“ auswählen (bei mir 31)
    3. client_id, client_secret überspringen
    4. Region „Microsoft Cloud Global“
    5. Advanced config: no
    6. Auto Config: no
    7. Auf Rechner mit Browser
      rclone authorize "onedrive" --onedrive-auth-url https://login.microsoftonline.com/<tenant-guid>/oauth2/v2.0/authorize --onedrive-token-url https://login.microsoftonline.com/<tenant-guid>/oauth2/v2.0/token
    8. Output in config_token reinpasten
    9. config_type=OneDrive Personal or Business (1 bei mir)
    10. drive_id=das mit „Documents“ oder „Dokumente“ (1 bei mir)
    11. Drive OK bestätigen
  3. ~/.config/rclone/rclone.conf auf /root/.config/rclone/rclone.conf kopieren 

  4. Backupscript erstellen (s.u.) ggf. --min-age anpassen wenn man Backups länger als 3 Monate aufheben will.
    Script geht davon aus dass User mit dem Container laufen podman heißt (-M podman@ im systemctl Call) und der Container mycontainer als Service podman-mycontainer im Ordner /path/to/mycontainerparent läuft und auf /targetfolder/on/onedrive gesichert werden soll.

  5. Aufruf in System crontab einfügen (muss als root laufen weil die Dateien die im Container erzeugt werden ja UID-mapped sind und für normale User nicht zugreifbar sind).
#!/bin/bash
FN="mycontainer_"$(date +"%Y%m%d%H%M")".tar.gz"
rm backup_mycontainer.log &amp;&gt;/dev/null
echo $(date +"%Y-%m-%d %H:%M:%S") stopping service &>>backup_mycontainer.log
systemctl --user -M podman@ stop podman-mycontainer &>>backup_mycontainer.log
echo $(date +"%Y-%m-%d %H:%M:%S") create $FN &>>backup_mycontainer.log
tar cfz $FN -C /path/to/mycontainerparent mycontainer &>>backup_mycontainer.log
echo $(date +"%Y-%m-%d %H:%M:%S") rclone $FN &>>backup_mycontainer.log
rclone copy $FN onedrive:/targetfolder/on/onedrive &>>backup_mycontainer.log
echo $(date +"%Y-%m-%d %H:%M:%S") remove $FN &>>backup_mycontainer.log
rm $FN &>>backup_mycontainer.log
echo $(date +"%Y-%m-%d %H:%M:%S") starting service &>>backup_mycontainer.log
systemctl --user -M podman@ start podman-mycontainer &>>backup_mycontainer.log
echo $(date +"%Y-%m-%d %H:%M:%S") delete backups older than 3 months &>>backup_mycontainer.log
rclone delete onedrive:/targetfolder/on/onedrive --min-age 3M --verbose &>>backup_mycontainer.log
cat backup_mycontainer.log|s-nail -Sv15-compat -Smta=smtp://…user…:…passwort…@smtpserver.com:587 \ -Ssmtp-use-starttls \ -Ssmtp-auth=login \ -a backup_mycontainer.log \ -s "[mycontainer backup] Completed" \ -r backup-mycontainer@meinedomain.com \ meinuser@meinedomain.com