Oprava bootování Linux Mint v zavaděči GRUB v openSUSE

Dlouhodobě používám Linux Mint 21.2 „Victoria“, který je založen na Ubuntu 22.04 LTS Jammy Jellyfish na PC UEFI, GPT particí s LVM na btrfs a chtěl jsem vyzkoušet i něco jiného, takže volba padla na instalaci openSUSE Tumbleweed v dual bootu s Mintem.

openSUSE funguje skvěle, nicméně nepočítal jsem s tím, že openSUSE přepíše původní zavaděč GRUB svým vlastním, který nebude schopen nabootovat původní Linux Mint. V nabídce GRUBu pro výběr systému se sice zobrazí, ale po potrvzení volby „Linux Mint 21.2 (on /dev/mapper/vg0-root)“ je zobrazena chyba:

error: ../../grub-core/fs/btrfs.c:2159:file '/boot/vmlinuz-5.15.0-87-generic' not found
error> ../../grub-core/loader/i386/efi/linux.c:168:you need to load the kernel first.

Press any key to continue...

Problém lze obejít nabootováním Mintu přes UEFI zavaděč v počítači, ale co je příčinou chyby?

V zavaděči GRUB přejdeme do režimu příkazové řádky stisknutím klávesy „C“ a pokračujeme příkazy, kterými zjistíme obsah disku a nastavení:

grub> ls /boot

error: ../../grub-core/fs/btrfs.c:2159:file '/boot' not found.
grub> ls /
@/ @home/
grub> ls /@/boot/
vmlinuz-5.15.0-87-generic initrd.img-5.15-87-generic System.map-5.15.0-87-generic grub/ efi/ vmlinuz.old
grub> ls
(proc) (lvm/vg0-root--os) (lvm/vg0-swap) (lvm/vg0-root) (memdisk) (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
grub> btrfs-list-subvols (lvm/vg0-root)
ID 256 path @
ID 257 path @home
grub> btrfs-get-default-subvol (lvm/vg0-root)
/

Z toho vyplývá, že na souborovém systému btrfs není vybrán jako výchozí subvolume @, kde je nainstalován Linux Mint. V tom případě lze zavaděč dočasně uschopnit příkazem:

grub> btrfs-mount-subvol / / @
grub> ls /
dev/ run/ lib32 boot/ lib sbin cdrom/ srv/ media/ usr/ opt/ lib64 bin home/ etc/ var/ tmp/ libx32 sys/ mnt/ proc/ root/

Následně vyskočíme z příkazového režimu GRUBu klávesou „Esc“ a po výběru systému Linux Mint 21.2 v nabídce již úspěšně nabootuje a následuje jednoduchá oprava z příkazového řádku v systému Linux Mint:

$ sudo -i
# btrfs subvolume get-default /
ID 5 (FS_TREE)
# btrfs subvolume list /
ID 256 gen 342 top level 5 path @
ID 257 gen 341 top level 5 path @home
# btrfs subvolume set-default 256 /
# btrfs subvolume get-default /
ID 256 gen 352 top level 5 path @

A nyní již operační systém Linux Mint bez problémů startuje volbou z nabídky openSUSE GRUBu.