Skip to content

Commit 4a76085

Browse files
committed
zfsbootmenu: add zbm.bootfs parameter
1 parent 54bbde2 commit 4a76085

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

zfsbootmenu/init.d/50-import-pools

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,25 @@ if [ "${unsupported}" -ne 0 ]; then
105105
fi
106106
unset unsupported
107107

108-
# Attempt to find the bootfs property
109-
# shellcheck disable=SC2086
110-
while read -r _bootfs; do
111-
if [ "${_bootfs}" = "-" ]; then
112-
BOOTFS=
108+
if [ -n "${zbm_prefer_bootfs}" ]; then
109+
if is_zfs_filesystem "${zbm_prefer_bootfs}" ; then
110+
BOOTFS="${zbm_prefer_bootfs}"
113111
else
114-
BOOTFS="${_bootfs}"
115-
break
112+
zerror "zbm.bootfs value '${zbm_prefer_bootfs}' not a ZFS dataset"
116113
fi
117-
done <<<"$( zpool list -H -o bootfs "${zbm_prefer_pool:---}" )"
118-
unset _bootfs
114+
else
115+
# Attempt to find the bootfs property
116+
# shellcheck disable=SC2086
117+
while read -r _bootfs; do
118+
if [ "${_bootfs}" = "-" ]; then
119+
BOOTFS=
120+
else
121+
BOOTFS="${_bootfs}"
122+
break
123+
fi
124+
done <<<"$( zpool list -H -o bootfs "${zbm_prefer_pool:---}" )"
125+
unset _bootfs
126+
fi
119127

120128
if [ -n "${BOOTFS}" ]; then
121129
export BOOTFS

zfsbootmenu/pre-init/zfsbootmenu-parse-commandline.sh

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -219,30 +219,40 @@ if kcl_override=$( get_zbm_arg zbm.kcl_override ) ; then
219219
zinfo "overriding all BE KCLs with: '$( kcl_assemble < "${BASE}/cmdline" )'"
220220
fi
221221

222-
zbm_prefer_pool=
223-
if zbm_prefer_pool=$( get_zbm_arg zbm.prefer ) ; then
224-
# shellcheck disable=SC2034
225-
zbm_prefer_pool="${zbm_prefer_pool%%/*}"
226-
zinfo "preferring ${zbm_prefer_pool} for bootfs"
227-
fi
228-
229222
zbm_wait_for_devices=
230223
if zbm_wait_for_devices=$( get_zbm_arg zbm.wait_for ) ; then
231224
zinfo "system will wait for ${zbm_wait_for_devices}"
232225
fi
233226

234-
# pool! : this pool must be imported before all others
235-
# pool!!: this pool, and no others, must be imported
227+
zbm_prefer_bootfs=
228+
if zbm_prefer_bootfs=$( get_zbm_arg zbm.bootfs ) ; then
229+
zinfo "using ${zbm_prefer_bootfs} for bootfs"
230+
fi
231+
232+
zbm_prefer_pool=
233+
if zbm_prefer_pool=$( get_zbm_arg zbm.prefer ) ; then
234+
# shellcheck disable=SC2034
235+
zbm_prefer_pool="${zbm_prefer_pool%%/*}"
236+
[ -z "${zbm_prefer_bootfs}" ] && zinfo "preferring ${zbm_prefer_pool} for bootfs"
237+
fi
236238

237239
# shellcheck disable=SC2034
238240
case "${zbm_prefer_pool}" in
239241
*!!)
240242
zbm_require_pool="only"
241243
zbm_prefer_pool="${zbm_prefer_pool%!!}"
244+
zinfo "will only attempt to import ${zbm_prefer_pool}"
245+
246+
if [ -n "${zbm_prefer_bootfs}" ] && [ "${zbm_prefer_pool}" != "${zbm_prefer_bootfs%%/*}" ]; then
247+
zerror "zbm.bootfs '${zbm_prefer_bootfs}' not on the exclusive pool import"
248+
unset zbm_prefer_bootfs
249+
fi
250+
242251
;;
243252
*!)
244253
zbm_require_pool="yes"
245254
zbm_prefer_pool="${zbm_prefer_pool%!}"
255+
zinfo "requiring pool ${zbm_prefer_pool}"
246256
;;
247257
*)
248258
zbm_require_pool=""

zfsbootmenu/pre-init/zfsbootmenu-preinit.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export menu_timeout='${menu_timeout}'
2828
export loglevel='${loglevel}'
2929
export zbm_prefer_pool='${zbm_prefer_pool}'
3030
export zbm_require_pool='${zbm_require_pool}'
31+
export zbm_prefer_bootfs='${zbm_prefer_bootfs}'
3132
export default_hostid=00bab10c
3233
export zbm_sort='${zbm_sort}'
3334
export zbm_set_hostid='${zbm_set_hostid}'

0 commit comments

Comments
 (0)