Versioning
Snapshots (va ZFS, btrfs or LVM) provide instant, space-efficient point-in-time versions of entire datasets. This is not per-object versioning (like MinIO's bucket versioning) – it's per-dataset at snapshot granularity. If an object is overwritten between two snapshots, only the latest version survives in the live filesystem; the previous version is preserved in the snapshot. For true per-object version history, handle it at the application level (e.g. timestamped keys like invoices/2024-q1/v2/report.pdf).
Per-dataset snapshots
# Create snapshot
zfs snapshot tank/putfs/acme-corp/invoices@2024-q1
# List snapshots
zfs list -t snapshot -r tank/putfs/acme-corp/invoices
# Rollback
zfs rollback tank/putfs/acme-corp/invoices@2024-q1
Without ZFS
- btrfs snapshots – similar concept,
btrfs subvolume snapshot. Less battle-tested than ZFS. - LVM snapshots – works with any filesystem on LVM. Copy-on-write, but slower and less space-efficient.
- rsync + hardlinks –
rsync --link-destcreates incremental backups with hardlinked unchanged files. Works anywhere.