The Unix Way ■ Episode 03
You are about to upgrade your server. Packages, kernel, the lot. Something might break. You want a way back.
The question is not whether ZFS can help you. It can, brilliantly, on both platforms. The question is how much of the safety net you have to knit yourself.
FreeBSD: The Integrated Path
bectl create pre-upgrade
pkg upgrade
Done. If it breaks, reboot, select the old boot environment from the menu. You are back. Thirty seconds.
bectl
ships in the base system since FreeBSD 12.0. No package to install.
No configuration. The bootloader knows about boot environments
natively. freebsd-update goes further: it creates a
boot environment automatically before applying patches. You do not
even have to ask.
bectl list
BE Active Mountpoint Space Created
pre-upgrade - - 906M 2026-02-09
default NR / 2.1G 2025-11-20
Select. Reboot. Done.
Linux: Assembly Required
Step 1: Install ZFS. It is not in the kernel. It is an out-of-tree module, built via DKMS against your kernel headers. If the kernel updates before OpenZFS supports it, the build fails. If your root is on ZFS, you do not boot.
Linus Torvalds, January 2020: "Don't use ZFS. It's that simple."
Step 2: Configure root-on-ZFS. The installer probably does not support it. Ubuntu had it, removed it in 23.04, partially restored it in 23.10 as "experimental."
Step 3: Install a boot environment manager.
bectl does not exist on Linux. You need
ZFSBootMenu
(which replaces GRUB entirely), or zectl, or a
Linux port of beadm. All third-party.
Step 4: Ubuntu tried to solve this with zsys. Automatic snapshots, boot environments, the works. Development ceased in 2021. The GitHub issue titled "Don't use ZSYS" tells the rest.
Step 5: Hope your next kernel update does not break the DKMS build. Documented failures: kernel 6.2.8 (2023), kernel 6.4 (2023), kernel 6.12 (2025). Each time, root-on-ZFS systems could not boot until the kernel was manually downgraded from a rescue environment.
The Commands Are the Same
This is the part worth emphasising. The ZFS commands are identical. Both platforms run OpenZFS. The snapshots work the same way:
zfs snapshot zroot@before-upgrade
zfs rollback zroot@before-upgrade
Instant. Zero bytes at creation. Copy-on-write. Brilliant engineering, regardless of platform. ZFS never overwrites data. A snapshot pins the current block pointers. Sub-second, no performance impact.
Incremental backups are equally elegant:
zfs send -i @monday @tuesday | ssh backup zfs recv tank/backup
One pipe. Encrypted, deduplicated, compressed. The same command on both operating systems.
The Difference Is Not ZFS
The difference is what surrounds it.
On FreeBSD, ZFS is
in the kernel.
bectl is in the base system. The bootloader understands
boot environments. freebsd-update creates safety nets
automatically. It is one team, one operating system, one design.
On Linux, ZFS is a legal grey area bolted on from the outside. Every kernel update is a trust exercise.
The Btrfs Argument
Fair question, and credit where it is due. openSUSE with Btrfs and
snapper is the closest Linux gets to the FreeBSD
experience. Automatic snapshots before zypper upgrades,
GRUB rollback support. It works.
The caveats: no equivalent to zfs send/receive for
incremental backups. No native RAID (Btrfs RAID5/6 still carries a
data loss warning).
Production-ready since roughly 2015. ZFS: since 2005. LVM snapshots
exist too. Nobody would call them elegant.
Linux has options. They are younger, less integrated, and come with their own trade-offs.
The Point
Same filesystem. Same commands. Rather different experience.
One platform treats ZFS as a first-class citizen. The other treats it as a guest who might overstay. The engineering is identical. The integration is not.