bootadm(8) on Solnix vs Linux and the BSDs
bootadm is the illumos tool at /usr/sbin/bootadm (also /sbin/bootadm). It manages the boot archive, installs the boot loader onto a ZFS pool, and edits the x86 boot menu. The counterparts are different tools: the page documents no UEFI boot-variable editing like efibootmgr, and no raw disk or device argument like installboot or grub-install. It takes a pool name.
The manual pages
- Solnix: bootadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: bootctl(1) systemd-260.5 (different command, similar job)
- Linux: efibootmgr(8) efibootmgr-18 (different command, similar job)
- Linux: grub-install(8) grub-2.12 (different command, similar job)
- FreeBSD: efibootmgr(8) 15.1-RELEASE (different command, similar job)
- OpenBSD: installboot(8) 8.0 (different command, similar job)
- NetBSD: installboot(8) 11.0 (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos bootadm. No other variants are shipped. Several subcommands are x86-only: install-bootloader and the boot menu (set-menu, list-menu) are documented for x86 boot environments, and -M is an error on non-x86 systems. On OpenBoot PROM machines such as SPARC, boot behaviour is set with PROM variables managed by eeprom(8). The page's SEE ALSO also lists beadm(8), boot(8), installboot(8) and menu.lst(5).
Differences
| Compared with | Topic | What differs |
|---|---|---|
| all four | what the tool manages | bootadm manages the boot archive (update-archive, list-archive), installs the boot loader on a ZFS pool, and edits the boot menu. None of the counterpart pages in the bundle describe a boot archive. bootctl, efibootmgr and installboot cover other tasks. Source: Solnix bootadm(8) SYNOPSIS, DESCRIPTION; Linux bootctl(1) DESCRIPTION; FreeBSD efibootmgr(8) DESCRIPTION; OpenBSD installboot(8) DESCRIPTION; NetBSD installboot(8) DESCRIPTION |
| Linux, OpenBSD, NetBSD | target of the bootloader install | bootadm install-bootloader takes a ZFS pool with -P. Without -P it uses the pool the system booted from, and -P is required if it did not boot from a pool. OpenBSD installboot takes a disk, NetBSD a filesystem, and grub-install an INSTALL_DEVICE.Source: Solnix bootadm(8) install-bootloader, -P; OpenBSD installboot(8) SYNOPSIS (disk); NetBSD installboot(8) SYNOPSIS (filesystem); Linux grub-install(8) INSTALL_DEVICE |
| Linux, FreeBSD | UEFI boot variables | efibootmgr (Linux and FreeBSD) creates, deletes and orders UEFI Boot entries and sets BootNext. The bootadm page mentions no UEFI variables, boot entries or BootNext. Its set-menu changes only the default entry and timeout in the boot menu. Source: Linux efibootmgr(8) DESCRIPTION, -c, -o, -n; FreeBSD efibootmgr(8) DESCRIPTION; Solnix bootadm(8) set-menu key=value |
| all four | -n meaning | bootadm -n checks archive content without updating it (update-archive). OpenBSD and NetBSD installboot -n is a dry run. On Linux efibootmgr, -n XXXX sets BootNext, and FreeBSD -n --bootnext does the same. FreeBSD's dry run is -D.Source: Solnix bootadm(8) -n; OpenBSD installboot(8) -n; NetBSD installboot(8) -n; Linux efibootmgr(8) -n; FreeBSD efibootmgr(8) -n, -D |
| Linux, FreeBSD, NetBSD | -f meaning | bootadm -f forces archive regeneration (update-archive) or overrides boot loader versioning constraints (install-bootloader). Linux efibootmgr -f re-connects devices. FreeBSD efibootmgr -f requests the firmware UI. NetBSD installboot -f ignores some errors.Source: Solnix bootadm(8) -f; Linux efibootmgr(8) -f, --reconnect; FreeBSD efibootmgr(8) -f, --fw-ui; NetBSD installboot(8) -f |
| Linux, OpenBSD | -R and -p meaning | bootadm -R altroot applies the operation to an alternate root; -p platform needs -R and must be i86pc, sun4u or sun4v. On bootctl, -R prints the root device (alternate root is --root=), and -p prints the ESP path. OpenBSD uses lowercase -r root, and its -p prepares the boot filesystem.Source: Solnix bootadm(8) -R, -p; Linux bootctl(1) -R, -p, --root; OpenBSD installboot(8) -r, -p |
| all four | -M, -P and other single-letter flags | bootadm -M also installs to the MBR (x86 only) and -P names the pool. On Linux efibootmgr, -M sets mirrored memory above 4GB. -c on efibootmgr creates an entry, on OpenBSD sets the default boot disk, and on NetBSD clears the bootstrap. bootadm has no -c.Source: Solnix bootadm(8) -M, -P; Linux efibootmgr(8) -M, -c; FreeBSD efibootmgr(8) -c; OpenBSD installboot(8) -c; NetBSD installboot(8) -c |
| Linux, FreeBSD | boot menu timeout and default | bootadm set-menu timeout=seconds sets the auto-boot timeout, where -1 disables auto boot. default=entrynum picks the menu item. Linux and FreeBSD efibootmgr set the timeout with -t and order entries with -o. FreeBSD -T deletes the timeout.Source: Solnix bootadm(8) key=value (default, timeout); Linux efibootmgr(8) -t, -o; FreeBSD efibootmgr(8) -t, -T, -o |
| all four | menu file location | list-menu reports the boot menu, normally /<boot pool root dataset mountpoint>/boot/menu.lst. The counterpart pages describe firmware variables, an ESP (bootctl checks /efi/, /boot/ and /boot/efi/ in turn) or bootstrap blocks, not a menu.lst file. Source: Solnix bootadm(8) DESCRIPTION (list-menu); Linux bootctl(1) --esp-path; FreeBSD efibootmgr(8) DESCRIPTION |
| NetBSD | UEFI installs | NetBSD says installboot is not needed for UEFI boot, which uses a loader in the EFI system partition. The bootadm page does not describe UEFI; it documents installing the loader to the disks of a ZFS pool. Source: NetBSD installboot(8) UEFI boot; Solnix bootadm(8) install-bootloader |
| all four | -v and -o meaning | bootadm -v prints stale files on stderr (update-archive) or task output (install-bootloader). -o key=value picks the menu entry to inspect in list-menu. On efibootmgr, -o sets BootOrder. On NetBSD installboot, -o gives machine-specific options.Source: Solnix bootadm(8) -v, -o; Linux efibootmgr(8) -o; FreeBSD efibootmgr(8) -o, -v; NetBSD installboot(8) -o |
| all four | exit status | bootadm returns 0 on success and 1 on error. The bundle shows no EXIT STATUS section for the counterpart pages, so their exit values cannot be compared. Source: Solnix bootadm(8) EXIT STATUS; counterpart pages in bundle |
Everyday tasks
| Task | Solnix | Linux | FreeBSD | OpenBSD | NetBSD |
|---|---|---|---|---|---|
| install or repair the boot loader | bootadm install-bootloader [-P pool] | grub-install INSTALL_DEVICE; bootctl (install command) | — | installboot disk | installboot filesystem primary [secondary] |
| regenerate the boot archive | bootadm update-archive | — | — | — | — |
| set boot menu timeout | bootadm set-menu timeout=seconds | efibootmgr -t seconds | efibootmgr -t timeout | — | — |
| choose default boot entry | bootadm set-menu default=entrynum | efibootmgr -o XXXX,YYYY | efibootmgr -o bootorder | — | — |
| show boot entries | bootadm list-menu | bootctl status | efibootmgr -v | — | — |
| dry run | bootadm update-archive -n | bootctl --dry-run | efibootmgr -D | installboot -n | installboot -n |
| operate on an alternate root | bootadm ... -R altroot | bootctl --root=root | — | installboot -r root | — |
Standards
- POSIX: bootadm is not a POSIX.1-2024 utility.
- Solnix: Interface Stability: Committed.
- FreeBSD: efibootmgr(8) STANDARDS: the Unified Extensible Firmware Interface Specification is available from www.uefi.org.
Writing portable scripts
- Do not share boot-loader scripts across these systems: the tools, targets (ZFS pool, disk, filesystem, ESP) and flags differ. Branch on which tool exists.
- Avoid
-n,-f,-pand-Rin cross-system boot scripts. Each means something different in bootadm, efibootmgr, bootctl and installboot.
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.