Skip to content

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 + hardlinksrsync --link-dest creates incremental backups with hardlinked unchanged files. Works anywhere.

Further reading