Skip to content

grub.cfg and bootuuid.cfg not synced to secondary ESPs on multi-device setups #1076

@ckyrouac

Description

@ckyrouac

Summary

On multi-device setups (e.g. RAID 1 with an ESP per disk, or multi-disk installs via --device), grubconfigs::install() only writes grub.cfg and bootuuid.cfg to the single ESP currently mounted at /boot/efi. Secondary ESPs on other disks are left without these files. If the system boots from a disk whose ESP was not the one mounted during install, GRUB drops to a rescue shell because it cannot find its configuration.

Steps to Reproduce

  1. Set up a multi-device configuration with an ESP on each disk (e.g. RAID 1, or install with bootupctl install --device /dev/sda --device /dev/sdb)
  2. Run bootupctl install (or let bootc perform the install)
  3. Inspect the ESPs on each disk

Expected Behavior

All ESPs should contain EFI/<vendor>/grub.cfg and EFI/<vendor>/bootuuid.cfg so the system can boot from any disk.

Actual Behavior

Only the ESP mounted at /boot/efi receives these files. The other ESPs have the EFI binaries (shim, grub) but are missing the GRUB configuration files, making them unable to complete the boot process.

Root Cause

grubconfigs::install() writes the static EFI grub.cfg and bootuuid.cfg into the target_root's /boot/efi/EFI/<vendor>/ directory. It has no awareness of additional ESP partitions on other devices. While efi::install() handles installing EFI binaries to all ESPs via find_colocated_esps(), the GRUB config writing step was not extended with the same multi-device logic.

Impact

  • Systems with redundant boot disks cannot boot from the secondary disk if the primary fails
  • GRUB drops to a rescue shell with no grub.cfg present
  • Defeats the purpose of redundant boot disk configurations

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions