#!/bin/sh . /lib/dracut-zfs-lib.sh ZFS_DATASET="" ZFS_POOL="" case "${root}" in zfs:*) ;; *) return ;; esac # If sysroot.mount exists, the initial RAM disk configured # it to mount ZFS on root. In that case, we bail early. loadstate="$(systemctl --system --show -p LoadState sysroot.mount || true)" if [ "${loadstate}" = "LoadState=not-found" -o "${loadstate}" = "" ] ; then info "ZFS: sysroot.mount absent, mounting root with mount-zfs.sh" else info "ZFS: sysroot.mount present, delegating root mount to it" return fi # Delay until all required block devices are present. udevadm settle if [ "${root}" = "zfs:AUTO" ] ; then ZFS_DATASET="$(find_bootfs)" if [ $? -ne 0 ] ; then zpool import -N -a ${ZPOOL_IMPORT_OPTS} ZFS_DATASET="$(find_bootfs)" if [ $? -ne 0 ] ; then warn "ZFS: No bootfs attribute found in importable pools." export_all || export_all "-f" rootok=0 return 1 fi fi info "ZFS: Using ${ZFS_DATASET} as root." fi ZFS_DATASET="${ZFS_DATASET:-${root#zfs:}}" ZFS_POOL="${ZFS_DATASET%%/*}" if import_pool "${ZFS_POOL}" ; then info "ZFS: Mounting dataset ${ZFS_DATASET}..." if mount_dataset "${ZFS_DATASET}" ; then ROOTFS_MOUNTED=yes return 0 fi fi rootok=0 need_shutdown