diff options
Diffstat (limited to 'zfs.initcpio.hook')
-rw-r--r-- | zfs.initcpio.hook | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/zfs.initcpio.hook b/zfs.initcpio.hook deleted file mode 100644 index 7288ab8..0000000 --- a/zfs.initcpio.hook +++ /dev/null @@ -1,119 +0,0 @@ -# -# WARNING: This script is parsed by ash in busybox at boot time, not bash! -# http://linux.die.net/man/1/ash -# https://wiki.ubuntu.com/DashAsBinSh -# http://www.jpsdomain.org/public/2008-JP_bash_vs_dash.pdf -# -ZPOOL_FORCE="" -ZPOOL_IMPORT_FLAGS="" - -zfs_get_bootfs () { - for zfs_dataset in $(zpool list -H -o bootfs); do - case ${zfs_dataset} in - "" | "-") - # skip this line/dataset - ;; - "no pools available") - return 1 - ;; - *) - ZFS_DATASET=${zfs_dataset} - return 0 - ;; - esac - done - return 1 -} - -zfs_mount_handler () { - if [ "${ZFS_DATASET}" = "bootfs" ] ; then - if ! zfs_get_bootfs ; then - # Lets import everything and try again - zpool import ${ZPOOL_IMPORT_FLAGS} -N -a ${ZPOOL_FORCE} - if ! zfs_get_bootfs ; then - die "ZFS: Cannot find bootfs." - fi - fi - fi - - local pool="${ZFS_DATASET%%/*}" - local rwopt_exp="${rwopt:-ro}" - - if ! zpool list -H "${pool}" 2>&1 > /dev/null ; then - if [ ! "${rwopt_exp}" = "rw" ]; then - msg "ZFS: Importing pool ${pool} readonly." - ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -o readonly=on" - else - msg "ZFS: Importing pool ${pool}." - fi - - if ! zpool import ${ZPOOL_IMPORT_FLAGS} -N "${pool}" ${ZPOOL_FORCE} ; then - die "ZFS: Unable to import pool ${pool}." - fi - fi - - local node="$1" - local tab_file="${node}/etc/fstab" - local zfs_datasets="$(zfs list -H -o name -t filesystem -r ${ZFS_DATASET})" - - # Mount the root, and any child datasets - for dataset in ${zfs_datasets}; do - mountpoint=$(zfs get -H -o value mountpoint "${dataset}") - case ${mountpoint} in - "none") - # skip this line/dataset. - ;; - "legacy") - if [ -f "${tab_file}" ]; then - if findmnt -snero source -F "${tab_file}" -S "${dataset}" > /dev/null 2>&1; then - opt=$(findmnt -snero options -F "${tab_file}" -S "${dataset}") - mnt=$(findmnt -snero target -F "${tab_file}" -S "${dataset}") - mount -t zfs -o "${opt}" "${dataset}" "${node}${mnt}" - fi - fi - ;; - *) - mount -t zfs -o "zfsutil,${rwopt_exp}" "${dataset}" "${node}${mountpoint}" - ;; - esac - done -} - -run_hook() { - # Force import the pools, useful if the pool has not properly been exported using 'zpool export <pool>' - [ ! "${zfs_force}" = "" ] && ZPOOL_FORCE="-f" - - # Add import directory to import command flags - [ ! "${zfs_import_dir}" = "" ] && ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -d ${zfs_import_dir}" - - # Wait 15 seconds for ZFS devices to show up - [ "${zfs_wait}" = "" ] && ZFS_WAIT="15" || ZFS_WAIT="${zfs_wait}" - - [ "${root}" = "zfs" ] && mount_handler="zfs_mount_handler" - - case ${zfs} in - "") - # skip this line/dataset - ;; - auto|bootfs) - ZFS_DATASET="bootfs" - mount_handler="zfs_mount_handler" - ;; - *) - ZFS_DATASET="${zfs}" - mount_handler="zfs_mount_handler" - ;; - esac - - # Allow up to n seconds for zfs device to show up - for i in $(seq 1 ${ZFS_WAIT}); do - [ -c "/dev/zfs" ] && break - sleep 1 - done -} - -run_latehook () { - zpool import -N -a ${ZPOOL_FORCE} -} - -# vim:set ts=4 sw=4 ft=sh et: |