Q: In PBS, I see many backup entries — which one is a full backup and which one is incremental?
This is one of the most common questions people have when they first start using Proxmox Backup Server (PBS):
Why are there so many backups, and why does each one look like a “full backup”?
Which one is the real full backup, and which ones are incremental?
The confusion comes from the fact that PBS works very differently from the traditional “full / incremental / differential” backup system.
Let’s break it down layer by layer 👇
🧩 1. PBS Backup Method: Deduplicated Snapshots (Not Traditional Full + Incremental)
Each backup you see in the GUI (e.g., ct/104/2025-10-23T06:02:57Z)
is logically a complete and restorable snapshot of the VM or container.
However, physically, PBS only stores the changed data blocks (chunks) compared to the previous version.
👉 In other words:
- From the user’s perspective: every snapshot is a “full backup.”
- From the storage perspective: only the changed chunks are new; unchanged data is shared from previous backups.
🔬 2. How It Works: Chunk-Based Deduplication
When PBS performs a backup, it splits the VM/LXC disk data into many chunks (default size: 4 MB each)
and calculates a SHA-256 hash for each chunk.
The process:
- PBS starts backup and hashes each chunk.
- If a hash already exists in the datastore (backed up before), it won’t be stored again.
- Only new hashes (changed chunks) are saved.
So, even if you see multiple snapshots like:
ct/104/2025-10-22T10:03:00Z
ct/104/2025-10-22T12:02:55Z
ct/104/2025-10-22T14:09:22Z
...
What’s really happening is:
- The first one (
10:03Z) is the true initial full data set. - Each subsequent snapshot only adds the changed chunks,
while theindex.jsonfile still describes the entire VM. - During restore, PBS automatically reassembles all required chunks into a complete disk image.
📦 3. Example of Directory Structure
In a PBS datastore (e.g., /pbs/datastore1), each backup looks like this:
ct/104/2025-10-22T10:03:00Z/
├── index.json ← Lists which chunks this backup uses
├── manifest.blob ← Contains metadata (CPU, RAM, OS type, notes)
├── root.pxar ← PXAR archive of the file system
└── ...
But the actual chunk data shared across all backups resides in:
/pbs/datastore1/.chunks/
If a chunk appears in multiple backups, PBS stores it only once.
🧮 4. How to Identify the “First Full Backup”
Strictly speaking:
- PBS does not label backups as full or incremental;
- However, the earliest snapshot (the first timestamp) is the initial full backup;
- All later backups are deduplicated snapshots (incremental in storage).
You can verify backup sizes via CLI:
proxmox-backup-manager snapshot list datastore1 --backup-id ct/104
Example output:
| Snapshot | Logical Size | Stored Size | Note |
|---|---|---|---|
| 2025-10-22T10:03Z | 1.26 GiB | 1.26 GiB | Initial full |
| 2025-10-22T12:02Z | 1.26 GiB | 20 MiB | Incremental (changed chunks only) |
| 2025-10-22T14:09Z | 1.26 GiB | 15 MiB | Incremental |
📊 5. Checking in the GUI
In PBS GUI → Datastore → Content, enable the “Size” column (via top-right “Columns” menu):
- If multiple snapshots have similar logical size but small stored size,
that indicates effective deduplication. - The datastore’s actual usage will not grow linearly with the number of backups.
✅ 6. Summary Comparison
| Traditional Backup System | PBS Mechanism |
|---|---|
| Full + Incremental + Differential | Every snapshot is fully restorable |
| Incremental depends on previous backups | Each snapshot can be restored independently |
| High risk of space explosion | Deduplication + compression share chunks |
| Complex backup chains | Single datastore with automatic dedup management |
| Multiple versions take extra space | Identical data stored only once |
💡 Practical Tips
✅ Frequent backups (e.g., every 2 hours) are fine — PBS only saves changed data, so space use is very efficient.
✅ You can safely delete old backups — PBS will automatically garbage-collect unused chunks.
✅ Set up a verify job to periodically check the integrity of each snapshot.