]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Allow spaces in pool names for cmdline argument
authorkpande <github@tripleback.net>
Mon, 12 Nov 2018 02:23:11 +0000 (21:23 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 12 Nov 2018 02:23:11 +0000 (18:23 -0800)
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 <behlendorf1@llnl.gov>
Reviewed-by: bunder2015 <omfgbunder@gmail.com>
Signed-off-by: Kash Pande <kash@tripleback.net>
Issue #8114
Closes #8117

contrib/dracut/90zfs/parse-zfs.sh.in

index 9cf46d7543259e06234d5eb62a62b5513e0c7b62..2a532c75b11216c267fb8c497df4e0d10b5f7587 100755 (executable)
@@ -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