diff --git a/dracut/90zfs/module-setup.sh.in b/dracut/90zfs/module-setup.sh.in index 33f78e51cd..c01915e82e 100755 --- a/dracut/90zfs/module-setup.sh.in +++ b/dracut/90zfs/module-setup.sh.in @@ -33,7 +33,6 @@ install() { inst_rules @udevruledir@/60-zvol.rules inst @sysconfdir@/zfs/zdev.conf inst @sysconfdir@/zfs/zpool.cache - inst @sysconfdir@/hostid dracut_install @sbindir@/zfs dracut_install @sbindir@/zpool dracut_install @bindir@/zpool_layout @@ -43,4 +42,14 @@ install() { dracut_install hostid inst_hook cmdline 95 "$moddir/parse-zfs.sh" inst_hook mount 98 "$moddir/mount-zfs.sh" + + # Synchronize initramfs and system hostid + TMP=`mktemp` + AA=`hostid | cut -b 1,2` + BB=`hostid | cut -b 3,4` + CC=`hostid | cut -b 5,6` + DD=`hostid | cut -b 7,8` + printf "\x$DD\x$CC\x$BB\x$AA" >$TMP + inst_simple "$TMP" /etc/hostid + rm "$TMP" } diff --git a/dracut/90zfs/parse-zfs.sh.in b/dracut/90zfs/parse-zfs.sh.in index 13697b9453..571d263ce1 100755 --- a/dracut/90zfs/parse-zfs.sh.in +++ b/dracut/90zfs/parse-zfs.sh.in @@ -6,9 +6,13 @@ spl_hostid=`getarg spl_hostid=` if [ "${spl_hostid}" != "" ] ; then info "ZFS: Using hostid from command line: ${spl_hostid}" - echo "${spl_hostid}" > /etc/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: `cat /etc/hostid`" + 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."