Proxmox¶
Nodes¶
PVE1 (Primary)¶
- IP: 192.168.1.199
- URL: pve1.mdhmedia.uk
- Role: Primary hypervisor
Hardware¶
| Component | Details |
|---|---|
| CPU | Intel Core i3-4005U @ 1.70GHz (2 cores, 4 threads) |
| RAM | 16GB |
| Boot Disk | Kingston SA400S37 240GB SSD |
| PVE | 9.1.14 (kernel 7.0.2-4-pve) |
Storage¶
| Pool | Type | Size | Purpose |
|---|---|---|---|
| rpool | ZFS | 222GB | Main storage pool |
| local | Directory | 183GB | ISO images, backups |
| local-zfs | ZFS Pool | 174GB | VM/CT disks |
Network¶
flowchart LR
subgraph Bridge[vmbr0 - 192.168.1.199/22]
eno1[eno1<br/>Internal LAN]
usb[enx3c18a0d4eddd<br/>USB Adapter]
end
Bridge --> GW[Gateway<br/>192.168.1.254]
PVE2 (Secondary)¶
- IP: 192.168.1.151
- URL: pve2.mdhmedia.uk
- Role: Secondary hypervisor, heavy workloads
Hardware¶
| Component | Details |
|---|---|
| CPU | 2x Intel Xeon X5670 @ 2.93GHz (12 cores, 24 threads) |
| RAM | 72GB |
| Boot Disk | PNY CS900 120GB SSD |
| PVE | 9.1.14 (kernel 7.0.2-4-pve) |
Storage¶
| Pool | Type | Size | Purpose |
|---|---|---|---|
| rpool | ZFS | 110GB | Main storage pool |
| local | Directory | 93GB | ISO images, backups |
| local-zfs-pve2 | ZFS Pool | 107GB | VM/CT disks |
Network¶
flowchart LR
subgraph vmbr0[vmbr0 - 192.168.1.151/22]
eno1[eno1]
end
subgraph vmbr1[vmbr1 - 192.168.1.152/22]
enp4s0f0[enp4s0f0]
end
subgraph vmbr2[vmbr2 - 192.168.1.153/22]
enp4s0f1[enp4s0f1]
end
vmbr0 --> GW[Gateway<br/>192.168.1.254]
LXC Containers¶
Statuses as of 2026-07-07. The cluster was rationalised that day — 13 stopped test/legacy guests (10 CTs + 3 VMs) were removed (see the note below); only the running containers remain.
| VMID | Name | Node | Status | IP | Purpose |
|---|---|---|---|---|---|
| 101 | portainer | pve1 | running | 192.168.1.241 | Docker host + Portainer (all git stacks) |
| 112 | caddy | pve1 | running | 192.168.1.245 | Reverse proxy |
| 113 | homepage | pve1 | running | 192.168.1.242 | Dashboard |
| 114 | mariadb | pve1 | running | 192.168.1.251 | Database server |
| 116 | alpine-wireguard | pve1 | running | 192.168.1.236 | VPN server (WG Dashboard on :10086) |
| 120 | adguard | pve1 | running | 192.168.1.244 | DNS filtering (active) |
Cluster rationalisation — 2026-07-07
Removed these stopped guests with pct/qm destroy --purge. Those with a
pre-destroy vzdump on their node's local are marked ✓; the rest were
throwaway/superseded and taken without a backup:
| Removed | Node | Was | Backup |
|---|---|---|---|
| CT 102 | pve1 | teleport (WireGuard + Authelia OAuth supersede it) | ✓ |
| CT 103 | pve1 | docker0X template (stale) | — |
| CT 104 | pve1 | pihole (never integrated) | — |
| CT 105 | pve1 | ubuntu template (stale) | — |
| CT 106 | pve1 | adguard (old, superseded by CT 120) | — |
| CT 108 | pve2 | plex (dup; Plex runs on Holly .210) |
— |
| CT 111 | pve1 | librenms | ✓ |
| CT 115 | pve1 | vaultwarden (test) | ✓ |
| CT 117 | pve2 | scanopy (test) | ✓ |
| CT 119 | pve2 | n8n (LAN automations move to Jarvis) | ✓ |
| VM 100 | pve1 | zabbix | ✓ |
| VM 107 | pve1 | apiscp-dev | ✓ |
| VM 109 | pve2 | PMS (dup Plex) | — |
CT 118 (grafana) was likewise destroyed 2026-07-06. Network mapping
(Zabbix/LibreNMS) is deferred to Jarvis rather than replaced. The vzdumps live
on each node's local and can be pruned or offsite-archived later.
Virtual Machines¶
| VMID | Name | Node | Status | RAM | Disk | Purpose |
|---|---|---|---|---|---|---|
| 121 | hermes-jarvis | pve1 | running | 4GB | 32GB (ZFS, discard=on,ssd=1) |
Jarvis host — Hermes agent at 192.168.1.252 (see Jarvis) |
| 110 | unraid | pve2 | running | 32GB | USB boot | Unraid NAS "Holly" — 16 cores, 3× PCI passthrough, OVMF + TPM 2.0 |
Backups¶
Backups configured 2026-07-06
Two vzdump jobs exist (pvesh get /cluster/backup):
| Job | Guests | Schedule | Retention |
|---|---|---|---|
| jarvis | VM 121 | Sun 02:00 | keep-weekly 2 |
| priority CTs | 101, 112, 114, 116 | daily 02:30 | keep-daily 3 + keep-weekly 2 |
Both snapshot mode / ZSTD → local. VM 110 (Unraid) is intentionally excluded (PCI
passthrough / USB boot). Offsite: pve-offsite-sync.timer mirrors /var/lib/vz/dump
nightly (~04:00) to a jailed Hetzner Storage Box sub-account (u195506-sub5, home homelab)
via rclone SFTP — see proxmox/backup/ in the repo.
Backup Strategy¶
Backup Best Practices
Regular backups are critical for disaster recovery. Proxmox Backup Server (PBS) or built-in vzdump can be used for VM/CT backups.
Recommended Backup Schedule¶
| Backup Type | Frequency | Retention | Time |
|---|---|---|---|
| Full Backup (Critical VMs/CTs) | Daily | 7 days | 02:00 |
| Full Backup (Non-critical) | Weekly | 4 weeks | Sunday 03:00 |
| Configuration Backup | Daily | 30 days | 01:00 |
Priority Containers for Backup¶
Based on the running services, prioritize backups for:
| VMID | Name | Priority | Reason |
|---|---|---|---|
| 112 | caddy | High | Reverse proxy - critical for all services |
| 113 | homepage | Medium | Dashboard configuration |
| 114 | mariadb | High | Database - contains application data |
| 116 | alpine-wireguard | High | VPN access - contains peer configurations |
| 110 | unraid | High | NAS VM - backup config only (data on array) |
Storage Locations¶
| Location | Type | Purpose |
|---|---|---|
| local | Directory | Short-term backup storage |
[NFS_SHARE] |
NFS Mount | Off-node backup storage (recommended) |
[PBS_SERVER] |
Proxmox Backup Server | Deduplicated long-term storage |
Off-site Backups
Consider configuring off-site backups to a remote location or cloud storage for disaster recovery. Options include:
- Proxmox Backup Server with remote sync
- Rclone to cloud storage (Backblaze B2, Wasabi, etc.)
- NFS mount to separate physical location
Backup Configuration¶
To configure scheduled backups via the Proxmox UI:
- Navigate to Datacenter > Backup
- Click Add to create a new backup job
- Configure the following settings:
Storage: [YOUR_BACKUP_STORAGE]
Schedule: [CRON_EXPRESSION]
Selection Mode: Include selected VMs
Mode: Snapshot (recommended for running VMs)
Compression: ZSTD (best compression/speed ratio)
Restore Testing¶
Test Your Backups
Schedule quarterly restore tests to verify backup integrity:
- Select a non-production time window
- Restore a backup to a temporary VM/CT
- Verify the restored system functions correctly
- Document any issues and adjust backup strategy