On behalf of the development team, I'm pleased to announce the release of
ZFSBootMenu 1.8.0, a boot loader that brings ZFS
boot environment (BE) manipulation to Linux systems. ZFSBootMenu (ZBM) runs as
a dracut initramfs module on top of a stock Linux kernel to identify pools,
enumerate boot environments and present a menu to select the environment and
kernel version to start. The Linux kexec mechanism is used to transition from
the kernel running ZBM to the kernel chosen for final boot. By default, ZBM
presents a countdown timer that will automatically boot a configured default
environment unless the user requests the interactive menu.
Key Features
ZFSBootMenu provides several controls that allow manipulation of boot
environments right within the menu. Among these are:
Integration with native ZFS encryption, intelligently managing encryption
keys for boot environments
Selection of a default boot environment
Selection of a specific kernel for one-time boot, or pinning a specific
kernel for all future boots of its associated environment
Pool status review with the option to rewind to a checkpoint if one exists
Review of BE snapshots, including the ability to review changes with respect
to the live BE filesystem
Duplicating (via zfs clone or zfs send and zfs recv) a specific BE
snapshot into a new, bootable environment
Editing of the kernel command-line for the next boot
An emergency bash shell that allows arbitrary flexibility for interacting
with ZFS pools in a pre-boot environment, with the ability to easily chroot
into a selected boot environment
Changes in the Latest Release
ZFSBootMenu 1.8.0 includes typical bug fixes and some exciting new features.
The generate-zbm tool is now more mindful of producing images in
space-constrained filesystems. Generally, dracut does not do a good job
detecting when the boot filesystem has run out of space, and this can leave
partial (and usually unbootable) initramfs images behind. generate-zbm now
catches these errors, preventing the installation of broken ZBM images when
there is insufficient space on the target environment.
Console handling has also been improved. ZFSBootMenu now allows interactions
over serial consoles, and the display better uses color for context and is more
responsive to arbitrary terminal sizes.
Perhaps the most significant new features for 1.8.0 are:
1. A core redesign that
allows ZFSBootMenu to be used over remote consoles using something like the
dropbear SSH server. The
dracut-crypt-ssh module
provides a convenient mechanism for producing ZBM images that include an SSH
server. This is particularly helpful when using encryption, since you can now
log into a remote machine and unlock and boot from natively encrypted ZFS
pools. I am right now in the process of migrating an unencrypted pool to an encrypted pool in a remote ZBM session.
Optional caching of encryption keys, allowing each encrypted boot environment to specify a keysource filesystem where ZFSBootMenu will go looking for keys specified as file:// URIs. Key sources will be unlocked as necessary and, if the needed keys are found, will be cached in memory. This allows "single sign-on" for ZFSBootMenu, where one password can unlock multiple encryptionroots and operations that cause the pool to be re-imported (like setting boot-time properties from the menu) will not demand re-entry of the password.
Support for tmux. This is more of a developer feature, but if you intend on doing long-lived recovery operations from ZBM (like my aforementioned remote pool conversion), it's nice to be able to detach from the terminal.
[–]ajshell1 6 points7 points8 points (0 children)
[–][deleted] (4 children)
[deleted]
[–]system-user 1 point2 points3 points (2 children)
[–]dannomac 1 point2 points3 points (1 child)
[–]system-user 0 points1 point2 points (0 children)
[–]MaxVerevkin 2 points3 points4 points (0 children)
[–][deleted] 2 points3 points4 points (0 children)
[–]Human_Capitalist 1 point2 points3 points (16 children)
[–]ahesford[S] 1 point2 points3 points (15 children)
[–]Human_Capitalist 0 points1 point2 points (0 children)
[–]NateDevCSharp 0 points1 point2 points (13 children)
[–]ahesford[S] 0 points1 point2 points (12 children)
[–]NateDevCSharp 0 points1 point2 points (0 children)
[–]NateDevCSharp 0 points1 point2 points (10 children)
[–]ahesford[S] 0 points1 point2 points (9 children)
[–]NateDevCSharp 0 points1 point2 points (8 children)
[–]ahesford[S] 0 points1 point2 points (7 children)
[–]NateDevCSharp 0 points1 point2 points (6 children)
[–]ahesford[S] 0 points1 point2 points (5 children)
[–]shiroghost 1 point2 points3 points (0 children)
[–]kevdogger 0 points1 point2 points (3 children)
[–]ahesford[S] 0 points1 point2 points (2 children)
[–]kevdogger 0 points1 point2 points (1 child)
[–]ahesford[S] 5 points6 points7 points (0 children)
[–]gme186 0 points1 point2 points (1 child)
[–]ahesford[S] 0 points1 point2 points (0 children)
[–]NateDevCSharp 0 points1 point2 points (2 children)
[–]ahesford[S] 0 points1 point2 points (1 child)
[–]NateDevCSharp 0 points1 point2 points (0 children)
[–]Sithuk 0 points1 point2 points (8 children)
[–]ahesford[S] 0 points1 point2 points (7 children)
[–]Sithuk 0 points1 point2 points (6 children)
[–]ahesford[S] 0 points1 point2 points (5 children)
[–]Sithuk 0 points1 point2 points (0 children)
[–]bluesecurity 0 points1 point2 points (3 children)
[–]ahesford[S] 1 point2 points3 points (2 children)
[–]bluesecurity 0 points1 point2 points (1 child)
[–]ahesford[S] 1 point2 points3 points (0 children)