On Thu, Jan 28, 2016 at 07:46:41PM +0300, Andrei Borzenkov wrote: > If root filesystem is multidev btrfs, do not attempt to pass all devices as > kernel root= argument. This results in splitting command line in GRUB due to > embedded newline and even if we managed to quote it, kernel does not know how > to interpret it anyway. Multidev btrfs requires user space device scanning, > so passing single device would not work too. > > This still respects user settings GRUB_DISABLE_LINUX_UUID. Not sure what we > should do in this case. > > Closes: 45709
JFYI, this patch also has verified to solve a reported installation problem in Btrfs RAID 0 configuration in SUSE Linux. It would be great to have this patch included in upstream. Thanks, Michael > > --- > util/grub.d/10_linux.in | 4 +++- > util/grub.d/20_linux_xen.in | 4 +++- > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in > index 859b608..5a78513 100644 > --- a/util/grub.d/10_linux.in > +++ b/util/grub.d/10_linux.in > @@ -43,9 +43,11 @@ case ${GRUB_DEVICE} in > ;; > esac > > +# btrfs may reside on multiple devices. We cannot pass them as value of > root= parameter > +# and mounting btrfs requires user space scanning, so force UUID in this > case. > if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = > "xtrue" ] \ > || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ > - || uses_abstraction "${GRUB_DEVICE}" lvm; then > + || test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm; > then > LINUX_ROOT_DEVICE=${GRUB_DEVICE} > else > LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} > diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in > index f532fb9..46045db 100644 > --- a/util/grub.d/20_linux_xen.in > +++ b/util/grub.d/20_linux_xen.in > @@ -43,9 +43,11 @@ case ${GRUB_DEVICE} in > ;; > esac > > +# btrfs may reside on multiple devices. We cannot pass them as value of > root= parameter > +# and mounting btrfs requires user space scanning, so force UUID in this > case. > if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = > "xtrue" ] \ > || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ > - || uses_abstraction "${GRUB_DEVICE}" lvm; then > + || test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm; > then > LINUX_ROOT_DEVICE=${GRUB_DEVICE} > else > LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} > -- > tg: (ff84a9b..) u/btrfs-multidev (depends on: master) > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel