15 - Backup System
Date: 2026-02-11 Updated: 2026-03-04 Hostname: pve IP address: 192.168.0.109
Overview¶
Backup strategy - two targets, two types of data:
| What | Tool | Primary location | Secondary (Nobara) |
|---|---|---|---|
| LXC/VM backups | vzdump | /mnt/storage/backup/proxmox/ |
/mnt/hdd/Backup/proxmox-vms/ |
| Proxmox host OS | Restic | /mnt/disk1/backup/proxmox-host/ |
/mnt/hdd/Backup/proxmox-host/ |
Nobara is not always on - rsync skips gracefully if offline.
1. LXC/VM Backups (vzdump)¶
Configured in the Proxmox GUI under Datacenter - Backup.
Storage: backup-hdd - path /mnt/storage/backup/proxmox/
Backups are stored as .tar.zst files (vzdump format).
2. Proxmox Host OS Backup (Restic)¶
Backs up the Proxmox root filesystem (/) to a local restic repository.
Script: /root/backup-proxmox-restic.sh¶
#!/bin/bash
REPO="/mnt/disk1/backup/proxmox-host"
export RESTIC_PASSWORD_FILE="/root/.secrets/restic-password"
restic -r $REPO backup / \
--exclude /mnt/disk1 \
--exclude /mnt/disk2 \
--exclude /mnt/disk3 \
--exclude /mnt/disk4 \
--exclude /mnt/storage \
--exclude /mnt/pve \
--exclude /var/lib/vz \
--exclude /tmp \
--exclude /dev \
--exclude /proc \
--exclude /sys \
--exclude /run \
--exclude '*.img' \
--exclude '*.qcow2' \
--exclude /var/tmp
restic -r $REPO forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 3 \
--prune
restic -r $REPO check
Password stored in /root/.secrets/restic-password (chmod 600).
Cron (on Proxmox host)¶
Runs Sundays at 04:00.
Check snapshots¶
RESTIC_PASSWORD_FILE=/root/.secrets/restic-password restic -r /mnt/disk1/backup/proxmox-host snapshots
3. Rsync to Nobara PC¶
After local backups run, a cron job rsyncs both the vzdump files and the restic repo to Nobara.
Script: /root/sync-to-nobara.sh¶
#!/bin/bash
if mountpoint -q /mnt/pve/nobara-backup; then
echo "$(date) - Syncing to Nobara..." >> /var/log/nobara-sync.log
rsync -av --delete /mnt/storage/backup/proxmox/ \
/mnt/pve/nobara-backup/proxmox-vms/ >> /var/log/nobara-sync.log 2>&1
rsync -av --delete /mnt/disk1/backup/proxmox-host/ \
/mnt/pve/nobara-backup/proxmox-host/ >> /var/log/nobara-sync.log 2>&1
echo "$(date) - Sync done" >> /var/log/nobara-sync.log
else
echo "$(date) - NFS not mounted, skipping" >> /var/log/nobara-sync.log
fi
Cron (on Proxmox host)¶
Runs Sundays at 11:00 and 19:00. If Nobara is offline, it logs and skips.
NFS mount¶
See 15_NFS-Setup_Documentation.md for mount configuration.
4. Weekly Schedule (Sundays)¶
| Time | Job |
|---|---|
| 03:00 | SnapRAID sync |
| 04:00 | Restic host OS backup |
| 11:00 | Rsync to Nobara |
| 19:00 | Rsync to Nobara (second attempt, in case Nobara was offline at 11:00) |
5. Monitoring¶
# Restic backup log
tail -f /var/log/restic-backup.log
# Nobara sync log
tail -f /var/log/nobara-sync.log
# List LXC backups
ls -lh /mnt/storage/backup/proxmox/dump/
# Check NFS mount
mountpoint /mnt/pve/nobara-backup
5. Disk Layout¶
Proxmox¶
nvme0n1p3 (237GB LVM)
├─ pve-root (60GB) -> /
├─ pve-swap (8GB)
└─ pve-data (150GB) -> VM/LXC disk storage
sda1 (5.5TB) -> /mnt/disk1
sdb1 (5.5TB) -> /mnt/disk2
sdc1 (931GB) -> /mnt/disk3
sdd1 (1.8TB) -> /mnt/disk4
/mnt/storage -> MergerFS pool (backup-hdd lives here)