beadm(8) on Solnix vs Linux and the BSDs
beadm is the illumos boot-environment manager, run on Solnix as /usr/sbin/beadm or /sbin/beadm. FreeBSD's counterpart is bectl. The subcommands overlap (create, destroy, list, mount, unmount, rename, activate), but bectl destroys without confirmation, has no rollback in the bundle's synopsis, and adds jail, export, import and check.
The manual pages
- Solnix: beadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - FreeBSD: bectl(8) 15.1-RELEASE (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos beadm at /usr/sbin/beadm and /sbin/beadm. No other variants are shipped. The Solnix page gives only the synopsis and a list of operations, with no per-option descriptions, so option meanings below are compared only where the synopsis shows a difference. The bundle has no Linux, OpenBSD or NetBSD counterpart page for boot environments.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| FreeBSD | command name and model | Solnix uses beadm; FreeBSD uses bectl. Both manage ZFS boot environments with subcommands. bectl takes an optional global -r beroot to name a parent dataset. The beadm synopsis has no equivalent.Source: Solnix beadm(8) SYNOPSIS; FreeBSD bectl(8) SYNOPSIS, -r beroot |
| FreeBSD | destroy confirmation | FreeBSD bectl destroy removes the boot environment without confirmation, and the page says this is unlike beadm(8). With -F it also unmounts automatically without confirmation. The Solnix page does not describe -f or -F for destroy.Source: FreeBSD bectl(8) destroy; Solnix beadm(8) SYNOPSIS (destroy [-fFsv]) |
| FreeBSD | rollback | Solnix beadm has rollback beName snapshot (or beName@snapshot) to roll a BE back to a snapshot. The bectl synopsis in the bundle has no rollback subcommand. Source: Solnix beadm(8) SYNOPSIS, DESCRIPTION; FreeBSD bectl(8) SYNOPSIS |
| FreeBSD | mount arguments | beadm mount requires a mountpoint and accepts -s ro|rw and -v. bectl mount takes the mountpoint as optional and has no listed options.Source: Solnix beadm(8) SYNOPSIS (mount); FreeBSD bectl(8) SYNOPSIS (mount) |
| FreeBSD | create options | beadm create takes -a or -t, -d description, -o property=value, -p zpool and -v. bectl create takes -r for a recursive BE or snapshot and -E for an empty BE. Neither set of flags appears in the other synopsis.Source: Solnix beadm(8) SYNOPSIS (create); FreeBSD bectl(8) create -r, -E |
| FreeBSD | list options | beadm list takes -a or -ds, -H, -k or -K with date, name or space, and -v. bectl list takes -a, -D, -H, -s, and -c or -C property for sort order (-C is descending). The sort flags differ.Source: Solnix beadm(8) SYNOPSIS (list); FreeBSD bectl(8) list -c, -C, -D |
| FreeBSD | scripting output from list | Both list subcommands accept -H. bectl documents it as no headers and tab-separated fields. The Solnix page does not describe -H, so check its output before parsing it in a script.Source: FreeBSD bectl(8) list -H; Solnix beadm(8) SYNOPSIS (list [-H]) |
| FreeBSD | subcommands only on FreeBSD | bectl has check, export, import, jail and ujail/unjail. The beadm synopsis has none of these. Source: FreeBSD bectl(8) SYNOPSIS; Solnix beadm(8) SYNOPSIS |
| FreeBSD | temporary activation | Both activate subcommands accept -t or -T. bectl documents -t as taking effect only for the next boot, and -T as removing the temporary boot-once setting. The Solnix page does not describe these flags.Source: FreeBSD bectl(8) activate; Solnix beadm(8) SYNOPSIS (activate [-v] [-t | -T]) |
| FreeBSD | exit status | Solnix beadm returns 0 on success and >0 on failure. bectl check exits 0 if boot environments are supported and used; the page says any other status is not defined. Source: Solnix beadm(8) EXIT STATUS; FreeBSD bectl(8) check |
Everyday tasks
| Task | Solnix | FreeBSD |
|---|---|---|
| list boot environments | beadm list | bectl list |
| create a BE from the current BE | beadm create beName | bectl create newBeName |
| create a BE from an inactive BE or snapshot | beadm create -e non-activeBeName | beName@snapshot beName | bectl create -e nonActiveBe | beName@snapshot newBeName |
| snapshot a BE | beadm create beName@snapshot | bectl create beName@snapshot |
| activate a BE | beadm activate beName | bectl activate beName |
| activate for the next boot only | beadm activate -t beName | bectl activate -t beName |
| mount a BE | beadm mount beName mountpoint | bectl mount beName [mountpoint] |
| unmount a BE | beadm unmount beName | mountpoint | bectl unmount beName |
| rename a BE | beadm rename beName newBeName | bectl rename origBeName newBeName |
| destroy a BE | beadm destroy beName | bectl destroy beName |
| roll back a BE to a snapshot | beadm rollback beName snapshot | — |
Standards
- POSIX: beadm is not a POSIX.1-2024 utility.
- Solnix: Interface Stability: Uncommitted.
Writing portable scripts
- Do not assume beadm and bectl are interchangeable: pick the tool that is present, and note that bectl destroy asks for no confirmation while the bectl page says beadm does.
- Pass the mountpoint explicitly to mount. beadm requires it, and bectl accepts it.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.