PM:休眠图像不存在或无法加载

PM:休眠图像不存在或无法加载

使用 休眠后systemctl hibernate,系统正常启动,就像已关机一样。我在内核行中有一个 resume 参数,在 mkinitcpio.conf 中有一个 resume 钩子

这些是相关的内核消息:

$ dmesg | grep -i swap
[    0.000000] Command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[    0.000000] Kernel command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[    0.350295] PM: Checking hibernation image partition /dev/sda4
[    8.776686] Adding 8191996k swap on /dev/sda4.  Priority:-1 extents:1 across:8191996k FS
$ dmesg | grep -i hibern
[    0.350295] PM: Checking hibernation image partition /dev/sda4
[    0.350301] PM: Hibernation image not present or could not be loaded.

所以唯一剩下的可能性就是systemctl 没有写入磁盘。事实上,当我运行该命令时,屏幕首先会空白几秒钟,然后我就能再次看到我的终端,最后它会自动关闭。

我读到 pm-utils 与 systemd 配合得不是很好,所以我不想切换到它们。有什么建议吗?

谢谢!

答案1

为了详细说明@AdrianRatnapala 的评论,您必须:

  1. 找到交换分区的 uuid。假设分区是 sdb3,那么

    $ ls -l /dev/disk/by-uuid/ | grep sdb3
    lrwxrwxrwx 1 root root 10 окт.   9 08:59 1dd7e123-1f82-45f0-a202-0ff3ea6f081a -> ../../sdb3
    
  2. 打开/etc/default/grub,找到以 开头的行GRUB_CMDLINE_LINUX_DEFAULT="。在引号之间添加resume=/dev/disk/by-uuid/your-swap-uuid。例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/disk/by-uuid/1dd7e123-1f82-45f0-a202-0ff3ea6f081a"
    
  3. 以 root 身份运行update-grub
  4. 需要重新启动才能使用新的内核命令行。

答案2

我想在这里分享我的成功经验,因为它可能会帮助其他人解决这个问题。对于想要跳过细节的人来说,最重要的是:在更改 /etc/default/grub 文件中的 GRUB_CMDLINE_LINUX_DEFAULT 行并执行 update-grub 后,在尝试休眠之前,请完全关闭并重新启动计算机。

详细信息:我刚刚按照上述建议在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 行中添加 resume=UUID= 参数,成功在我的 Lenovo ThinkPad T480(双启动 Debian 9 和 Windows)的 Linux 安装上实现了休眠。但第一次没有成功。我添加了参数,运行了 update-grub,并尝试休眠(systemctl-hibernate)。系统似乎进入了休眠状态,但重新启动时,上一个屏幕图像会出现并保留几秒钟,然后机器才会进入通常在首次启动时出现的登录屏幕;休眠前的所有工作都消失了。我终于注意到(grep 'command line' syslog)更改的 GRUB_CMDLINE_LINUX_DEFAULT 行尚未传递给内核。经过更多努力,我发现完全关机并重新启动会导致传递更改的行(再次 grep 'command line' syslog)。此后,systemctl hibernate 像以前一样引发休眠状态,但在开机时机器的先前状态已正确恢复。

相关内容