This episode scales PBS from one server into an infrastructure: many datastores on a single node, namespaces for organizing clients and backup groups, hub-spoke architecture via remote sync, then capacity planning — calculating dedup ratio, bandwidth requirements (10G recommended), and disk sizing before buying hardware.

Episode 17 introduced PBS 4.2 and S3 object storage. Now the question changes: what if you manage not one PBS, but a dozen PBS servers for dozens of clients? Episode 18 covers scaling — many datastores per server, namespaces and backup groups to organize clients, hub-spoke architecture via remote sync, and capacity planning before hardware is bought.
The analogy is like expanding one office into a multi-branch company: each branch (site) has its own archive warehouse, one central warehouse receives copies of everything, and before building a new building you calculate how many shelves are needed and how many trucks must pass per day.
One PBS does not mean one datastore. A datastore is a logical unit that can be created many times on one server, each with its own path, GC schedule, verify schedule, retention, and ACLs:
store-prod keeps 30 days, store-archive keeps 1 year.store1 on local ZFS, store-s3 on object storage (episodes 17 & 19).proxmox-backup-manager datastore create store-prod \
--path /mnt/zfs/store-prod \
--gc-schedule "sun 02:00" \
--verify-new
proxmox-backup-manager datastore listSince PBS 3.x, a datastore can be further divided into namespaces — logical folders to separate clients without creating a new physical datastore. Namespaces are very useful for SaaS/MSP scenarios: one large datastore is shared, and each tenant uses its own namespace with its own ACL and sync.
proxmox-backup-manager namespace create store-prod tenant-a
proxmox-backup-manager namespace create store-prod tenant-b
proxmox-backup-manager namespace list store-prodEvery snapshot in PBS actually belongs to one backup group identified by type/id (e.g. vm/100, ct/200, host/web-01). The combination of datastore + namespace + backup group is the full "address" of a backup — and the basis for grouping clients.
A healthy pattern: one namespace (or datastore) per client group, with consistent naming conventions.
vm/... to the specified datastore (episode 4); choose the right datastore per job.proxmox-backup-client with explicit --backup-type/--backup-id (episode 11) so they map easily to a namespace.ops@pbs user for namespace tenant-a, and access rights for tenant-b only to their own team.Tip
Start from one datastore per logical group, then use namespaces when that datastore feels large and mixed up. Namespaces add flexibility without adding new mount points — but write down the naming rules, because namespaces without a convention quickly become a new "junk folder".
As the number of sites grows, the episode 10 off-site pattern evolves into hub-spoke: each site has a local PBS (spoke) for fast on-site backups, and one central PBS (hub) pulls snapshot copies from all spokes via sync jobs. Sync remains a pull model (episode 10): the hub authenticates to the spokes, not the other way around.
[Site A PBS] ─┐
[Site B PBS] ─┼─ sync (pull) ─> [Hub PBS: central datacenter]
[Site C PBS] ─┘The advantage: fast restore from the local PBS for daily needs, while the hub becomes a centralized off-site guarantee that can later be replicated to S3 (episode 19) without opening access paths into every site.
On each spoke, prepare a sync user + API token with read rights to the datastore/namespace to be pulled (episode 10). On the hub, create one sync job per spoke:
proxmox-backup-manager sync job create \
--remote site-a.example.com \
--remote-user sync@pbs \
--remote-auth token \
--remote-datastore store1 \
--datastore hub-site-a \
--schedule "daily 03:00" \
--keep-last 7 --keep-daily 14 --keep-monthly 6 \
--remove-vanishedData flows spoke → hub; --keep-* retention on the hub limits growth, and --remove-vanished keeps deletions in sync. Snapshots on the spoke and hub are two copies of the same data — exactly the second layer of the 3-2-1 strategy (episode 10).
WAN links between sites are usually narrower than LAN. PBS sync jobs support rate limiting and worker threads so sync does not eat all the office bandwidth:
proxmox-backup-manager sync job create \
--remote site-a.example.com \
--remote-user sync@pbs --remote-auth token \
--remote-datastore store1 --datastore hub-site-a \
--schedule "daily 02:00" \
--rate-in 50M --burst-in 100M \
--worker-threads 2--rate-in limits the download speed (data entering the hub), --burst-in allows a temporary burst.--worker-threads (default 1) speeds up parallel chunk transfer when bandwidth is available.Schedule sync outside local backup hours, and separate it from verify/GC windows (episodes 6 & 9).
The episode 6 metrics (Size/Original/Dedup/Compressed) are not just reports — they are the raw material for sizing. Rough disk needs:
Usable ≈ Original × (1 / dedup ratio) × (1 / compression ratio)
+ index overhead + GC headroom + growth headroomExample: 10 VMs × 100 GiB = 1 TiB of original data. With dedup 8x and zstd compression 2x: 1 TiB / 8 / 2 = 64 GiB of unique chunks — plus metadata overhead and headroom. The key: measure the ratio from a running datastore (episode 6) before buying new disks, do not guess.
Daily backups must finish within the allotted window. Calculate the need:
2 TiB / 4 hours ≈ 1.2 Gbps continuously — beyond the comfortable range of 1G.Throughput = delta volume / window
1 GiB/minute ≈ 0.14 Gbps (1G: ~110 MB/s max)
2 TiB in 4 hours ≈ 152 MB/s ≈ 1.2 Gbps → needs 10GThat is why 10G is recommended for the PVE → PBS and PBS → hub paths: it gives room for spikes without extending the window. Use jumbo frames and proxmox-backup-client benchmark (episode 20) to measure the real TLS + zstd throughput before setting the window.
For a local ZFS datastore:
df -h and project monthly growth; buy before it fills, not after.Warning
Do not calculate capacity only from the "original" snapshot size. Deduplicated and compressed chunks use far less — but indexes, metadata, and the GC phase also eat space. Calculate two numbers: the theoretical need (formula above) and the monthly growth rate of a real datastore. The latter is more trustworthy.
Key takeaways:
type/id backup group is the full snapshot address.In the next episode, episode 19, we will connect PBS to the outside ecosystem: making the PBS datastore filesystem an NFS/SMB target for other backup agents (Veeam, Bacula) and using PBS 4.x S3 object storage as a cloud off-site destination. Your infrastructure no longer stands alone!