diff --git a/contrib/dracut/02zfsexpandknowledge/module-setup.sh.in b/contrib/dracut/02zfsexpandknowledge/module-setup.sh.in index df8df3181fce..2fa25c57e9fc 100755 --- a/contrib/dracut/02zfsexpandknowledge/module-setup.sh.in +++ b/contrib/dracut/02zfsexpandknowledge/module-setup.sh.in @@ -50,6 +50,24 @@ find_zfs_block_devices() { done < /proc/self/mountinfo } +find_add_zpool_mps() { + local dev + local mp + local fstype + local _ + numfields="$(awk '{print NF; exit}' /proc/self/mountinfo)" + if [ "$numfields" = "10" ] ; then + fields="_ _ _ _ mp _ _ fstype dev _" + else + fields="_ _ _ _ mp _ _ _ fstype dev _" + fi + # shellcheck disable=SC2086 + while read -r ${fields?} ; do + [ "$fstype" = "zfs" ] || continue + [ "$dev" = "$1" ] && echo "$mp" + done < /proc/self/mountinfo +} + array_contains () { local e for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done @@ -75,6 +93,14 @@ check() { # shellcheck disable=SC2154 if [ -n "$hostonly" ]; then + if [ -f @sysconfdir@/default/zfs ]; then + . @sysconfdir@/default/zfs + if [ -n "$ZFS_INITRD_ADDITIONAL_DATASETS" ]; then + for add_zpool in $ZFS_INITRD_ADDITIONAL_DATASETS; do + add_mps+=$(find_add_zpool_mps "$add_zpool") + done + fi + fi for mp in \ "/" \ "/etc" \ @@ -87,7 +113,8 @@ if [ -n "$hostonly" ]; then "/usr/sbin" \ "/usr/lib" \ "/usr/lib64" \ - "/boot"; + "/boot" \ + "${add_mps[@]}"; do mp=$(readlink -f "$mp") mountpoint "$mp" >/dev/null 2>&1 || continue diff --git a/contrib/dracut/90zfs/module-setup.sh.in b/contrib/dracut/90zfs/module-setup.sh.in index 81d7d2abe496..e81861ae66b5 100755 --- a/contrib/dracut/90zfs/module-setup.sh.in +++ b/contrib/dracut/90zfs/module-setup.sh.in @@ -64,7 +64,8 @@ install() { # -o ensures there is no error upon absence of these files inst_multiple -o -H \ "@sysconfdir@/zfs/zpool.cache" \ - "@sysconfdir@/zfs/vdev_id.conf" + "@sysconfdir@/zfs/vdev_id.conf" \ + "@sysconfdir@/default/zfs" # Synchronize initramfs and system hostid if ! inst_simple -H @sysconfdir@/hostid; then diff --git a/contrib/initramfs/scripts/zfs b/contrib/initramfs/scripts/zfs index 1c8c496a7ff4..1ea5abe90bd1 100644 --- a/contrib/initramfs/scripts/zfs +++ b/contrib/initramfs/scripts/zfs @@ -897,6 +897,15 @@ mountroot() ZFS_RPOOL="${pool}" fi + # We need to import additional zpools which aren't under root zpool, before mount_fs() + for add_zpool in $ZFS_INITRD_ADDITIONAL_DATASETS; do + add_zpool_base="${add_zpool%%/*}" + + if [ "$add_zpool_base" != "$ZFS_RPOOL" ] + then + import_pool "${add_zpool_base}" + fi + done # ---------------------------------------------------------------- # P R E P A R E R O O T F I L E S Y S T E M