16 February 2026

Proxmox ZFS Setup: Best Practices and Tuning

Configuring ZFS in Proxmox® requires precise planning and a thorough understanding of its various parameters. This guide shows you how to optimally set up and tune ZFS for maximum performance. The difficulty level is advanced, as ZFS configuration requires deeper system knowledge.

You will need approximately 2–3 hours for the complete setup. Prerequisites include a functional Proxmox system, at least two identical hard drives for the RAID configuration, and access to the Proxmox web GUI and an SSH connection. Upon completion, you will have a professionally configured ZFS system with optimal performance.

Why ZFS is a suitable storage solution for Proxmox

ZFS offers significant advantages for Proxmox environments. The integrated data integrity check automatically detects bit errors and corrects them using checksums. This ensures high data security without additional hardware RAID controllers.

The snapshot functionality enables consistent backups of virtual machines without downtime. ZFS creates atomic snapshots that capture the exact state at the time of creation. These snapshots consume minimal storage space due to the copy-on-write mechanism.

In terms of performance, ZFS excels with intelligent caching. The Adaptive Replacement Cache (ARC) keeps frequently used data in RAM. Additionally, the Level-2 Cache (L2ARC) on SSD storage significantly accelerates access to less frequently used data.

Creating and configuring a Proxmox ZFS pool

Open the Proxmox web GUI and navigate to “Datacenter” → “Storage”. Click “Add” and select “ZFS” from the dropdown list. Enter a unique Pool ID, for example, “zfs-storage”.

For disk selection, switch to the shell. Execute lsblk to display available disks. Identify the desired disks for your ZFS pool. Note that all data on these disks will be deleted.

Create the pool via the command line with the following command:

  1. For RAID-1 (Mirror): zpool create tank mirror /dev/sdb /dev/sdc
  2. For RAID-Z1: zpool create tank raidz /dev/sdb /dev/sdc /dev/sdd
  3. For RAID-Z2: zpool create tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde

Verify successful creation with zpool status. The pool should be displayed as “ONLINE”. Return to the web GUI and refresh the storage overview. Your new ZFS pool will now appear in the list.

Tuning ZFS parameters for performance optimization

The ARC size determines how much RAM ZFS uses for caching. By default, ZFS uses up to 50% of available memory. For Proxmox systems with many VMs, you can adjust this value to 25–30%.

Edit the file /etc/modprobe.d/zfs.conf and add the following line:

options zfs zfs_arc_max=8589934592 (for an 8 GB ARC limit)

The recordsize setting significantly impacts performance. For VM images, use 64K recordsize; for databases, 8K to 16K. Set the recordsize with:

zfs set recordsize=64K tank/vm-storage

Compression reduces storage consumption and can improve performance. LZ4 compression offers a balanced ratio between compression rate and CPU usage:

zfs set compression=lz4 tank

Disable access time updates for improved performance with frequent file accesses:

zfs set atime=off tank

Which ZFS features should you enable?

You should always enable compression. LZ4 causes minimal CPU load and often reduces storage consumption by 20–30%. ZSTD offers higher compression rates but requires more CPU resources.

Deduplication removes duplicate data blocks but consumes significant amounts of RAM. For every TB of deduplicated data, you need approximately 5 GB of RAM. Only enable deduplication if you have sufficient memory and many identical data blocks.

Auto-snapshots create automatic backup points. Install the zfs-auto-snapshot package:

  • Daily snapshots: zfs set com.sun:auto-snapshot:daily=true tank
  • Weekly snapshots: zfs set com.sun:auto-snapshot:weekly=true tank
  • Monthly snapshots: zfs set com.sun:auto-snapshot:monthly=true tank

Note that snapshots consume storage space. Regularly monitor the number of snapshots and delete old ones as needed.

Setting up ZFS monitoring and maintenance in Proxmox

Scrub cycles check data integrity and should be run regularly. Create a cron job for monthly scrubs:

crontab -e and add: 0 2 1 * * /sbin/zpool scrub tank

Monitor the pool status with zpool status -v. Look for error messages or degraded disks. In case of SMART errors, replace affected disks immediately.

Install zfs-zed for automatic email notifications of ZFS events. Configure email settings in /etc/zfs/zed.d/zed.rc:

  • ZED_EMAIL_ADDR=”admin@yourdomain.de”
  • ZED_EMAIL_PROG=”mail”
  • ZED_NOTIFY_VERBOSE=1

Regularly monitor fragmentation with zpool list -o fragmentation. Values above 30% can impair performance.

How credativ® helps with Proxmox ZFS implementations

credativ® supports you with the professional implementation and optimization of ZFS in Proxmox® environments. Our experts analyze your specific requirements and develop tailored storage strategies for Proxmox virtualization.

Our services include:

  • Performance analysis and ZFS tuning for your hardware configuration
  • Automated monitoring solutions with proactive maintenance cycles
  • Disaster recovery concepts with ZFS replication
  • 24/7 support for critical ZFS infrastructures
  • Training for your IT team on ZFS best practices

Contact us for a free initial consultation regarding your Proxmox® ZFS implementation. Our specialists will work with you to develop a suitable storage strategy for your virtualization environment.

Transparency notice

Proxmox® is a registered trademark of Proxmox Server Solutions GmbH. credativ® is an authorized reseller of Proxmox®. Linux® is a registered trademark of Linus Torvalds. The mention of these trademarks serves solely for the factual description of migration scenarios and services provided by credativ®. There is no business connection to the mentioned trademark owners.

Categories: credativ® Inside

About the author

Peter Dreuw

Head of Sales & Marketing

about the person

Peter Dreuw has been working for credativ GmbH since 2016 and has been a team leader since 2017. He joined the management team as VP Services at Instaclustr in 2021. With the acquisition by NetApp, his new role became Senior Manager Open Source Professional Services. As part of the spin-off, he became a member of the management board as an authorized signatory. His responsibilities include sales and marketing management. He has been a Linux user since the early days and has been running Linux systems since kernel 0.97. Despite his extensive experience in operations, he is a passionate software developer and is also well versed in hardware-related systems.

View posts


Share this post: