18.04 中的休眠

18.04 中的休眠

休眠在我的 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

[解决了] :-)

最后我终于把休眠功能带入了工作。只要我对这个主题没有很深的理解,我宁愿描述我做了什么。所以

  1. 彻底移除pm-实用程序韋斯特sudo update-initramfs -c -k all然后reboot

这次休眠尝试后,最终进入干净启动,而不是恢复。所以

  1. 重新安装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,恢复成功,但没有登录屏幕,因此

  1. 设置(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并重新启动,但此后休眠模式应该可以正常工作。

相关内容