grub doesn't boot with efi and md raid root

Bug #1229738 reported by Dick Porter
104
This bug affects 20 people
Affects Status Importance Assigned to Milestone
grub2 (Ubuntu)
Expired
High
Unassigned

Bug Description

dick@reordberend:/tmp$ lsb_release -rd
Description: Ubuntu 12.04.3 LTS
Release: 12.04

dick@reordberend:/tmp$ apt-cache policy grub-efi-amd64
grub-efi-amd64:
  Installed: 1.99-21ubuntu3.10
  Candidate: 1.99-21ubuntu3.10

Installed 12.04.3 LTS Server using md raid1 for root partition on x86-64 box using EFI boot.

Grub installs its EFI app correctly, and it launches at boot. However, grub can't find the root partition. Inspecting grub's config shows that it has prefix and root set to the EFI boot partition. Manually setting those to the raid1 root partition at the grub prompt and running normal allows booting to proceed correctly (ie following the instructions at http://www.gnu.org/software/grub/manual/html_node/GRUB-only-offers-a-rescue-shell.html works).

In EFI mode, grub seems to expect its grub.cfg and modules to be in the EFI partition. However, they are all installed in the root filesystem. The problem can be solved in the grub-install script by giving an embedded config to grub-mkimage (http://www.gnu.org/software/grub/manual/html_node/Embedded-configuration.html). grub-install already has support for this, but it fails if the root partition is raided.

Inside grub-install, if devabstraction_module is set (and with md as the root partition it will be) then config_opt_file is never set. The attached patch solves the bug for me but will doubtless require refining to be generally applicable.

Tags: patch precise
Revision history for this message
Dick Porter (dick-8) wrote :
Revision history for this message
Ubuntu Foundations Team Bug Bot (crichton) wrote :

The attachment "Fix that works for me" seems to be a patch. If it isn't, please remove the "patch" flag from the attachment, remove the "patch" tag, and if you are a member of the ~ubuntu-reviewers, unsubscribe the team.

[This is an automated message performed by a Launchpad user owned by ~brian-murray, for any issues please contact him.]

tags: added: patch
tags: added: precise
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
Martin Sucha (martin-sucha) wrote :

The patch provided by Dick Porter worked for me as well (with /boot being a separate md array than /). Thanks!

Revision history for this message
Andy Sayler (andy.sayler) wrote :

I've encountered this issue as well running 12.04.3 with a 5-device RAID 6 array using grub + EFI + Secure Boot.

I worked around it by manually creating a grub.cfg file on the EFI partition that just changes the root to the correct /boot md partition and then reloads the actual /boot/grub.cfg file.

Details here: http://ubuntuforums.org/showthread.php?t=2190716&p=12861263#post12861263

Revision history for this message
YannUbuntu (yannubuntu) wrote :

Dear all,
please can you tell us if you can reproduce the bug with 13.10 ?

Revision history for this message
Dick Porter (dick-8) wrote :

Sorry, the machine in question is a server that needs to remain on LTS

Revision history for this message
Frici (fricigrillbufe) wrote :

Hi, I have very a similar issue. Reproducable with 13.10 as well.

Revision history for this message
Charles Hill (cphill) wrote :

I also found this bug. I installed 12.04.3 LTS Server using md raid1 for root partition on x86-64 box using EFI boot. The Ubuntu installer (alternate_amd.iso) sets up partitions /boot/efi and / and swap.

I also found grub installs its EFI app correctly, and it launches at boot. However, grub can't find the root partition.

I found a different answer on how to patch around this from: http://askubuntu.com/questions/355727/how-to-install-ubuntu-server-with-uefi-and-raid1-lvm. Manually edit /boot/efi/EFI/ubuntu/grub.cfg and substitute the correct UUID for the sw raid for the bad UUID in this file. The system will now reboot, but I haven't tested booting from a HW off.

What I'm concerned about is "how does this work?" The bootloader GRUB2 is reading /boot/efi/EFI/ubuntu/grub.cfg from the /boot/efi FAT32 UEFI partition and executes a command "search_fs_uuid uuid root" which finds the uuid for the RAID1 md device. But how does GRUB2 know about sw raid devices? The / filesystem is on a RAID1. GRUB2 needs to load /boot/grub/grub.cfg and run it.

My hypothesis is GRUB2 goes to the md superblock and finds the uuids for the devices in the raid, goes to one of those, and since it is mirrored (RAID1), can fetch from /boot/grub. Is that right?

Perhaps this bug is easily fixed by the installer making the UEFI FAT32 partition be at /boot instead of /boot/efi. In that case, /boot/grub/grub.cfg will be in the UEFI partition and GRUB2 will always know how to access it even if / is RAID5.

Can anyone confirm this line of thinking?

Revision history for this message
Phillip Susi (psusi) wrote :

Grub understands linux software raid. The only thing that needs to be on the EFI system partition is the grub image itself. This seems to just be a bug in grub-mkconfig that causes it to put the wrong uuid in the cfg.

Changed in grub2 (Ubuntu):
status: Confirmed → Triaged
importance: Undecided → High
Revision history for this message
Charles Hill (cphill) wrote :

That makes sense. It is consistent with all the reports I've seen describing this defect. My patched system reboots fine after HW off.

Revision history for this message
Thomas (t.c) wrote :

I also used instructions from here: http://askubuntu.com/questions/355727/how-to-install-ubuntu-server-with-uefi-and-raid1-lvm

cp /usr/sbin/grub-install /usr/sbin/grub-install.backup
patch /usr/sbin/grub-install patch
umount /boot/efi
mount /dev/sda1 /boot/efi
grub-install /dev/sda1
umount /boot/efi
mount /dev/sdb1 /boot/efi
grub-install /dev/sdb1
reboot

Revision history for this message
Anatoli (anatoli) wrote :

Hi! I have the same problem: install everything and boot in EFI mode, then I see "error: efidisk read error" and I get grub> prompt. I found a fix not mentioned here: after the install, boot from a LiveCD, install boot-repair and in its options unselect "SecureBoot" option. [I don't know what's wrong with the SecureBoot, but I won't investigate it further. Also, I don't know if the new grubx64.efi file the boot-repair writes to the EFI partition boots in SecureBoot or not.] Proceed with the commands it offers (when it asks about buggy-kernel, say No) and reboot. More details here: http://ubuntuforums.org/showthread.php?t=2201239.

I confirm that the patch proposed by Dick Porter executed as Thomas C. explains also fixes my problem, though the "efidisk read error" flashes for an instant before it starts to boot.

I also tried the solution of creating a grub.cfg file in the EFI partition (proposed by Andy Sayler) and it didn't work, though Andy had a slightly different setup: /boot and / on the same RAID array. I tried some obvious tweaks but with no luck.

Revision history for this message
Marcus Tomlinson (marcustomlinson) wrote :

This release of Ubuntu is no longer receiving maintenance updates. If this is still an issue on a maintained version of Ubuntu please let us know.

Changed in grub2 (Ubuntu):
status: Triaged → Incomplete
Revision history for this message
Jake Hemmerle (jakehemmerle) wrote :

I am experiencing these same symptoms while trying to install Ubuntu 18.04 in UEFI mode with a 4-disk RAID10 as root on my R410. ESP gets mounted at /boot/efi, kernel/ramdisk get installed to /boot, and the ESP's grub.cfg points to another grub.cfg that is only accessable after the array is assembled. The result on boot is Grub CLI that isn't able to identify any partitions (ie 'ls (hd0)' results in an unknown filesystem error). Will try above soon and report back.

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

[Expired for grub2 (Ubuntu) because there has been no activity for 60 days.]

Changed in grub2 (Ubuntu):
status: Incomplete → Expired
Revision history for this message
Max (cowanmax) wrote :

Hi all!

I'm sorry, but how can this patch (#12) be done?

I've get grub> console, after that i did:

set root=(lvm/datavg/datalv)
linux /boot/vmlinuz-4.15.0-200-generic root=/dev/datavg/datalv
initrd /boot/initrd.img-4.15.0-200-generic
boot

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

Duplicates of this bug

Other bug subscribers

Remote bug watches

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