freebsd-nq/cmd
Paul Dagnelie 108a454a46
Add support for boot environment data to be stored in the label
Modern bootloaders leverage data stored in the root filesystem to 
enable some of their powerful features. GRUB specifically has a grubenv 
file which can store large amounts of configuration data that can be 
read and written at boot time and during normal operation. This allows 
sysadmins to configure useful features like automated failover after 
failed boot attempts. Unfortunately, due to the Copy-on-Write nature 
of ZFS, the standard behavior of these tools cannot handle writing to
ZFS files safely at boot time. We need an alternative way to store 
data that allows the bootloader to make changes to the data.

This work is very similar to work that was done on Illumos to enable 
similar functionality in the FreeBSD bootloader. This patch is different 
in that the data being stored is a raw grubenv file; this file can store 
arbitrary variables and values, and the scripting provided by grub is 
powerful enough that special structures are not required to implement 
advanced behavior.

We repurpose the second padding area in each label to store the grubenv 
file, protected by an embedded checksum. We add two ioctls to get and 
set this data, and libzfs_core and libzfs functions to access them more 
easily. There are no direct command line interfaces to these functions; 
these will be added directly to the bootloader utilities.

Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Paul Dagnelie <pcd@delphix.com>
Closes #10009
2020-05-07 09:36:33 -07:00
..
arc_summary arc_summary: Make get_descriptions per platform 2020-02-27 17:15:06 -08:00
arcstat Changed decimals to integers in the arcstat script 2020-03-18 11:50:45 -07:00
dbufstat Detect if sed supports --in-place 2019-10-16 19:19:48 -07:00
fsck_zfs Fix typos in cmd/ 2019-08-30 09:43:30 -07:00
mount_zfs OpenZFS restructuring - libspl 2019-10-02 10:39:48 -07:00
raidz_test Add AltiVec RAID-Z 2020-01-23 11:01:24 -08:00
vdev_id Fix typos in cmd/ 2019-08-30 09:43:30 -07:00
zdb zdb: Fix ignored zfs_arc_max tuning 2020-04-30 17:48:58 -07:00
zed Systemd mount generator: Generate noauto units; add control properties 2020-02-14 15:32:55 -08:00
zfs zfs_create: round up volume size to multiple of bs 2020-04-24 19:04:34 -07:00
zgenhostid bash scripts: use /usr/bin/env for bash shebangs 2020-02-10 13:13:46 -08:00
zhack Add zfs_file_* interface, remove vnodes 2019-11-21 09:32:57 -08:00
zinject Add support for boot environment data to be stored in the label 2020-05-07 09:36:33 -07:00
zpool Fix column width calculation issue with certain terminal widths 2020-05-06 17:17:38 -07:00
zstream Fix unitialized variable in zstream redup command 2020-04-23 15:54:38 -07:00
zstreamdump Minor zstream redup command fixes 2020-04-10 21:10:09 -07:00
ztest libzfs: Fix bounds checks for float parsing 2020-03-16 11:56:29 -07:00
zvol_id OpenZFS restructuring - libspl 2019-10-02 10:39:48 -07:00
zvol_wait zvol_wait should ignore redacted zvols 2019-11-06 10:51:19 -08:00
Makefile.am Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00