summaryrefslogtreecommitdiffstats
path: root/contrib/dracut/90zfs/parse-zfs.sh.in
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2015-07-09 11:41:14 -0700
committerBrian Behlendorf <[email protected]>2015-07-09 13:59:37 -0700
commitcc49250563b65c80d87afa5273ae350d06aa8d3b (patch)
tree9fe3928c6279f518c82d0f5fd8a813e8a3ed7d75 /contrib/dracut/90zfs/parse-zfs.sh.in
parent2cac7f5f11756663525a5d4604d9f0a3202d4024 (diff)
Move dracut directory to contrib
The dracut code is analogous to the initramfs code and as such it should be located in the contrib with initramfs for consistency. Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'contrib/dracut/90zfs/parse-zfs.sh.in')
-rwxr-xr-xcontrib/dracut/90zfs/parse-zfs.sh.in59
1 files changed, 59 insertions, 0 deletions
diff --git a/contrib/dracut/90zfs/parse-zfs.sh.in b/contrib/dracut/90zfs/parse-zfs.sh.in
new file mode 100755
index 000000000..c305c7821
--- /dev/null
+++ b/contrib/dracut/90zfs/parse-zfs.sh.in
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+. /lib/dracut-lib.sh
+
+# Let the command line override our host id.
+spl_hostid=`getarg spl_hostid=`
+if [ -n "${spl_hostid}" ] ; then
+ info "ZFS: Using hostid from command line: ${spl_hostid}"
+ AA=`echo ${spl_hostid} | cut -b 1,2`
+ BB=`echo ${spl_hostid} | cut -b 3,4`
+ CC=`echo ${spl_hostid} | cut -b 5,6`
+ DD=`echo ${spl_hostid} | cut -b 7,8`
+ printf "\x${DD}\x${CC}\x${BB}\x${AA}" >/etc/hostid
+elif [ -f "/etc/hostid" ] ; then
+ info "ZFS: Using hostid from /etc/hostid: `hostid`"
+else
+ warn "ZFS: No hostid found on kernel command line or /etc/hostid."
+ warn "ZFS: Pools may not import correctly."
+fi
+
+wait_for_zfs=0
+case "${root}" in
+ ""|zfs|zfs:)
+ # We'll take root unset, root=zfs, or root=zfs:
+ # No root set, so we want to read the bootfs attribute. We
+ # can't do that until udev settles so we'll set dummy values
+ # and hope for the best later on.
+ root="zfs:AUTO"
+ rootok=1
+ wait_for_zfs=1
+
+ info "ZFS: Enabling autodetection of bootfs after udev settles."
+ ;;
+
+ ZFS\=*|zfs:*|zfs:FILESYSTEM\=*|FILESYSTEM\=*)
+ # root is explicit ZFS root. Parse it now. We can handle
+ # a root=... param in any of the following formats:
+ # root=ZFS=rpool/ROOT
+ # root=zfs:rpool/ROOT
+ # root=zfs:FILESYSTEM=rpool/ROOT
+ # root=FILESYSTEM=rpool/ROOT
+
+ # Strip down to just the pool/fs
+ root="${root#zfs:}"
+ root="${root#FILESYSTEM=}"
+ root="zfs:${root#ZFS=}"
+ rootok=1
+ wait_for_zfs=1
+
+ info "ZFS: Set ${root} as bootfs."
+ ;;
+esac
+
+# Make sure Dracut is happy that we have a root and will wait for ZFS
+# modules to settle before mounting.
+if [ ${wait_for_zfs} -eq 1 ]; then
+ ln -s /dev/null /dev/root 2>/dev/null
+ echo '[ -e /dev/zfs ]' > "${hookdir}/initqueue/finished/zfs.sh"
+fi