this post was submitted on 13 Feb 2024
0 points (NaN% liked)

Fedora Linux

1771 readers
1 users here now

All about Fedora Linux

founded 5 years ago
MODERATORS
 

Title says it all. I changed my btrfs subvol names so I could use timeshift to manage my snapshots, after regenerating the initramfs and editing grub to point to the new subvol names all was fine however after I got a kernel upgrade recently, the latest grub entry for the kernel specifies the old subvol name, resulting in a failed boot. I dont know grub well enough to know what options to add to /etc/default/grub, or even if thats where I need to add it. After editing the entry manually it boots perfectly fine so theres my question. Is there a grub config option to specify the name for a subvolume to boot? I'd rather not manually edit grub.cfg every time theres a kernel update lol.

top 4 comments
sorted by: hot top controversial new old
[–] [email protected] 0 points 9 months ago

I can't help with your specific problem, but in the past when trouble shooting my own GRUB problems on Fedora this was use useful: https://docs.fedoraproject.org/en-US/quick-docs/grub2-bootloader/

Specifically the 'grubby' application might be of help. Good luck!

[–] [email protected] 0 points 9 months ago* (last edited 9 months ago) (1 children)

check the GRUB_CMDLINE_LINUX key in /etc/default/grub it should contain the info about any subvolume. if it does not then there might be another grub config hook that is used by Fedora to add that info. If you want to be able to change subvol names without having to touch the grub config you might also want to switch to using subvolid instead of subvol keys on the kernel command line, because the id will stay the same after a rename (this could backfire though if you assign functions to certain names like "fallback" etc.).

Edit: found the hook that adds the kernel command line option for btrfs subvolumes. in /etc/grub.d/10_linux there is this bit of code:

case x"$GRUB_FS" in
    xbtrfs)
        rootsubvol="`make_system_path_relative_to_its_root /`"
        rootsubvol="${rootsubvol#/}"
        if [ "x${rootsubvol}" != x ]; then
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
        fi;;
    xzfs)
        [skipped for brevity]
        ;;
esac

so it seems it is always looking at the subvol name of the currently mounted root fs.

[–] [email protected] 0 points 9 months ago (1 children)

Thank you man, I dont understand much of the syntax (like at all) but i figured if I just change the subvol from the variable to the name of my root it would work, and it did. Jank as fuck but hey, its my system aha. Appreciate you man

[–] [email protected] 0 points 9 months ago

It's just the basic posix shell syntax. It just looks weird because they are using lots of library functions and in-place substitutions. also apparently the function, to translate a system path to something grub will understand, is an ELF binary 0_o