# anleitung: PBS aufsetzen + tank sichern Zwei Teile: erst Proxmox Backup Server installieren & konfigurieren (Datastore auf der neuen SSD), dann den Tank sichern. --- ## variablen — oben ausfüllen ```text PBS_DATASTORE_PATH = /mnt/pve/pbs-ssd # pfad deiner neuen SSD -> prüfen mit: cat /etc/pve/storage.cfg PBS_CTID = 145 # freie container-ID PBS_IP / GW = /24 / # in deinem bridge-subnetz ETT_HDD = /mnt/pve/ext-hdd01 # die alte HDD = restic-ziel für den tank HETZNER = uXXXX@uXXXX.your-storagebox.de ``` Pfad der neuen SSD bestätigen: ```bash cat /etc/pve/storage.cfg # zeigt den namen + pfad der neu angelegten directory-storage ``` --- # TEIL 1 — PBS installieren & konfigurieren ## 1.1 — Debian-13-Template holen (auf dem PVE-Host) ```bash pveam update pveam available | grep debian-13 pveam download local debian-13-standard_13.0-1_amd64.tar.zst # name ggf. anpassen ``` ## 1.2 — PBS-LXC anlegen (privileged), SSD reinmounten ```bash pct create 145 local:vztmpl/debian-13-standard_13.0-1_amd64.tar.zst \ --hostname pbs --cores 2 --memory 2048 --swap 512 \ --rootfs local-lvm:16 --unprivileged 0 \ --net0 name=eth0,bridge=vmbr0,ip=/24,gw= \ --password # die neue SSD als datastore in den container binden: pct set 145 -mp0 /mnt/pve/pbs-ssd,mp=/datastore pct start 145 ``` ## 1.3 — PBS im Container installieren ```bash pct enter 145 wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg \ -O /usr/share/keyrings/proxmox-archive-keyring.gpg cat > /etc/apt/sources.list.d/pbs.sources << 'EOF' Types: deb URIs: http://download.proxmox.com/debian/pbs Suites: trixie Components: pbs-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF apt update && apt install -y proxmox-backup-server ``` Bei der Postfix-Frage „No configuration" wählen. ## 1.4 — Web-UI + Datastore anlegen - Öffne `https://:8007`, Login `root` + Container-Passwort (Self-signed-Warnung ist normal). - **Datastore → Add Datastore**: Name `homelab`, Backing Path `/datastore`. ## 1.5 — Aufräum- & Prüf-Jobs (im PBS) - Datastore `homelab` → **Prune & GC**: - Prune: keep-last 3, keep-daily 7, keep-weekly 4, keep-monthly 6 - GC-Schedule: wöchentlich - **Verify Jobs** → Add: wöchentlich (prüft die Backups gegen Bitrot). ## 1.6 — PBS in PVE als Backup-Ziel einbinden - Im PBS: Dashboard → **Show Fingerprint** kopieren. - Im PVE: Datacenter → Storage → **Add → Proxmox Backup Server**: - ID `pbs`, Server ``, Datastore `homelab`, Username `root@pam`, Passwort, Fingerprint einfügen. ## 1.7 — Alle Gäste sichern **Einmalig jetzt (vor dem Wipe), konsistent per stop-modus:** ```bash for id in $(pct list | awk 'NR>1{print $1}') $(qm list | awk 'NR>1{print $1}'); do vzdump $id --mode stop --storage pbs done ``` Das sichert deine 16 LXC (100–900) + die 2 VMs (500 windows, 800 homeassistant) ins PBS. > 500 (windows) ist der grösste Brocken — vorher Platz auf der SSD prüfen: `df -h /mnt/pve/pbs-ssd`. **Für den laufenden Betrieb** (nach dem Rebuild): Datacenter → Backup → Add → täglicher Job, alle Gäste, Storage `pbs`, Modus Snapshot. --- # TEIL 2 — tank sichern PBS deckt die **Container/VMs** ab. Die **Bulk-Daten auf dem Tank** sind eine eigene Schicht — die sicherst du mit Restic auf die alte HDD (`ext-hdd01`) **und** offsite nach Hetzner. ## 2.1 — Discovery: was liegt wo, und steckt es schon im PBS? ```bash # alle datasets + mountpoints auf dem tank: zfs list -o name,used,mountpoint -r tank # pro container: mountpoints + backup-flag: for id in $(pct list | awk 'NR>1{print $1}'); do echo "=== CT $id ==="; pct config $id | grep -E '^(rootfs|mp[0-9]+):' done ``` Entscheidend ist das `backup=`-Flag jedes Daten-Mountpoints: - **`backup=1`** → die Daten sind schon in den PBS-Sicherungen aus 1.7. Restic ist dann nur noch für die **Offsite-Kopie** nötig. - **`backup=0`** → die Daten sind **nicht** im PBS → Restic ist hier Pflicht, lokal *und* offsite. > Schick mir die Ausgabe dieser beiden Befehle, dann setze ich unten die echten Pfade ein. Bis dahin: in den Restic-Befehl kommen die `mountpoint`-Pfade der Daten-Datasets aus der `zfs list` (deine App-Daten wie nc_data, immich-library usw. — **nicht** die rootfs-Subvols der Websites, die deckt PBS ab). ## 2.2 — Restic-Repos initialisieren ```bash export RESTIC_PASSWORD_FILE=/root/.restic-pw # vorher anlegen: ein starkes passwort reinschreiben, chmod 600 # lokal auf die HDD: export RESTIC_REPOSITORY=/mnt/pve/ext-hdd01/restic-tank restic init # offsite nach hetzner: export RESTIC_REPOSITORY=sftp:uXXXX@uXXXX.your-storagebox.de:/tank restic init ``` ## 2.3 — Tank sichern (kalt, weil Migration → Dienste eh gestoppt) Pfade aus 2.1 einsetzen: ```bash # lokal export RESTIC_REPOSITORY=/mnt/pve/ext-hdd01/restic-tank restic backup /tank/ /tank/ /tank/<...> # offsite export RESTIC_REPOSITORY=sftp:uXXXX@uXXXX.your-storagebox.de:/tank restic backup /tank/ /tank/ /tank/<...> ``` Restic als root → Eigentümer/Rechte (inkl. Idmap-Offsets) kommen 1:1 zurück. ## 2.4 — Verifizieren + Restore-Test (PFLICHT vor dem Wipe) ```bash restic -r /mnt/pve/ext-hdd01/restic-tank check restic -r /mnt/pve/ext-hdd01/restic-tank restore latest \ --target /tmp/rtest --include /tank/ ls -la /tmp/rtest/tank/ # stimmen die dateien? ``` ## 2.5 — Für den laufenden Betrieb Nach dem Rebuild beide Restic-Läufe (lokal + Hetzner) in einen täglichen Cron, plus Pruning: ```bash restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune ``` --- ## die ganze kette auf einen blick | Schicht | Werkzeug | Lokal | Offsite | |---------|----------|-------|---------| | Container + VMs | PBS | SSD (`pbs-ssd`) | — (aus Gitea reproduzierbar) | | Tank-Daten | Restic | HDD (`ext-hdd01`) | Hetzner | Beide externen Platten + die Hetzner-Box überleben den Wipe. Nach dem Rebuild: PBS-Datastore auf der SSD wieder einhängen → Gäste zurück; Tank neu anlegen → Restic zurück.