Grub will not show menu with entries, system boots into the first choice

Hi folks,

I’ve got an issue at boot. I’m on openSUSE 13.1 with GNOME and everything worked fine until a few days ago, when I decided to hibernate my system. My computer supports hibernation, so it worked, but since the hibernation, after a reboot, grub doesn’t show me the menu but boots into the first choice (opensuse 13.1). It displays, for a moment, this message:
GRUB loading,
welcome to GRUB
(and then, instead of the menu)
“error: sparse file not allowed”
and then boots into opensuse displaying
“Booting: opensuse 13.1
loading kernel…
loading initial ramdisk…”

How can I repair grub’s menu?
Thanks in advance

Sounds like https://bugzilla.novell.com/show_bug.cgi?id=856391.
Do you have /boot on a btrfs or LVM partition?

To fix it, remove the file /boot/grub2/grubenv.

Yes, I have the whole / partition on BTRFS.

So remove /boot/grub2/grubenv and grub2 should show the menu again.

The problem is that on hibernating, a script sets the entry that grub2 should boot to your hibernated Linux system, so you can’t mistakenly boot another system which may modify partitions mounted by the hibernated system and thus cause data-loss.
But grub2 cannot write to btrfs, so it cannot remove that flag itself. Therefore also on following boots, grub2 directly boots that Linux system.

To not have that happen in the future (until the bug is fixed), you could remove the file /usr/lib/pm-utils/sleep.d/99Zgrub (or remove the package “pm-utils”).
Or modify it according to http://hamberg.no/erlend/posts/2010-10-01-showing-grub-menu-after-hibernating-in-opensuse.html .