doc: konsolidierte Homelab-Dokumentation + Original-Plan

This commit is contained in:
2026-06-04 02:15:42 +02:00
parent 1ceaa8e103
commit daf5ffc8d0
13 changed files with 1372 additions and 1 deletions
+163
View File
@@ -0,0 +1,163 @@
# 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.