aboutsummaryrefslogtreecommitdiff
path: root/lib/libbe/be_info.c
Commit message (Collapse)AuthorAgeFilesLines
* libbe(3): const'ify a couple argumentsKyle Evans2020-10-181-1/+1
| | | | | | | | | | libbe will never need to mutate these as we either process them into a local buffer or we just don't touch them and write to a separate out argument. MFC after: 1 week Notes: svn path=/head/; revision=366819
* loader: zfs should support bootonce an nextbootToomas Soome2020-09-211-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | bootonce feature is temporary, one time boot, activated by "bectl activate -t BE", "bectl activate -T BE" will reset the bootonce flag. By default, the bootonce setting is reset on attempt to boot and the next boot will use previously active BE. By setting zfs_bootonce_activate="YES" in rc.conf, the bootonce BE will be set permanently active. bootonce dataset name is recorded in boot pool labels, bootenv area. in case of nextboot, the nextboot_enable boolean variable is recorded in freebsd:nvstore nvlist, also stored in boot pool label bootenv area. On boot, the loader will process /boot/nextboot.conf if nextboot_enable is "YES", and will set nextboot_enable to "NO", preventing /boot/nextboot.conf processing on next boot. bootonce and nextboot features are usable in both UEFI and BIOS boot. To use bootonce/nextboot features, the boot loader needs to be updated on disk; if loader.efi is stored on ESP, then ESP needs to be updated and for BIOS boot, stage2 (zfsboot or gptzfsboot) needs to be updated (gpart or other tools). At this time, only lua loader is updated. Sponsored by: Netflix, Klara Inc. Differential Revision: https://reviews.freebsd.org/D25512 Notes: svn path=/head/; revision=365938
* Drop "All Rights Reserved" from all libbe/bectl filesKyle Evans2020-01-241-1/+0
| | | | | | | | | I sent out an e-mail on 2020/01/21 with a plan to do this to Kyle, Rob, and Wes; all parties have responded in the affirmative that it's OK to drop it from these files. Notes: svn path=/head/; revision=357067
* libbe: fix build against sysutils/openzfs, part 1Kyle Evans2019-12-061-0/+2
| | | | | | | | | | | | This is the half of the changes required that work as-is with both in-tree ZFS and the new hotness, sysutils/openzfs. Highlights are less dependency on header pollution (from somewhere) and using 'mnttab' instead of 'extmnttab'. In the in-tree ZFS, the latter is a #define for the former, but in the port extmnttab is actually a distinct struct that's a super-set of mnttab. We really want mnttab here anyways, so just use it. Notes: svn path=/head/; revision=355460
* Commit missing file from r354116Alan Somers2019-10-261-1/+2
| | | | | | | | | | Pointy-hat-to: Me Reported by: Dan Mack MFC after: 2 weeks MFC-With: 354116 Notes: svn path=/head/; revision=354120
* bectl(3)/libbe(3): Allow BE root to be specifiedKyle Evans2018-11-191-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add an undocumented -r option preceding the bectl subcommand to specify a BE root to operate out of. This will remain undocumented for now, as some caveats apply: - BEs cannot be activated in the pool that doesn't contain the rootfs - bectl create cannot work out of the box without the -e option right now, since it defaults to the rootfs and cross-pool cloning doesn't work like that (IIRC) Plumb the BE root through to libbe(3) so that some things -can- be done to it, e.g. bectl -r tank/ROOT create -e default upgrade bectl -r tank/ROOT mount upgrade /mnt this aides in some upgrade setups where rootfs is not necessarily ZFS, and also makes it easier/possible to regression-test bectl when combined with a file-backed zpool. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D18029 Notes: svn path=/head/; revision=340592
* libbe(3): rewrite init to support chroot usageKyle Evans2018-11-171-20/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | libbe(3) currently uses zfs_be_root and locates which of its children is currently mounted at "/". This is reasonable, but not correct in the case of a chroot, for two reasons: - chroot root may be of a different zpool than zfs_be_root - chroot root will not show up as mounted at "/" Fix both of these by rewriting libbe_init to work from the rootfs down. zfs_path_to_zhandle on / will resolve to the dataset mounted at the new root, rather than the real root. From there, we can derive the BE root/pool and grab the bootfs off of the new pool. This does no harm in the average case, and opens up bectl to operating on different pools for scenarios where one may be, for instance, updating a pool that generally gets re-rooted into from a separate UFS root or zfs bootpool. While here, I've also: - Eliminated the check for /boot and / to be on the same partition. This leaves one open to a setup where /boot (and consequently, kernel/modules) are not included in the boot environment. This may very well be an intentional setup done by someone that knows what they're doing, we should not kill BE usage because of it. - Eliminated the validation bits of BEs and snapshots that enforced 'mountpoint' to be "/" -- this broke when trying to operate on an imported pool with an altroot, but we need not be this picky. Reported by: philip Reviewed by: philip, allanjude (previous version) Tested by: philip MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D18012 Notes: svn path=/head/; revision=340507
* libbe(3): Fix error handling with respect to be_existsKyle Evans2018-09-011-9/+7
| | | | | | | | | | | | | | | | | | Some paths through be_exists will set the error state, others will not There are multiple reasons that a call can fail, so clean it up a bit: all paths now return an appropriate error code so the caller can attempt to distinguish between a BE legitimately not existing and just having the wrong mountpoint. The caller is expected to bubble the error through to the internal error handler as needed. This fixes some unfriendliness with bectl(8)'s activate subcommand, where it might fail due to a bad mountpoint but the only message output is a generic "failed to activate" message. Approved by: re (gjb) Notes: svn path=/head/; revision=338417
* libbe(3)/bectl(8): Standardize $FreeBSD$ IDsKyle Evans2018-08-071-0/+3
| | | | Notes: svn path=/projects/bectl/; revision=337416
* libbe(3)/bectl(8): Standardize copyright headersKyle Evans2018-08-071-2/+3
| | | | | | | | | | | | - File names don't necessarily need to be repeated - Add SPDX tags - Add a missing copyright for Kyle Kneitinger in bectl.8, originally written by him in GSoC 2017; his standard copyright notice has been copied from other files within the same directory to remain consistent with how he clearly wished to portray it Notes: svn path=/projects/bectl/; revision=337414
* libbe(3): Check that dataset is to be mounted at / for be_existsKyle Evans2018-08-071-7/+30
| | | | | | | | | | | | | | | | This makes the be_exists behavior match the comments that assert that we've already checked that the dataset derived from the BE name is set to mount at /. Other changes of note: - bectl_list sees another change; changing mountpoint based on mount status turns out to be a bad idea, so instead make the mounted property of the returned nvlist the path that it's mounted at - Always return the "mountpoint" property in "mountpoint" if it's ste Notes: svn path=/projects/bectl/; revision=337406
* libbe(3): Rename prop_list_builder and snapshot_prop_list_builderKyle Evans2018-08-071-7/+5
| | | | Notes: svn path=/projects/bectl/; revision=337404
* bectl(8): Implement `bectl list -s`Kyle Evans2018-08-051-0/+28
| | | | | | | | | | be_get_dataset_snapshots has been added to libbe(3), effectively returning the same information as be_get_bootenv_props but for snapshots of the given dataset. The assumption is that one will have the BE dataset name before wanting to grab snapshots. Notes: svn path=/projects/bectl/; revision=337358
* bectl: Implement -D ("space if origin datasets were deleted")Kyle Evans2018-08-051-2/+2
| | | | | | | | | | | | This also accomplishes the following: - Proxy through zfs_nicenum as be_nicenum, because it looks better than humanize_number and would presumably be useful to other libbe consumers. - Rename be_get_snapshot_props to be_get_dataset_props, make it more useful Notes: svn path=/projects/bectl/; revision=337343
* bectl(8): Take origin snapshot into account when calculating used spaceKyle Evans2018-08-031-2/+25
| | | | | | | | This more closely matches the behavior for beadm. The associated libbe(3) API is still getting worked out a little bit. Notes: svn path=/projects/bectl/; revision=337228
* libbe(3): Fix checking of zfs_prop_get's return valueKyle Evans2018-08-031-7/+7
| | | | | | | Rather than a boolean_t, it returns an int != 0 for error or 0 for OK. Notes: svn path=/projects/bectl/; revision=337224
* libbe(3): Add be_mounted_at to check a mount pointKyle Evans2018-07-261-10/+2
| | | | | | | | | | | At a bare minimum, this function will return 0 if a BE is mounted at the given path or non-zero otherwise. If the optional 'details' nvlist is supplied, it is filled with an nvpair containing just the information about the BE mounted at the path. This nvpair is structured just as it is for be_get_bootenv_props, except limited to just the single mount point. Notes: svn path=/projects/bectl/; revision=336729
* libbe(3)/bectl(8): Provide and use proper alloc/free for property listsKyle Evans2018-07-251-0/+7
| | | | Notes: svn path=/projects/bectl/; revision=336715
* libbe(3): Use zfs_is_mounted to check mounted and mountpointKyle Evans2018-07-251-8/+4
| | | | Notes: svn path=/projects/bectl/; revision=336713
* libbe(3)/be(8): Drop WARNS overrides, fix all falloutKyle Evans2018-07-251-1/+1
| | | | | | | | | | | | Based on the idea that we shouldn't have all-new library and utility going into base that need WARNS=1... - Decent amount of constification - Lots of parentheses - Minor other nits Notes: svn path=/projects/bectl/; revision=336710
* libbe(3): Add nextboot flag to returned BE informationKyle Evans2018-07-251-1/+23
| | | | Notes: svn path=/projects/bectl/; revision=336709
* bectl(8): Start dumping out BE information with `bectl list`Kyle Evans2018-07-251-11/+6
| | | | | | | | | For the moment, this is a primitive nvlist dump of what we get back from be_get_bootenv_props as a proof-of-concept and to make sure that we're getting back the kind of information we want to see from list. Notes: svn path=/projects/bectl/; revision=336708
* libbe(3): make style consistent with what I'll use going forwardKyle Evans2018-07-251-51/+38
| | | | Notes: svn path=/projects/bectl/; revision=336701
* libbe(3): Disambiguate 'active' a little bit, add 'bootfs'Kyle Evans2018-07-251-2/+2
| | | | | | | | | | | | | | | - Rename 'active' to 'rootfs', which is used in other places to describe the currently booted (or about to be booted) BE. - Add 'bootfs', which indicates the next boot environment to be booted. This is pulled from the BOOTFS zpool property. - Go ahead and keep an open handle to the active zpool. We might need to enumerate datasets, get properties, and set properties (e.g. bootfs) throughout other libbe bits, and a single handle isn't overly expensive. Notes: svn path=/projects/bectl/; revision=336696
* Import libbe(3)/be(1) from socsvn/soc2017/kneitinger/libbe-headKyle Evans2018-07-241-0/+245
Notes: svn path=/projects/bectl/; revision=336668