休眠在我的 Ubuntu 18.04 上,它无法开箱即用(我是说sudo systemctl hibernate
)。因此,我前段时间尝试过多次修复此问题,但不幸的是,我记不清我具体做了什么。
但现在:
sudo hibernate
成功休眠系统,下次启动时系统状态成功恢复,但登录屏幕没有出现,这不太好。如果我运行了许多应用程序,那么在恢复后系统可能会冻结长达 20 分钟(我可以看到应用程序的窗口,可以移动鼠标指针,但系统对点击没有反应),但之后可以正常工作。
sudo systemctl hibernate
执行某些操作,关闭系统,但在下次启动时,我看到几条消息删除孤立节点最后进行干净启动,就好像没有休眠一样。
请帮我清理它并在 GUI 界面中启用休眠模式。
同时挂起到内存和从内存恢复工作正常,没有问题,包括简历上的登录屏幕。
我的主要问题是:在 18.04 中我应该使用hibernate
哪一种机制?systemctl hibernate
细节
系统有交换分区
$ lsblk | grep SWAP
└─sda5 8:5 0 16,8G 0 part [SWAP]
$ free -m
total used free shared buff/cache available
Mem: 15894 3386 9945 1311 2561 11848
Swap: 17163 2150 15013
并且其中/etc/default/grub
有
GRUB_CMDLINE_LINUX_DEFAULT="安静启动恢复=/dev/sda5" GRUB_CMDLINE_LINUX=""
和
$ cat /sys/power/state
freeze mem disk
$ cat /sys/power/disk
[platform] shutdown reboot suspend test_resume
[解决了] :-)
最后我终于把休眠功能带入了工作。只要我对这个主题没有很深的理解,我宁愿描述我做了什么。所以
- 彻底移除pm-实用程序和韋斯特,
sudo update-initramfs -c -k all
然后reboot
这次休眠尝试后,最终进入干净启动,而不是恢复。所以
- 重新安装systemd然后将设备名称更改为 UUID,以便
在/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="安静启动恢复=UUID=2c8ec945-6967-4538-93ef-49eb4df6f2a1"
在/etc/initramfs-tools/conf.d/resume
简历=UUID=2c8ec945-6967-4538-93ef-49eb4df6f2a1
然后
$ sudo update-initramfs -c -k all
$ sudo update-grub
$ reboot
此后sudo systemctl hibernate
,恢复成功,但没有登录屏幕,因此
- 在设置(GUI)对于电源按钮操作我指定了“休眠”
现在,当我按下电源按钮时,系统会休眠,然后通过登录屏幕恢复。
非常感谢所有参与者
UPD:现在我找到了一个更好的解决方案 - 使用交换文件
我在全新安装的 Ubuntu 18.10 桌面版上验证了这一点,并假设它也能与全新安装的 18.04 桌面版兼容,因为它们都使用交换空间文件默认情况下,即他们不分配交换分割默认情况下。但无论系统内存大小如何,默认交换文件都是 2Gb,因此应该增加。
完整描述如下这里。
答案1
这里有两个关于冬眠问题的极好的答案,并且更详细一些:
小古老森林神的回答:Ubuntu 18.04 休眠后无法恢复
扎娜的回答:如何在 Ubuntu 16.04 上休眠?
我通常不使用 Hibernate,但最近在追踪错误时尝试使用它,并意识到为了在 18.04 上工作,您需要在 /etc/default/grub 中添加一行来告诉它从哪里恢复。
在 16.04 上,我不需要向 grub 添加“resume=”参数,所以我认为这个变化是最近发生的。
最好使用 UUID(通用唯一标识符),并可以使用“磁盘”程序找出交换分区的 UUID,然后从那里复制并粘贴即可。
使用sudo nano /etc/default/grub
添加到行
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
这样它resume=UUID=theUUIDofyourswappartition
在引号之间就有额外的内核参数。
您的代码可能有所不同,但我的例子中的代码是:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=549816d3-0ed8-44fa-a7e4-968db519a141"
Ctrl(使用+退出 nano x,按y进行更改并enter接受文件名)
您需要运行sudo update-grub
才能使您的更改生效,但是当您下次重新启动时,您应该能够毫无问题地休眠。
据我所知,休眠的功能是恢复到您上次中断的地方,因此不是设计用于转到登录屏幕并询问您的密码。
我不知道您是否可以更改它以便它会要求您输入密码,但可能值得提出一个单独的问题以看看其他人是否知道该怎么做。
交换文件
如果您有一个交换文件而不是单独的交换分区,那么您还需要添加额外的resume_offset=
参数。
Arch Linux Wiki 有对此有很好的介绍但基本上您的交换文件应该位于安装 Ubuntu 的主分区上。
为了找出要输入的偏移量,resume_offset=
您可以打开终端并输入
sudo filefrag -v /swapfile
你会得到如下结果:
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
2: 63488.. 96255: 100352.. 133119: 32768: 98304:
3: 96256.. 126975: 133120.. 163839: 30720:
etc...
并且你想要第一个数字,在第一行physical_offset
(在本例中34816
)
举个例子,使用我的机器的 UUID 和物理偏移量与 Swapfile,我将行更改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
为
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=09e601cd-5bac-491a-9115-fda1b2eb4664 resume_offset=34816"
不要忘记运行sudo update-grub
并重新启动,但此后休眠模式应该可以正常工作。