Bug ID | 911243 |
---|---|
Summary | SUSE_BTRFS_SNAPSHOT_BOOTING=true breaks resume after hibernate |
Classification | openSUSE |
Product | openSUSE Distribution |
Version | 13.2 |
Hardware | x86-64 |
OS | openSUSE 13.2 |
Status | NEW |
Severity | Normal |
Priority | P5 - None |
Component | Bootloader |
Assignee | jsrain@suse.com |
Reporter | wbauer@tmo.at |
QA Contact | jsrain@suse.com |
Found By | --- |
Blocker | --- |
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) konqueror/4.14.3 Safari/537.21 Build Identifier: If SUSE_BTRFS_SNAPSHOT_BOOTING is set to true in /etc/default/grub (the default), the hibernate scripts (/usr/bin/systemd-sleep-grub, /usr/lib/pm-utils/sleep.d/99Zgrub) get confused by the "menuentry" added to the 00_header in grub.cfg. So they set the wrong (off by one) entry to be booted. Reproducible: Always Steps to Reproduce: 1. set SUSE_BTRFS_SNAPSHOT_BOOTING=true (that's the default anyway) 2. boot a previous kernel in "Advanced Options" 3. hibernate, then resume Actual Results: The wrong boot entry is booted (recovery mode), therefore no resume is actually taking place. And now that boot entry is even set permanently because of bug#856391. Expected Results: The system resumes successfully. Here's the debug output (from the pm-utils script, systemd-sleep-grub says basically the same though): INFO: running prepare-grub Skipping grub entry #3, because it has the noresume option Skipping grub entry #5, because it has the noresume option Skipping grub entry #6, because it has no root= option running kernel is grub menu entry 4 (vmlinuz-3.16.6-2-desktop) preparing boot-loader: selecting entry 4, kernel /boot/3.16.6-2-desktop grub-once: saving original /boot/grub2/grubenv running '/usr/sbin/grub2-once 4' while those are the menu entries: # grub2-once --list 0 openSUSE 1 Advanced options for openSUSE>openSUSE, with Linux 3.16.7-7-desktop 2 Advanced options for openSUSE>openSUSE, with Linux 3.16.7-7-desktop (recovery mode) 3 Advanced options for openSUSE>openSUSE, with Linux 3.16.6-2-desktop 4 Advanced options for openSUSE>openSUSE, with Linux 3.16.6-2-desktop (recovery mode) 5 openSUSE Memtest 6 Microsoft Windows XP Professional (on /dev/sda1) (I booted #3 here) Of course #3 and #5 do _not_ have the "noresume" option, but #2 and #4 have. The problem is this: if "SUSE_BTRFS_SNAPSHOT_BOOTING" is true (in /etc/default/grub) the following is created in the menu header: if [ -n "$extra_cmdline" ]; then submenu "Bootable snapshot #$snapshot_num" { menuentry "If OK, run 'snapper rollback $snapshot_num' and reboot." { true; } The hibernate scripts look for the string "menuentry " to identify menu entries, so this gets counted as entry#0 and the following real menu entries are off by one. If you are running the default kernel, there is not really a problem though, as entry#0 and entry#1 are actually the same (#1 is the default kernel entry inside the "Advanced Options" submenu). I think this is the reason why this has gone through unnoticed until now... ;-)