ZFS snapshots are perhaps TrueNAS’ most-praised feature — and rightly so. They are atomic, near-zero CPU, and they take seconds regardless of dataset size. For pure file shares (SMB case files, backup targets) the snapshot strategy is well documented — we covered that in TrueNAS Snapshot Schedule Best Practices.
But when VM disks live on a TrueNAS dataset (via NFS, iSCSI or NVMe-oF/TCP attached to a hypervisor), the snapshot question gets harder. A file share is a “container of files”. A VM disk is a running operating system with caches, open database transactions and a filesystem journal. A snapshot at the wrong second produces an inconsistent state — restore then is a rescue operation, not a clean rollback.
This article is the VM-storage-specific complement to the general best practices. We cover consistency, quiesce, dataset layout, backup integration and restore paths.
VM-consistent vs. Crash-consistent
Three consistency levels in the VM world:
1. Crash-consistent
This is the default for TrueNAS snapshots without quiesce. The snapshot is atomic at block level — whatever was on disk at the snapshot moment is included. What was still in VM RAM (pending DB writes, OS caches) is not.
On restore: the VM boots as if after a hard power-off. The filesystem journal handles consistency (modern ext4, NTFS, ZFS-on-guest, XFS). Databases run crash recovery. This works in 95% of cases — Linux and Windows servers with modern filesystems are designed for it.
Risk: databases with memory-resident caches and heavy write load (Oracle, MS SQL with Lazy Writer, large Postgres) may lose data not yet flushed to disk at snapshot time.
2. File-system-consistent (Quiesced)
The filesystem is brought to a quiet state before the snapshot — caches flushed, new writes briefly paused, snapshot taken, normal operation resumes.
In VMware land: VMware Tools quiesce via VSS (Volume Shadow Copy Service) on Windows guests, freezefs hooks on Linux guests. In Proxmox: via the QEMU Guest Agent, which triggers fsfreeze on the guest OS.
This protects against filesystem inconsistencies, but databases at the application layer are not guaranteed consistent — the DB processes need their own quiesce step on top.
3. Application-consistent
The highest level: the database engine is brought to a safe state, transaction logs flushed, then the snapshot.
Concrete mechanisms:
- Microsoft VSS writers for SQL Server, Exchange, Active Directory
- Pre/post scripts for Postgres, MySQL (e.g.
pg_start_backup/pg_stop_backup) - Veeam, Vembu, Acronis backup agents on the VM that orchestrate the dance
Application-consistent is the gold standard for DB VMs. It costs a bit more setup and a brief wait, but guarantees a clean restore.
TrueNAS Snapshot vs. Hypervisor Snapshot
Two snapshot worlds exist that complement each other, not replace:
TrueNAS snapshot
- ZFS snapshot of the dataset hosting VM disks
- Atomic at block level, very fast
- Without quiesce: crash-consistent
- Covers all VMs on the dataset at once — one snapshot, many VMs
Hypervisor snapshot
- VMware VMSnapshot or Proxmox snapshot
- Optionally captures VM state (RAM, device state) when running
- With quiesce option: filesystem-consistent (needs VMware Tools / QEMU Guest Agent)
- Very useful for short-term snapshots before maintenance (“I’m patching now, fall back if needed”)
Recommendation: Use both. Hypervisor snapshots for operational safety (short-term, pre-change), TrueNAS snapshots as a storage-layer safety net with retention for DR.
Caveat: VMware VMSnapshots must not live long
A VMware VMSnapshot creates a redo-log file (.vmdk-delta) that absorbs all new writes. As long as the snapshot exists, it grows. On an active VM that’s easily many GB in 24 h. Best practice: keep hypervisor snapshots at most 24–48 hours, then commit or revert.
TrueNAS snapshots do not have this problem — they are not redo logs, they are block-level references. Long retention on the TrueNAS side is unproblematic apart from footprint (see below).
Orchestrating Quiesce: vCenter / Proxmox Hooks
For the full quiesce experience you can orchestrate TrueNAS snapshots from the hypervisor:
VMware / vCenter
Via vSphere Storage APIs - Data Protection (VADP) storage snapshots can be triggered from the hypervisor. Backup software (Veeam, Vembu, Rubrik) does this by default. Manual sequence:
- Before the TrueNAS snapshot: VMware VMSnapshot with quiesce flag
- TrueNAS snapshot of the dataset
- Remove the VMware VMSnapshot
A classic “freeze-and-clone” pattern.
Proxmox VE
Proxmox has pre/post hook scripts for VM operations. A backup job can trigger the QEMU Guest Agent before the snapshot (qm guest fsfreeze-freeze 100), snapshot, then qm guest fsfreeze-thaw 100.
In practice Proxmox Backup Server handles this automatically — by far the easiest path to consistent VM backups.
Storage-orchestrated snapshots via the iX plugin
With the official TrueNAS Proxmox plugin you trigger ZFS snapshots from the Proxmox UI — including quiesce via the QEMU Guest Agent. The cleanest 2026 option.
Dataset Layout: per VM or per Pool?
One of the first architecture choices. Three options:
Option A: One dataset per VM
tank/vms/vm-100/
tank/vms/vm-101/
tank/vms/vm-102/
Pros:
- Per-VM snapshots with individual retention (DB hourly, web daily)
- Per-VM restore without affecting others
- Per-VM replication to a secondary site (see Proxmox Replication)
- Different properties possible (compression, recordsize, sync)
Cons:
- With many VMs (50+) the dataset list gets crowded
- More admin overhead
Option B: One dataset per workload class
tank/vms/production/
tank/vms/development/
tank/vms/dmz/
Pros:
- Class-based retention policies
- Cleaner overview
Cons:
- Restore touches a whole class
- Snapshot footprint hard to predict with mixed writes
Option C: One dataset for all VMs
tank/vms/
Pros:
- Simplest management
- One snapshot covers all VMs
Cons:
- Per-VM restore not possible without affecting others
- With many writes: snapshots get heavy
Recommendation
For SMB setups with < 30 VMs: option A (one dataset per VM). Admin overhead is manageable, the upside (per-VM restore, individual retention) is large.
For larger setups > 100 VMs: option B (per workload class) plus hypervisor snapshots for individual restore.
On the iSCSI side it’s different: a LUN is typically a datastore with many VMs. Then it’s hypervisor snapshots or a TrueNAS plugin that operates per VM.
VM-aware Backup vs. Storage Snapshot
Key distinction:
- VM-aware backup (Veeam, PBS, Vembu): knows the VM concept, coordinates quiesce with the guest, can selectively restore VMs or files
- Storage snapshot (TrueNAS snapshot): block-level, no VM semantics
Both have their place:
- Fast recovery (seconds to minutes): TrueNAS snapshot rollback. Crash-consistent is usually fine.
- Granular recovery (one file inside a VM): VM-aware backup with file-level restore.
- Cross-site DR: TrueNAS replication + hypervisor backup to PBS.
Recommendation: Run both. TrueNAS snapshots as the seconds-restore layer, VM-aware backup (PBS on Proxmox, Veeam on VMware) for longer retention and granular recovery.
See Proxmox Backup Server 4.0 What’s New and Backup Strategy for SMBs.
Restore Paths
Concrete ways to recover a VM from a TrueNAS snapshot:
Path 1: Full rollback (NFS dataset, all VMs stopped)
If everything is corrupt, zfs rollback returns the dataset to the snapshot state. Requirement: all VMs on the dataset are stopped, otherwise inconsistent. Very fast, very destructive for every other VM on the same dataset.
Path 2: Read-only clone of the snapshot, copy one file
# On TrueNAS:
zfs clone tank/vms/vm-100@daily-2026-07-15 tank/vms/vm-100-restore-clone
# Then mount from the hypervisor and copy the VM file out
Pro: other VMs untouched, selective restore.
Path 3: Use the snapshot directory directly (NFS)
For NFS datasets the hidden .zfs/snapshot/<name>/ directory is reachable from the hypervisor. The VM disk in the snapshot state lives there — just copy:
cp /mnt/nfs-tank/.zfs/snapshot/daily-2026-07-15/vm-100-disk-0.qcow2 \
/mnt/nfs-tank/vm-100-disk-0-restored.qcow2
Requires snapdir=visible on the dataset or a manual cd into the hidden path.
Path 4: VM snapshot rollback (hypervisor layer)
If a hypervisor snapshot exists: just roll back in UI or CLI. Fast and no storage operation.
Retention vs. Pool Growth
Snapshots are not “free” — they reference old block versions that would otherwise be freed. With a write-heavy VM the snapshot footprint grows quickly:
Example:
- VM with 200 GB disk
- 1 GB/day effective data change
- Hourly snapshots, 24 h retention: 24 GB
- Daily, 30 days: 30 GB
- Weekly, 12 weeks: 12 GB
- Monthly, 24 months: 24 GB
- Total: snapshot footprint ~90 GB on a 200 GB VM = +45%
With two dozen VMs that adds up. Recommendations:
- Reserve pool headroom — ZFS performance suffers above ~80% used
- Differentiate retention by workload — DB VMs may need hourly, static web servers don’t
- Enable compression (LZ4 default — VM data typically 1.5–2×)
- Avoid inline dedup — RAM-heavy, rarely worth it on VM storage
Workload-specific Recommendations
Database VMs (Postgres, MySQL, MSSQL)
- Application-consistent snapshots via DB-native mechanisms or Veeam/PBS
- Frequent snapshots (hourly), shorter storage retention
- Additionally: logical DB backups as a second layer
- Match recordsize to DB block size (8K Postgres, 16K MySQL InnoDB)
Web / app servers
- Crash-consistent usually fine
- Daily snapshots, shorter retention
- VM image backup (PBS/Veeam) for image restore
File-server VMs
- Crash-consistent fine
- Hourly when actively used, otherwise daily
- Long retention (30+ days) for ransomware versioning
Domain controllers / AD VMs
- Quiesced via VSS writer (AD is fussy)
- Daily snapshots usually enough
- Add system-state backup
App servers with large RAM caches (Java apps, etc.)
- Hypervisor snapshot with memory state for short-term
- Or app-graceful shutdown before TrueNAS snapshot
Lessons from DATAZONE Projects
- Never retain without restore testing. A snapshot never restored is hope, not strategy. Restore one VM per quarter for real.
- Snapshot monitoring. Which snapshots are unusually large? Which VMs drive growth? Measurable with Grafana and Prometheus — see TrueNAS SMART Monitoring with Grafana.
- Don’t place VMs “somewhere”. Conscious dataset assignment per workload eases retention and restore.
- Don’t forget replication. Snapshots are not backups while on the same pool. ZFS replication to a secondary pool, ideally a second site.
- Watch recordsize. 128K default is often not optimal for VM disks — NFS vmdk/qcow2 works better at 64K or 16K depending on workload.
Conclusion
TrueNAS snapshots are an excellent tool for VM storage — but they replace neither hypervisor snapshots nor VM-aware backup. The right strategy is layered: TrueNAS snapshots as the fast storage-layer safety net, hypervisor snapshots for operational safety before changes, VM-aware backup for granular recovery and long retention.
Understand that and you have a recovery stack instead of just a snapshot schedule. And that’s what makes the difference between “VM back in 5 minutes” and “let’s talk about hours of data loss”.
Sources and Further Reading
- TrueNAS Snapshot Schedule Best Practices
- TrueNAS Proxmox Plugin (official, NVMe/TCP)
- iSCSI vs. NFS for Hypervisor Storage
- Proxmox Backup Server 4.0 What’s New
- Backup Strategy for SMBs (Proxmox + TrueNAS)
- Proxmox Replication Between Two Sites
- Benefits of TrueNAS Snapshots
- TrueNAS Snapshots & Replication Explained
- TrueNAS SMART Monitoring with Grafana
More on these topics:
More articles
TrueNAS Made in USA: Honestly Assessing the Data Privacy Debate for EU Customers
TrueNAS is developed in the US -- is that a GDPR problem? An honest look at CLOUD Act, telemetry, source-available code and support contracts for EU customers.
NFS Ganesha vs. Kernel NFSd: What Makes Sense in TrueNAS and When
User-space Ganesha or kernel NFSd on TrueNAS? We break down strengths, limits and the right pick for 10GbE, Proxmox and ESXi environments.
TrueNAS Snapshots as a Forensic Tool After Ransomware
ZFS snapshots do more than restore data after ransomware. With zfs diff, snapshot timelines and chain of custody they become a full forensic tool.