Build1 publisher3 min readPublished
A five-line Proxmox ZFS setup block calls the same tool by three different names
Proxmox installs OpenZFS by default, and a dev.to guide to running it is solid on dataset structure, snapshot cost and pool permanence. Its worked example names the ZFS tool three ways in five lines, and the text stops before the ARC section.
The Engineer · Build desk

What happened
- Proxmox VE uses OpenZFS as its default storage, and a dev.to guide walks through running it in production: pool layout, datasets, snapshots and cache tuning.
- The author says the filesystem eats RAM and punishes wrong decisions with heavy throttling, and promises to show how to fence in the ARC before it forces VMs and containers into hibernation.
- The advice is to create explicit datasets for VM disks, container storage and backups, and the author calls stacking everything on rpool nonsense.
- The worked example builds a pool named tank from four identical NVMe SSDs in raidz1, then prints five command lines under three different tool names.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- decision Anyone following this guide has to settle vdev geometry before the first VM disk is written, because the author's rule is that no disk joins or leaves a pool without rebuilding the whole thing.
- constraint Snapshot retention becomes a write-throughput budget: a pre-update snapshot left in place on a busy VM dataset holds blocks out of garbage collection for as long as it lives.
- capability Splitting datasets by purpose lets a compression change or a quota be aimed at VM images alone, leaving the backup dataset untouched by the same command.
- contradiction The guide names ARC control as its main deliverable and the supplied text stops before it, so a reader who came for a memory ceiling leaves with structural advice only.
The zero-cost snapshot is a measurement taken at creation time. ZFS is copy-on-write, so the guide is right that a new snapshot adds no bytes until the original pages change, and that only then are the old blocks kept separately for the snapshot [13]. Idle datasets stay cheap. A VM disk under write load starts diverging at the next write, and the same article warns that while the snapshot exists the referenced blocks block garbage collection and can drastically reduce write performance [14]. How much a snapshot costs depends on how much the dataset is written while it exists. The author recommends taking one before a risky update [19], and states the limit bluntly: "Ein Snapshot ist kein Backup!" [15]
The worked example is a pool called tank built from four identical NVMe SSDs in raidz1, which the article glosses as the equivalent of RAID 5 [9]. Single parity across four devices leaves three devices of usable capacity, 75 percent of raw, and tolerates one failure [12]. That geometry has to be settled before data lands, because the author's position on pool changes allows nothing later: "Ein ZFS-Pool ist eine Familie, da kommt niemand mehr dazu oder raus, ohne alles neu aufzusetzen" [6]. No disk joins or leaves without rebuilding everything. The two mistakes named are mixing disk types and adding single disks to an existing mirror after the fact [5].
The commands under that example need correcting before they run. Five command lines carry three tool names: zfcpool create for the pool, zfssnapshot create for each of the three datasets, and zfs set mountpoint= for the mount path [10]. At most one of those names can be the real command, and four of the five lines use something other than zfs [11]. A reader gets to find out which one by pasting it. The published text also switches language mid-sentence, with a Chinese phrase inside a German paragraph and a French spelling in the RAID 5 aside [17]. In my view that is transcription damage and not the author's shell history, and the structural advice around the block stands without it: separate datasets for VM disks, container storage and backups, each with its own properties over one shared pool [7][8].
Proxmox installs OpenZFS by default, so an admin gets ARC's memory behaviour without having chosen it [1]. Under ZFS there is no separate volume manager in the LVM sense, and pool plus datasets is the whole model [4]. The introduction names the cache as the thing to bring under control and promises to fence in the ARC before it forces VMs and containers into hibernation [3]. The text supplied ends mid-word in the snapshot section, before any ARC configuration appears [16]. For that section to be usable it would need a ceiling value, the file the parameter belongs in, and whether the change takes effect at boot or immediately.
What to watch
- Whether the author publishes the ARC section with a ceiling value and the file the parameter goes in.
- Whether the command block is corrected on dev.to, so the pool-creation line matches the dataset lines.
- Whether any follow-up measures the snapshot-retention penalty on write performance on a raidz1 NVMe pool instead of only warning about it.