To give a bit of history to BTRFS, one thing that has improved is boot ability.
Specifically, the original method for selecting root BTRFS snapshot / sub-volume was by numeric ID passed on the kernel command line in Grub. This allowed you to select which ABE to use, (Alternate Boot Environment). Different Grub entries could boot older BEs, or different Linux distros.
However, you could not get the numeric ID until you created the BTRFS snapshot or sub-volume. Then you basically had to edit both any existing BEs, and new BE to include that in Grub’s /etc/grub.d/X
entry. Otherwise, a simple mistake could make a BE appear to vanish in Grub. YES, THAT HAS HAPPENED TO ME! (And potentially edit /etc/fstab
on all BEs too.)
Now it should be said that BTRFS supports/ed a “default” BTRFS sub-volume. That can be the “normal” boot environment. However, using such means you have to change your “default” BTRFS sub-volume before you reboot to another boot environment. So, no Grub selected alternate boot environments were possible, (when using only “default” BTRFS sub-volume).
Later, (still before I migrated to OpenZFS for my Linux computers), BTRFS added the ability to use the NAME of the snapshot / sub-volume in the kernel command line in Grub. This meant you could edit /etc/grub.d/X
before you performed the snapshot. (And potentially /etc/fstab
too.) That meant the change automatically applied to the new BE. (But, still not any older BEs.) Much more user friendly.
Note that Grub 2.0’s automatic generation of entries has been worthless for me. First, it did not accommodate A/B hard partition alternate boot environments. (Which I used before BTRFS & OpenZFS.) Then not BTRFS alternate boot environments. Later, not OpenZFS alternate boot environments.
As an example, this is what I use in Grub for OpenZFS;
linux /linux-6.1.31-gentoo.2 root=ZFS=rpool/root/20240714 rootfstype=zfs ...
A change in the date to match the ZFS clone’s name, and I am good for another BE.
Something similar, showing the BTRFS numeric ID of the pool, but the NAME of the sub-volume;
linux /btrfs-root/boot/vmlinuz-linux root=UUID=9c92ed7c-e128-4b60-a9de-9c8419fe083d ro root=subvol=btrfs-root quiet add_efi_memmap