Proxmox Local Storage: Why ZFS Beats LVM for VM Disks When Snapshots Matter
ZFS gives Proxmox VE native snapshots, clones, compression and checksums for local VM disks, but it demands RAM for ARC, direct disk access via HBA IT mode, and careful capacity planning to avoid CoW fragmentation.
23 Jan 2026, 12:49 UTC

You need to roll back a VM after a bad update in seconds, not hours, and you want that rollback to be local without pulling a full backup from another node. That is the real decision point between ZFS and LVM for Proxmox VE local storage. ZFS gives you native, near-instant snapshots and clones for VM disks with built-in integrity, while LVM requires external tools for the same safety net.
The thesis is simple: choose ZFS when you value fast point-in-time recovery and data integrity on the same host; choose LVM when you want minimal RAM overhead and maximum compatibility with hardware RAID. Most Proxmox hosts benefit from ZFS, but only if you plan for RAM and capacity.
The concrete problem with LVM-only local storage
With LVM-thin on Proxmox, VM disks are thin-provisioned logical volumes. You can create them quickly and they share space, but snapshots are LVM snapshots. They are copy-on-write at the block layer, space-hungry, and not integrated with Proxmox backup chains. A power loss can leave a write in flight with no checksum protection, and restoring means mounting a snapshot or restoring from a separate backup job.
ZFS changes the unit of storage. A ZFS pool is a collection of disks managed as a whole, and a dataset is the mountable filesystem where VM disks live. Because ZFS is copy-on-write, new data is written to new blocks and old blocks are kept until the transaction commits. That prevents the classic write hole that can corrupt a RAID array on power loss.
What ZFS gives you for VM disks in Proxmox
Native snapshots and clones are the headline feature. Proxmox exposes ZFS snapshots in the web UI under Datacenter > Storage > Snapshots. A snapshot is a read-only point in time that costs almost no space initially and can be cloned into a new VM disk for testing. No external agent is required.
Compression at the pool level, typically lz4, is cheap on modern CPUs and can reduce physical footprint for VM images with compressible data. ZFS also provides checksums for all data and metadata, and self-healing on mirrored or RAID-Z vdevs when a mismatch is detected.
Thin provisioning is handled via zvols with volblocksize. Proxmox creates zvols for VM disks on a ZFS dataset, and space is allocated as data is written, not at the time of VM creation.
A practical pool setup decision
For local VM storage, a mirrored vdev is the common engineering choice for Proxmox: good read performance, simple rebuilds, and tolerance of one disk failure per mirror.
Run the following in the Proxmox shell as root. Replace placeholders with your own names and devices. This is destructive to the specified devices.
# zpool create -o ashift=12 vmpool mirror /dev/sdX /dev/sdY -O compression=lz4 -O atime=offWhere to run: Proxmox host shell via SSH or Datacenter > Shell. Required permissions: root. Placeholders: vmpool is the pool name, /dev/sdX and /dev/sdY are whole disks, not partitions. Expected check: run zpool status and confirm the pool shows ONLINE and no errors. Relevant risks: using the wrong device wipes data; using partitions instead of whole disks can reduce performance; hardware RAID controllers hide disks from ZFS.
After creation, add the pool in Proxmox web UI under Datacenter > Storage > Create > ZFS. Set Content to VM disk image, and ensure the pool name matches. You can then create a dataset for VMs with zfs create -o mountpoint=/rpool/vmdata vmpool/vmdata and point Proxmox storage to it.
Trade-offs you have to plan for
ZFS is memory intensive. The Adaptive Replacement Cache, ARC, is ZFS's in-memory read cache. ARC size grows with available RAM and can compete with VMs for memory on small hosts. Monitor ARC usage with arcstat if available, or check host memory pressure via top. A practical rule is to leave enough free RAM for the Proxmox host and active VMs before relying on a large ARC.
Hardware matters. ZFS expects direct disk access. A Hardware RAID controller in RAID mode interferes with ZFS. An HBA in IT mode, which presents disks directly to the OS, is strongly recommended.
Capacity planning is critical. ZFS performance degrades significantly as a pool fills beyond about 80-90% due to fragmentation from copy-on-write. Keep headroom and monitor with zpool list.
Verification steps you can use after setup: verify pool health with zpool status in the Proxmox shell; check ARC memory usage via system monitoring; test snapshot creation and rollback via the Proxmox web UI Snapshots tab for a non-production VM. These checks confirm the feature is working as expected on your hardware.
Use ZFS for local VM storage when you want integrated snapshots, clones, compression, and integrity checks without extra tools. Use LVM when you need minimal host RAM overhead or must keep existing hardware RAID. If you choose ZFS, provision RAM, use HBAs in IT mode, and keep pools below high utilization.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.