openSUSE / snapper

Manage filesystem snapshots and allow undo of system modifications
http://snapper.io/
GNU General Public License v2.0
905 stars 128 forks source link

GRUB still looks for grub.cfg on previous subvolume after snapper rollback #722

Open geckolinux opened 2 years ago

geckolinux commented 2 years ago

Hi there, on distros that are not based on openSUSE I keep running into an issue where the GRUB menu stops updating after a snapper --ambit classic rollback because GRUB is apparently looking for the /boot/grub/grub.cfg on the previous subvolume where grub-install /dev/XXX was performed. The workaround is to run grub-install again after rebooting into the new default subvolume that Snapper set. But this isn't ideal for end-users. Is there a distro-agnostic way of working around this? Or is there some fundamental concept about Btrfs and/or Snapper that I'm ignoring? Thanks for the help.

aschnell commented 2 years ago

On openSUSE the package grub2-snapper-plugin provides the script /usr/lib/snapper/plugins/grub (https://build.opensuse.org/package/view_file/openSUSE:Factory/grub2/grub2-snapper-plugin.sh) which is called from snapper. But I cannot say if that is all that is required.

geckolinux commented 2 years ago

Hi @aschnell , thanks for the reply. Yes, other distros don't include the GRUB2 snapper plugin. Even in openSUSE I'm not sure about its behavior, does Snapper on openSUSE somehow avoid this issue where the GRUB looks for the grub.cfg on the wrong (previous) subvolume where it was first installed? Is this behavior that I'm seeing expected, or am I not understanding something?

arashsm79 commented 1 year ago

I think openSUSE uses a patched version of grub that may not be available on all distros. Reliable Desktop Linux Installation with Btrfs Snapshots, Snapper, and Rollbacks on Ubuntu (openSUSE style) explains this issue and devises a snapper plugin that allows grub to look for grub.cfg in the correct subvolume after each rollback.

365 may also be relevant.

ak-li commented 3 months ago

Possibly of interest. siduction-btrfs

We have developed a user-friendly solution to this problem. siduction is a rolling release distribution based on Debian sid.

We use systemd units and two scripts to create a clean boot menu for the user. In the case of GRUB, after a rollback, the system boots into the rollback target and reinstalls GRUB from there. In the case of systemd-boot, boot entries are generated for the rollback target and all kernels present there.