Post-Install: Storage
What this category covers
None of these are in the Uninstall menu
Optimize ZFS ARC size
The Adaptive Replacement Cache (ARC) is ZFS's in-memory read cache. Without explicit tuning, ZFS happily grabs up to half the host RAM for itself, which is excessive on a Proxmox host that also needs memory for VMs and LXCs. This option caps ARC to a sane fraction of total RAM based on the size of the machine.
Sizing rules
| Host RAM | ARC min | ARC max |
|---|---|---|
| ≤ 16 GB | 512 MB | 512 MB |
| 17 – 32 GB | 1 GB | 1 GB |
| > 32 GB | RAM / 16 | RAM / 8 |
On a 64 GB host, that means 4 GB min / 8 GB max for ARC. The config is written to /etc/modprobe.d/99-zfsarc.conf and enables a few extra ZFS tunables (L2ARC prefetch on, L2ARC write max at 500 MB, longer TXG timeout).
Requires a reboot to take effect
zfs kernel module loads. They do not apply on a live system — you'll need to reboot the host for the cap to kick in. The script sets the "reboot required" flag automatically.Safe on non-ZFS hosts
zfs command before touching anything. On ext4 / LVM-only Proxmox hosts, ticking this option is a no-op — nothing gets written.Verification and manual rollback
# Check the config file is in place
cat /etc/modprobe.d/99-zfsarc.conf
# After reboot, check actual ARC limits (in bytes)
cat /sys/module/zfs/parameters/zfs_arc_min
cat /sys/module/zfs/parameters/zfs_arc_max
# Manual rollback
rm /etc/modprobe.d/99-zfsarc.conf
update-initramfs -u -k all
# (reboot for ZFS to load with defaults again)Install ZFS auto-snapshot
Installs the zfs-auto-snapshot package and rewrites its cron schedules so snapshots are taken automatically at several intervals. A great no-effort safety net on top of your regular vzdump backups.
Snapshot cadence ProxMenux configures
| Label | Runs | Snapshots kept |
|---|---|---|
| frequent | every 15 min | 4 |
| hourly | every hour | 1 |
| daily | once a day | 1 |
| weekly | once a week | 1 |
| monthly | once a month | 1 |
Conservative keep counts
/etc/cron.d/zfs-auto-snapshot, /etc/cron.hourly/zfs-auto-snapshot, etc. after the script runs.Only useful on ZFS pools
Verification and manual rollback
# List existing auto-snapshots across all ZFS datasets
zfs list -t snapshot | grep zfs-auto-snap
# Check the schedules
grep . /etc/cron.d/zfs-auto-snapshot /etc/cron.hourly/zfs-auto-snapshot \
/etc/cron.daily/zfs-auto-snapshot /etc/cron.weekly/zfs-auto-snapshot \
/etc/cron.monthly/zfs-auto-snapshot
# Manual rollback (removes the package + destroys no snapshots)
apt purge zfs-auto-snapshot
# Existing snapshots remain on your pools unless you destroy them explicitlyEnable ZFS autotrim (SSD/NVMe pools)
Enables the autotrim property on every ZFS pool that is backed exclusively by SSDs or NVMe drives with TRIM support. Pools that include a single HDD vdev are skipped automatically — TRIM on rotational drives is meaningless and ZFS will refuse it. Pools that were already set to autotrim=on are left as they are.
What TRIM does, and why it matters on ZFS
SSDs / NVMe drives manage internal storage in fixed-size erase blocks that are much larger than the logical sectors the filesystem talks to. When a filesystem deletes a file, the drive doesn't know — it still thinks those sectors are in use, so its internal garbage collector keeps shuffling stale data around to free new erase blocks. TRIM is the standard command the OS uses to tell the drive "these sectors are now free, you can erase them ahead of time".
Without TRIM, SSD performance degrades over time as the drive runs out of pre-erased blocks and has to do erase-on-write, and write amplification increases — both shortening the drive's useful life. With TRIM enabled, the drive can keep a healthy pool of empty blocks ready to write into.
On ZFS, autotrim=on is the modern equivalent of the periodic zpool trim <pool> command — instead of having to remember to run a trim manually (or schedule one), the pool issues TRIM commands automatically and continuously as blocks become free. It's low-overhead and the recommended setting for SSD-backed pools.
Why is this practical to enable?
- Sustained write performance. SSDs that never see TRIM commands slow down measurably over months. Autotrim keeps the controller's job easier.
- Drive longevity. Lower write amplification means fewer total NAND writes for the same amount of data — measurable in years of useful life for the disk.
- No scheduled cron job to remember. Unlike a periodic
zpool trim, autotrim is fire-and-forget — the pool handles it on its own.
When is this necessary?
- You should enable it on any ZFS pool whose vdevs are all SSD or NVMe with TRIM support — the typical Proxmox install on consumer or enterprise SSDs.
- The script skips it automatically on:
- Pools containing any HDD (rotational) vdev — TRIM is meaningless there.
- Drives without
discard_granularityexposed in sysfs — usually old SSDs without TRIM, or pass-through paths where the OS can't see the underlying device. - Pools where ZFS itself reports the property unsupported (rare; very old pools).
- Pools already set to
autotrim=on(no-op).
- Not relevant on ext4-only hosts — there's nothing for ZFS to trim. The function exits with a friendly message in that case.
Why only the pools ProxMenux changed are recorded
/usr/local/share/proxmenux/zfs_autotrim_pools) when it actively flipped that pool from off to on. Pools you had on autotrim before running the script are left out of the list, so a future Uninstall doesn't turn off settings you configured yourself — only ProxMenux's own changes are reverted.Manual equivalent (run on your server)
The full sequence the script runs against each pool is replicable by hand. This is what you would type if you wanted to do the same thing on a single pool without ProxMenux:
# 1. List your ZFS pools
zpool list -H -o name
# 2. Check the current autotrim setting on a pool
zpool get autotrim <pool>
# 3. Verify the pool is backed by SSD/NVMe with TRIM support
# For each vdev (use the device path you see in 'zpool status -P <pool>'):
DEV=sda # replace with the actual short name (sda, nvme0n1, ...)
cat /sys/block/${DEV}/queue/rotational # must be 0 (SSD/NVMe, not HDD)
cat /sys/block/${DEV}/queue/discard_granularity # must be > 0 (TRIM supported)
# 4. Turn it on
zpool set autotrim=on <pool>
# 5. Confirm
zpool get autotrim <pool>Verification and manual rollback
# Verify autotrim is active on every pool ProxMenux touched
cat /usr/local/share/proxmenux/zfs_autotrim_pools
while read -r p; do
zpool get autotrim "$p"
done < /usr/local/share/proxmenux/zfs_autotrim_pools
# Manual rollback — disable autotrim on a specific pool
zpool set autotrim=off <pool>
# Or revert all pools ProxMenux changed (manual equivalent of the Uninstall option)
while read -r p; do
zpool set autotrim=off "$p"
done < /usr/local/share/proxmenux/zfs_autotrim_poolsNeed a one-shot trim instead of continuous?
zpool trim <pool> — same end goal, different cadence.Increase vzdump backup speed
By default, Proxmox vzdump throttles backups to protect running VMs/CTs from IO starvation. On many setups that throttle is more conservative than needed. This option removes the bandwidth cap and lowers the I/O priority so vzdump can saturate the storage path during backup windows.
What gets changed in /etc/vzdump.conf
bwlimit: 0 # No bandwidth limit (was capped by default)
ionice: 5 # Lower I/O priority (5 = best-effort class, lowest priority in that class)No backup of vzdump.conf
/etc/vzdump.conf in place without creating a .bak first. If you had custom values there (bwlimit, ionice, compress, pigz, tmpdir, exclude-path, etc.), the changes to those two lines are made with sed — surrounding config is preserved — but there's no "undo" snapshot. Make a manual backup if your config is non-trivial: cp /etc/vzdump.conf /etc/vzdump.conf.pre-proxmenux.When to skip this
bwlimit for that reason, keep it — skip this option.Verification and manual rollback
# Check current vzdump config
grep -E "^(bwlimit|ionice):" /etc/vzdump.conf
# Manual rollback (comment out the two lines — restores Proxmox defaults)
sed -i 's/^bwlimit: 0/#bwlimit: KBPS/' /etc/vzdump.conf
sed -i 's/^ionice: 5/#ionice: PRI/' /etc/vzdump.confRelated
- ZFS Management commands — zpool / zfs reference for ARC, snapshots, scrub.
- Storage and Disks commands — generic block-device and Proxmox storage reference.
- Backup and Restore commands — vzdump CLI reference (now without the legacy bwlimit / ionice caps).
- Uninstall Optimizations — revert ARC / vzdump changes.
- Customizable Post-Install — back to the parent menu.