[Bug 1838525] Re: LVM setup fails to install grub on virtio storage
Rafael David Tinoco
rafaeldtinoco at kernelpath.com
Fri Sep 27 05:03:15 UTC 2019
## SUMMARY OF THE ISSUE ##
After reading the grub-installer script, and following execution flow:
...
if [ "$found" = "0" ] && type lvdisplay >/dev/null 2>&1 && \
(lvdisplay "$disc_offered" | grep -q 'LV Name' 2>/dev/null || \
[ -e "$(dirname "$disc_offered")/control" ]); then
# Don't set frdev/frdisk here, otherwise you'll end up in different
# code paths below ...
frtype=lvm
fi
...
default_bootdev_os="$($chroot $ROOT grub-mkdevicemap --no-floppy -m - | head -n1 | cut -f2)"
if [ "$default_bootdev_os" ]; then
default_bootdev="$($chroot $ROOT readlink -f "$default_bootdev_os")"
if db_get grub-installer/bootdev && [ "$RET" = '(hd0)' ]; then
db_set grub-installer/bootdev "$default_bootdev"
fi
else
default_bootdev="(hd0)"
fi
DEBUG:
default_bootdev_os=/dev/disk/by-id/lvm-pv-uuid-IKvzNq-IRE5-arLC-hSS1-jDU2-ZSKA-90lATY
and bootdev wasn't set to anything because it isn't '(hd0)'.
...
elif [ "$(device_to_disk "$cdsrc")" = "$default_bootdev" ] || \
([ -n "$hdsrc" ] && [ "$(device_to_disk "$hdsrc")" = "$default_bootdev" ]) || \
([ "$default_bootdev" = '(hd0)' ] && \
(([ -n "$cdfs" ] && [ "$cdfs" != "iso9660" ]) || \
[ "$hybrid" = true ])) || \
([ "$default_bootdev" != '(hd0)' ] && \
! partmap "$default_bootdev" >/dev/null && \
! grub_probe -t fs -d "$default_bootdev" >/dev/null); then
db_fget grub-installer/bootdev seen
if [ "$RET" != true ]; then
bootfs=$(findfs /boot)
[ "$bootfs" ] || bootfs="$(findfs /)"
disk=$(device_to_disk "$bootfs")
db_set grub-installer/bootdev "$disk"
state=2
fi
fi
DEBUG:
bootdev=/dev/mapper after disk=$(device_to_disk bootfs)
since bootfs is bootfs=/dev/mapper/vgubuntu-root
and device_to_disk will remove last part from /dev/mapper/XXX.
bootfs is /dev/mapper/vgubuntu-root BECAUSE:
rootfs=$(findfs /)
bootfs=$(findfs /boot
[ -n "$bootfs" ] || bootfs="$rootfs"
so, device_to_disk() has cut "vgubuntu-root" from the string and that is
how bootdev has become "/dev/mapper" only.
----
Testing with a SCSI disk, I got the exact same DEBUG output, BUT ...
I was able to see that the INITIAL value for:
grub-installer/bootdev WAS "/dev/sda"
but, after purging it with "debconf-set grub-installer/bootdev ''", I
could NOT repopulate db variable again by executing only "grub-installer
/target", DIFFERENTLY than when executing "grub-installer /target" in a
/dev/vda based LVM, when it ALWAYS gets populated like described above
(with /dev/mapper).
TODO:
discover why grub-installer/bootdev isn't populated back when re-
executing "grub-installer /target" after purging the original (right
after installation) value. Whenever bootdev defaults to
/dev/mapper/XXXX, bootdev should be replaced with /dev/sdXXX or
/dev/vdXXX, one of the LVM PV disks of under laying volume group (to
confirm).
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub-installer in Ubuntu.
https://bugs.launchpad.net/bugs/1838525
Title:
LVM setup fails to install grub on virtio storage
Status in debian-installer package in Ubuntu:
New
Status in grub-installer package in Ubuntu:
Triaged
Status in debian-installer source package in Eoan:
New
Status in grub-installer source package in Eoan:
Triaged
Status in debian-installer package in Debian:
New
Bug description:
The Eoan debian-installer ISO fails to install GRUB on LVM installs
with virtio storage, as it runs grub-install with /dev/mapper as a
target (a directory), even if instructed to target a device.
The following steps to reproduce have been prepared running the
20190730 build, but this has been broken since about June 18, 2019.
Steps to reproduce:
$ md5sum eoan-server-amd64.iso
f591e30485e5f0b5117f6c116e538c42 eoan-server-amd64.iso
$ qemu-img create -f raw disk1.img 8G
Formatting 'disk1.img', fmt=raw size=8589934592
$ kvm -m 1024 -boot d -cdrom eoan-server-amd64.iso -drive file=disk1.img,if=virtio
Proceed with all the defaults. In the "Partition disk" step select
"Guided - use entire disk and set up LVM". Go ahead accepting the
defaults. At the "Install the GRUB boot loader" step select "/dev/vda"
as the target device. The installer will actually run `grub-install
--force /dev/mapper` and fail after a while. The wrong command is
visible both in the d-i screen and by running `ps` on a different
console.
Full installer syslog: http://paste.ubuntu.com/p/qtZy86dTp6/
It's interesting how this doesn't happen when not using virtio. If
from the commands above the "if=virtio" option is dropped then
everything works as expected. In this case the target block device is
called /dev/sda instead of /dev/vda.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/debian-installer/+bug/1838525/+subscriptions
More information about the foundations-bugs
mailing list