From eb1a0b617448a8cb5d83a0f63102a7b24dc15e70 Mon Sep 17 00:00:00 2001 From: kpande Date: Sun, 11 Nov 2018 21:23:11 -0500 Subject: [PATCH] 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 Reviewed-by: bunder2015 Signed-off-by: Kash Pande Issue #8114 Closes #8117 --- contrib/dracut/90zfs/parse-zfs.sh.in | 3 +++ 1 file changed, 3 insertions(+) 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 -- 2.40.0