On 09.04.2021 08:02, Justin Vallon wrote: > I am wondering whether Grub2 has any btrfs support for multiple root > subvolumes. It appears it might be able to handle writing a grub.cfg > that would reboot into the current root partition if the partition is > btrfs (though, not sure). >
grub does not care about filesystem content at all. It only needs to know location of kernel (and possibly initrd) and kernel options. How kernel finds its root is entirely up to this kernel. > The grub-mkconfig code seems confused by btrfs: > > 1) It assumes a device has a single filesystem btrfs *is* single filesystem. > 2) It steps through devices, then maps device to mount point I am not sure what you mean here, but grub needs to resolve file location on btrfs to the absolute path so it can access it during boot. No mount points are present during bootloader phase. > 3) 30_os-prober has some code for btrfs from os-prober output, but I > don't see where os-prober will generate such entries > os-prober is not part of grub. It was mistake to carry it in grub sources in the first place. The code you talk about was added 8 years ago, probably to support some os-prober patch available in some distribution at this time. Those distributions that attempt to support boot from subvolumes include custom, often incompatible, patches to os-prober. There is no real upstream for os-prober anyway and for all I can tell it is failed attempt to multiboot linux. > It would be nice if it would be able to generate a grub.cfg that could > boot into any subvolume that was bootable: Define "bootable subvolume". > > 1) Recognize btrfs filesystem > 2) Temp mount subvol=. if not already mounted > 3) Run os-detector on each subvol > That is more or less what os-prober in openSUSE does. > Does this not work? > I am not sure what you are asking. Does it work now? It depends on what your distribution provides. Does it work with upstream os-prober? There is no real upstream for os-prober, the closest is Debian and as you probably have seen this version does not handle subvolumes. Is it possible to implement it? Probably, the proof of pudding is in eating.
