grub-multi-install attempts to mount a non-existing device after migrating to another system

Bug #1891721 reported by Dawid Wróbel
20
This bug affects 4 people
Affects Status Importance Assigned to Milestone
grub2 (Ubuntu)
Confirmed
Undecided
Unassigned

Bug Description

I recently moved my Ubuntu installation from Parallels to Virtualbox, which naturally resulted in updated disks' UUIDs. Normally that should be a problem as Ubuntu should autodetect such change and act accordingly.

However, upon upgrading grub-efi-amd64-signed, dpkg kept failing with:

Setting up grub-efi-amd64-signed (1.142.4+2.04-1ubuntu26.2) ...
mount: /var/lib/grub/esp: special device /dev/disk/by-id/ata-Ubuntu_Linux-1_SSD_SF74YQ6DP1KMD07F8JED-part1 do
es not exist.

The Parallel's disk ID that it attempts to mount indeed no longer exists. The EFI partition is correctly mounted at /boot/efi, since the /etc/fstab uses partition' UUID to address it and that didn't change during the migration, so there's no reason why the script should be failing.

The debconf shows the following:

dawidw@ubuntu:~$ sudo debconf-get-selections | grep grub-efi
grub-efi-amd64 grub2/kfreebsd_cmdline string
grub-efi-amd64 grub-efi/install_devices multiselect /dev/disk/by-id/ata-Ubuntu_Linux-1_SSD_SF74YQ6DP1KMD07F8JED-part1, /dev/disk/by-id/ata-VBOX_HARDDISK_VB1-1a2b3c4d-part1
grub-efi-amd64 grub2/force_efi_extra_removable boolean false
grub-efi-amd64 grub2/linux_cmdline_default string quiet splash i8042.nopnp
grub-efi-amd64 grub2/update_nvram boolean true
grub-efi-amd64 grub2/linux_cmdline string
grub-efi-amd64 grub2/unsigned_kernels note
grub-efi-amd64 grub2/no_efi_extra_removable boolean true
grub-efi-amd64 grub2/device_map_regenerated note
grub-efi-amd64 grub-efi/install_devices_disks_changed multiselect /dev/disk/by-id/ata-Ubuntu_Linux-1_SSD_SF74YQ6DP1KMD07F8JED-part1, /dev/disk/by-id/ata-VBOX_HARDDISK_VB1-1a2b3c4d-part1
grub-efi-amd64 grub-efi/install_devices_empty boolean false
grub-efi-amd64 grub-efi/install_devices_failed boolean false
grub-efi-amd64 grub2/kfreebsd_cmdline_default string quiet splash

Note that it recored the new, correct "/dev/disk/by-id/ata-VBOX_HARDDISK_VB1-1a2b3c4d-part1" UUID of the disk that contains the EFI partition.

I debugged it further and can see that the failure happens in /usr/lib/grub/grub-multi-install (which is part of grub-common 2.04-1ubuntu26.2 package):
1) in "# We either migrate /boot/efi over, or we check if we have invalid devices" section, it correctly detects that the Parallels device does not exist ("if [ ! -e "${device%,}" ]", setting the valid=0
2) given that valid=0, my understanding is that at this point the "install_devices_disks_changed" prompt should be triggered, but it is not.
3) the "$RET" variable still contains both of the disks from grub-efi/install_devices
4) in "# Run the installer" section, the script iterates over each of the disks, attempting to mount ("mount $real_device $mntpoint) the non-existing one, which results in the aforementioned script failure.

My understanding here is that there are two problems:
1) "install_devices_disks_changed" prompt was not shown
2) there's no check for whether the device exists at all before the script proceeds with mounting and grub-installation attempt

Tags: fr-877
Dawid Wróbel (dawidw)
description: updated
affects: grub2-signed (Ubuntu) → grub2 (Ubuntu)
description: updated
description: updated
description: updated
description: updated
Revision history for this message
Dawid Wróbel (dawidw) wrote :

Note that I worked around by purging all grub-* packages and reinstalling grub-efi again.

Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in grub2 (Ubuntu):
status: New → Confirmed
Revision history for this message
John Levon (johnlevon) wrote :

I saw this issue when switching a KVM guest backend from emulated to virtio

Revision history for this message
John Levon (johnlevon) wrote :

Can confirm that apt purge of grub packages then install again worked, though I suspect debconf-set-selections with:

grub-common grub-efi/install_devices_disks_changed multiselect
grub-efi-amd64 grub-efi/install_devices_disks_changed multiselect
grub-common grub-efi/install_devices multiselect /dev/vda1
grub-efi-amd64 grub-efi/install_devices multiselect /dev/vda1

might work too

tags: added: rls-hh-incoming
Revision history for this message
Seth Arnold (seth-arnold) wrote :

Probably running sudo dpkg-reconfigure grub-efi-amd64 would do the trick.

Thanks

tags: added: fr-877
tags: removed: rls-hh-incoming
Revision history for this message
Dawid Wróbel (dawidw) wrote :

@Seth, I tried dpkg-reconfigure through and through, it didn't help.

Revision history for this message
Dawid Wróbel (dawidw) wrote :

Interestingly, this issue keeps coming back. Seems that each consecutive update of grub-efi is suffering from it. Each time it happens, the same apt purge helps.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.