diff options
author | kpande <[email protected]> | 2018-11-11 21:23:11 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-11-11 18:23:11 -0800 |
commit | eb1a0b617448a8cb5d83a0f63102a7b24dc15e70 (patch) | |
tree | a84970cea4e0bbf9210d0e5b66c8ef8f756455ce | |
parent | c8fd652ce7abe85c5238356248d1918ea9ff5ff8 (diff) |
Allow spaces in pool names for cmdline argument
PR #8114 quoted the ${ENCRYPTIONROOT} parameter to ensure we don't
lose spaces when unlocking root filesystem in the off chance that
it has a space in its name.
Unfortunately, dracut and initramfs-tools do not actually get the
quotes from the cmdline. If we use root=ZFS="root pool/filesystem
name" the script still only sees root=ZFS=root and no quotation
marks.
Because + is a reserved character in ZFS, it's used as a
placeholder for spaces in the kernel cmdline. In this way,
root=ZFS=root+pool/filesystem+name will properly expand by
replacing the character with sed (POSIX compliant method).
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: bunder2015 <[email protected]>
Signed-off-by: Kash Pande <[email protected]>
Issue #8114
Closes #8117
-rwxr-xr-x | contrib/dracut/90zfs/parse-zfs.sh.in | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/contrib/dracut/90zfs/parse-zfs.sh.in b/contrib/dracut/90zfs/parse-zfs.sh.in index 9cf46d754..2a532c75b 100755 --- a/contrib/dracut/90zfs/parse-zfs.sh.in +++ b/contrib/dracut/90zfs/parse-zfs.sh.in @@ -39,11 +39,14 @@ case "${root}" in # root=zfs:rpool/ROOT # root=zfs:FILESYSTEM=rpool/ROOT # root=FILESYSTEM=rpool/ROOT + # root=ZFS=pool+with+space/ROOT+WITH+SPACE (translates to root=ZFS=pool with space/ROOT WITH SPACE) # Strip down to just the pool/fs root="${root#zfs:}" root="${root#FILESYSTEM=}" root="zfs:${root#ZFS=}" + # switch + with spaces because kernel cmdline does not allow us to quote parameters + root=$(printf '%s\n' "$root" | sed "s/+/ /g") rootok=1 wait_for_zfs=1 |