aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRichard Laager <[email protected]>2020-08-18 01:12:39 -0500
committerGitHub <[email protected]>2020-08-17 23:12:39 -0700
commiteaa25f1a8e5f6ed72c2095a06df14621ed04ee6d (patch)
treec7dc274d9cfbaee1aea9a22ac2c153f8400b9c2a /lib
parentd60c0dbdf390c4fe7ad66bc2f79ee076bb046fb1 (diff)
Remove GRUB restrictions
The GRUB restrictions are based around the pool's bootfs property. Given the current situation where GRUB is not staying current with OpenZFS pool features, having either a non-ZFS /boot or a separate pool with limited features are pretty much the only long-term answers for GRUB support. Only the second case matters in this context. For the restrictions to be useful, the bootfs property would have to be set on the boot pool, because that is where we need the restrictions, as that is the pool that GRUB reads from. The documentation for bootfs describes it as pointing to the root pool. That's also how it's used in the initramfs. ZFS does not allow setting bootfs to point to a dataset in another pool. (If it did, it'd be difficult-to-impossible to enforce these restrictions cross-pool). Accordingly, bootfs is pretty much useless for GRUB scenarios moving forward. Even for users who have only one pool, the existing restrictions for GRUB are incomplete. They don't prevent you from enabling the unsupported checksums, for example. For that reason, I have ripped out all the GRUB restrictions. A little longer-term, I think extending the proposed features=portable system to define a features=grub is a much more useful approach. The user could set that on the boot pool at creation, and things would Just Work. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Laager <[email protected]> Closes #8627
Diffstat (limited to 'lib')
-rw-r--r--lib/libzfs/libzfs_pool.c20
1 files changed, 1 insertions, 19 deletions
diff --git a/lib/libzfs/libzfs_pool.c b/lib/libzfs/libzfs_pool.c
index f848cb3cf..b75ab3ec1 100644
--- a/lib/libzfs/libzfs_pool.c
+++ b/lib/libzfs/libzfs_pool.c
@@ -3143,7 +3143,6 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk,
uint_t children;
nvlist_t *config_root;
libzfs_handle_t *hdl = zhp->zpool_hdl;
- boolean_t rootpool = zpool_is_bootable(zhp);
if (replacing)
(void) snprintf(msg, sizeof (msg), dgettext(TEXT_DOMAIN,
@@ -3211,18 +3210,8 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk,
zcmd_free_nvlists(&zc);
- if (ret == 0) {
- if (rootpool) {
- /*
- * XXX need a better way to prevent user from
- * booting up a half-baked vdev.
- */
- (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "Make "
- "sure to wait until resilver is done "
- "before rebooting.\n"));
- }
+ if (ret == 0)
return (0);
- }
switch (errno) {
case ENOTSUP:
@@ -3652,13 +3641,6 @@ zpool_vdev_remove(zpool_handle_t *zhp, const char *path)
return (zfs_error(hdl, EZFS_BADVERSION, msg));
}
- if (!islog && !avail_spare && !l2cache && zpool_is_bootable(zhp)) {
- zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
- "root pool can not have removed devices, "
- "because GRUB does not understand them"));
- return (zfs_error(hdl, EINVAL, msg));
- }
-
zc.zc_guid = fnvlist_lookup_uint64(tgt, ZPOOL_CONFIG_GUID);
if (zfs_ioctl(hdl, ZFS_IOC_VDEV_REMOVE, &zc) == 0)