diff options
author | Brian Behlendorf <[email protected]> | 2011-09-30 10:33:26 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-09-30 13:31:00 -0700 |
commit | e8753fb4f03aaa371028aaec145449f2610229cf (patch) | |
tree | 5fb7cee167d79a3bc494125b3204d49b89868dde /dracut | |
parent | 6ebd8ef103c3ed4739987f36d77874f6953af89f (diff) |
Synchronize initramfs and system hostid
Relying on an /etc/hostid file which is installed in the system
image breaks diskless systems which share an image. Certain
cluster infrastructure such as MPI relies on all nodes having
a unique hostid. However, we still must be careful to ensure
the hostid is syncronized between the initramfs and system
images when using zfs root filesystems.
To accompish this the automatically created /etc/hostid file has
been removed from the spl rpm packaging. The /etc/hostid file
is now dynamically created for your initramfs as part of the
dracut install process. This avoids the need to install it in
the actual system images.
This change also resolves the spl_hostid parameter handling
for dracut.
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #398
Closes #399
Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'dracut')
-rwxr-xr-x | dracut/90zfs/module-setup.sh.in | 11 | ||||
-rwxr-xr-x | dracut/90zfs/parse-zfs.sh.in | 8 |
2 files changed, 16 insertions, 3 deletions
diff --git a/dracut/90zfs/module-setup.sh.in b/dracut/90zfs/module-setup.sh.in index 33f78e51c..c01915e82 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 13697b945..571d263ce 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." |