This repository has been archived on 2026-07-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
homelab/doc/plan/pbs-und-tank-backup-anleitung.md
T

164 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 = <freie-IP>/24 / <gateway> # 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=<freie-IP>/24,gw=<gateway> \
--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://<PBS_IP>: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 `<PBS_IP>`, 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 (100900) + 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/<dataset-a> /tank/<dataset-b> /tank/<...>
# offsite
export RESTIC_REPOSITORY=sftp:uXXXX@uXXXX.your-storagebox.de:/tank
restic backup /tank/<dataset-a> /tank/<dataset-b> /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/<dataset-a>
ls -la /tmp/rtest/tank/<dataset-a> # 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.