使用 休眠后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 的评论,您必须:
找到交换分区的 uuid。假设分区是 sdb3,那么
$ ls -l /dev/disk/by-uuid/ | grep sdb3 lrwxrwxrwx 1 root root 10 окт. 9 08:59 1dd7e123-1f82-45f0-a202-0ff3ea6f081a -> ../../sdb3
打开
/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"
- 以 root 身份运行
update-grub
- 需要重新启动才能使用新的内核命令行。
答案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 像以前一样引发休眠状态,但在开机时机器的先前状态已正确恢复。