休眠后无法恢复Ubuntu 18.04


17

当我使用Ubuntu 17.04时,Hibernate可以正常工作。升级到17.10后,由于恢复后出现黑屏而无法恢复(此bug)。

升级到18.04后,如果我尝试在休眠后启动计算机,则它会启动,好像没有进行任何休眠一样。


我对18.04有同样的问题,我认为解决方案必须是为简历指定正确的分区,但仍然找不到解决方法。我所有发现的Google都不适合我。
user2819650

该分区在/etc/initramfs-tools/conf.d/resume中正确设置为我的交换。我怀疑休眠未正确完成,或者在启动过程中无法恢复。但是我不知道如何进一步调试它。Syslog和dmesg没有提供任何线索,说明出了什么问题。
卡米尔

Answers:


29

与以前的LTS(16.04)相比,默认设置有所更改。就我而言,休眠直到我执行几个步骤后才起作用,其中包括增加交换文件的大小,打开它,确保策略允许它等等。

这可能是我在整个StackExchange上最长的答案,因此我尝试使标头具有描述性

没有冬眠的靴子

审慎地查看您的日志(dmesg可能会有所帮助),看看是否有任何内容。尽管有原因,尽管您告诉系统进入休眠状态,但实际上却不会,或者它会挂起到RAM(休眠)。

查看kern.logsyslog查找任何与休眠有关的消息也不会受到伤害。以“问题”开头的部分可能会帮助您解决特定问题。

交换文件或交换分区

一项重要的更改是,现在您没有交换分区,但是有了交换文件。

交换文件可能不适用于您的硬件/驱动程序/操作系统和休眠模式。

休眠状态已关闭

策略也可能会关闭或禁止休眠。

行话

挂起RAM-RAM保持数据,计算机更快进入睡眠状态,挂起时消耗更多能量,唤醒得更快。有人称此为睡眠。

挂起至磁盘-也称为休眠状态。RAM被保存以进行交换(分区或文件),计算机进入睡眠速度较慢,休眠时消耗的能量较少,唤醒速度较慢。

Linux中的Suspend-to-RAM,作者Rafael J. Wysocki和A. Leonard Brown

先决条件-您是否有足够的空间?

要休眠,您需要(在此处简化)将整个RAM保存到硬盘驱动器。因此,您需要留出足够的空间来这样做。如果不这样做,它将失败,并且您将不会休眠。

  1. free -m 会告诉您您有多少内存,使用的内存以及交换中有多少内存。
  2. df -h 会告诉您每个安装点上有多少磁盘空间,以及已使用,可用等的空间。这很重要,因为您以后可能要指定交换文件的位置或要“修剪”的分区。足够的空间用于交换。
  3. cat fstab如果您有交换分区或文件,则应向您提供信息。根据Ubuntu Hibernation,常见问题解答swapfile可能并不总是与某些硬件/驱动程序结合使用。

如果您没有足够的空间,请遵循Ubuntu swap FAQ。它告诉您如何增加交换文件,添加另一个文件,检查是否使用了交换文件等。带有命令和说明。真的很好的资源。

我没有足够的空间来容纳我的RAM!

内核文档说:

/ sys / power / image_size控制由磁盘暂挂机制创建的映像的大小。可以写一个表示非负整数的字符串,该字符串将用作图像大小的上限(以字节为单位)。磁盘暂挂机制将尽最大努力确保映像大小不会超过该数目。但是,如果事实证明这是不可能的,则它将尝试使用尽可能小的图像来暂停。特别是,如果将“ 0”写入此文件,则挂起映像将尽可能小。从该文件读取将显示当前图像大小限制,默认情况下将其设置为可用RAM的2/5。

因此,请尝试调整图像大小。方法-请问另一个问题。

先决条件-您的内核是否支持磁盘挂起?

内核支持中列出的内容/sys/power/state,因此:

cat /sys/power/state

允许(据我所知)条目有很多,包括:memstandbyfreezedisk。说明:

  • mem-具有多种含义,您可以通过准确地在系统上找到一种含义cat /sys/power/mem_sleep。我有:s2idle [deep]
  • standby -开机挂起(如果支持)
  • freeze -暂停至空闲(STI)
  • disk-挂起至磁盘(STD),处于休眠状态。这个-你想要的。

然后我们需要检查cat /sys/power/disk。如果您在那里,disabled那么请进入BIOS寻找“安全启动”-这是我唯一能提供的想法,并且我所知道的唯一事情可能会干扰并关闭休眠状态。虽然我只知道SecureBoot,但可能还会有其他干扰,因此即使您没有任何“安全启动”,看看BIOS也是一个好主意。

在这里阅读:

  1. 内核文档
  2. 休眠状态下的Debian Wiki

TBH,即使您的内核不支持休眠,您也可以尝试另一种方式,向下滚动到sectionInterfaces

阅读本-警告和问题-没有BTRFS

没有特别的顺序:

  1. 并非所有芯片组都可以工作(这里没有我可以引用的消息来源,所以说这是传闻)
  2. VAIO有问题,据说这里有一个应对之策
  3. SecureBoot通常被称为干扰或关闭休眠模式
  4. 局域网唤醒甚至在休眠时也会消耗功率
  5. 在系统从休眠状态正确恢复之前,可能需要初始化模块(特别是图形)的数量- 这通常是恢复时黑屏的原因。查看ArchLinux Wiki,获取有关如何调试问题的提示。我还会建议有关休眠问题的Ubuntu FAQ。浏览Launchpad错误可能也会产生结果。IIRC,有一个内核参数指定恢复之前的延迟(以秒为单位)。
  6. 对于不同的Polkit版本,允许的休眠过程有所不同

不要使用BTRFS并休眠:将导致损坏的数据。

我想休眠-交换分区

在某些情况下,人们放弃交换文件并返回交换分区。毕竟,它适用于以前的LTS。我没有尝试,所以不会提供指针。

我想休眠-与交换文件

  1. 确保那里有足够的空间。Ubuntu swap FAQ告诉您您需要多少,上面的命令也是如此。如果您在这里需要更多信息,请问另一个问题,因为这是一个冗长的话题。
  2. 增加交换文件或创建一个具有足够大小的新文件(最好,我同意@muru)并将其更改/etc/fstab为新文件。重新启动以查看更改是否已正确完成(存储的备份,fstab以便您以防万一。
  3. 使用适当的参数将内核指向此位置,以便它知道从何处恢复。
  4. 更新/重新配置引导加载程序并重新引导。

内核参数?害怕!

仔细阅读并决定是否要这样做,但这只是配置内核的一种方法。通过systemd和休眠可能更容易uswsusp(请参见下面的接口)。可能是,您-和我一样-最终将决定RAM暂挂就足够了,并且您不想在交换文件上拥有32GB的存储空间(例如,对于笔记本电脑中只有一个SSD的人们来说,这不是那么好)。但!

  1. 休眠到交换文件需要resume=知道交换文件位于哪个分区上,并resume_offset=知道从哪个位置开始恢复交换文件。
  2. 休眠到分区需要resume=指向交换分区。
  3. 解决黑屏问题可能需要resumedelay=

有关延迟从休眠状态恢复的内核文档:

resumedelay = [HIBERNATION]尝试读取简历文件之前要暂停的延迟(以秒为单位)

交换文件和休眠所需的参数

简历= [SWSUSP]

      Specify the partition device for software suspend

      Format:

      {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}

resume_offset = [SWSUSP]

      Specify the offset from the beginning of the partition
      given by "resume=" at which the swap header is located,
      in <PAGE_SIZE> units (needed only for swap files).

      See Documentation/power/swsusp-and-swap-files.txt

对于resume=选择与root元素中相同的样式fstab。因此,或者/dev/sdaXUUID或LVM。要休眠到文件-提供可以在其中找到文件的分区。

阅读:

  1. https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
  2. https://wiki.archlinux.org/index.php/Kernel_parameters

问题-找不到交换头

交换文件需要正确格式化。如果您的日志告诉您,则说明您试图休眠到文件,或者您的简历参数不正确。

切换到分区或修复文件或更改用于休眠的接口。

参见:https : //unix.stackexchange.com/questions/43508/debian-hibernate-problem-pm-swap-header-not-found

mkswap用于格式化文件,在此处了解更多信息

问题!不允许休眠!

测试:(pm-hibernate如果已安装pm-utils软件包)或systemctl hibernate告诉您您不允许这样做。自IIRC 12.04起,Ubuntu中的默认设置。

解决方案:取决于您的Polkit版本,Ubuntu版本和风味...请参阅此问题。另外,Polkit上的ArchWiki可能会有所帮助。

对于薄荷,请参见:https : //forums.linuxmint.com/viewtopic.php?t=259912

问题!BIOS中的某些功能禁用了休眠功能!

测试:cat /sys/power/disk具有disabled。日志显示“无法通过登录来休眠系统:不支持睡眠动词”。

解决方案:搜索您的BIOS,找到有问题的东西。把它关掉。

解决方案2:尝试另一个休眠界面。

请参阅:如何在16.04.1中激活休眠模式?(系统化)

介面

  1. swsusp-低级内核接口。请参阅先决条件-内核了解哪些文件。直接写入文件可能会导致挂起(到RAM,磁盘和混合磁盘)。据SwapFAQ休眠文件问题。
  2. uswsusp- ArchWikiDebian Wiki,以及有关如何使用它的漂亮的AskUbuntu问题
  3. systemd- ArchWiki就可以了
  4. pm-utils-AFAIK是最初来自Debian 的脚本的集合 -我很乐意欢迎您提供更多信息。

结束语

对我来说,编译该文件大约需要两天的时间。希望这可以帮助您(和其他人)更快地解决您的问题。我仍然错过了一些要点,但现在是凌晨2点,我现在不想写更多内容了。我当然愿意接受任何人的指教,以使其变得更好,因此请置评。睡觉,上班等我会回复:-)

我不确定进入磁盘休眠状态有多好。我最后睡着了。但是对我来说,问题在于拥有32GB的文件只是为了使其能够进入休眠状态,因为我通常完全避免交换。我最初的交换文件为2GB,但大部分为空。YMMV。尽管如此,祝你好运!从日志开始!


好答案!但是最终解决了我的问题的是链接的Swap FAQ,它告诉我在我的grub配置文件中的变量中添加“ resume = UUID”,并且/或者与initramfs-tools类似。由于某种原因,我那里的UUID错误,这可能是问题所在。因此,我建议有类似问题的人员首先查看“如何添加或修改交换分区?”下的“交换常见问题”中的内容,以及有关休眠的第三点。
RimaNari

1
“磁盘-挂起至磁盘(STD),处于休眠状态。这-您想要的。” 我是唯一一个受此打击的人吗?非常感谢。
spakmad

好答案!一个小小的评论:在我的一台机器上,仅在第二次尝试启动后休眠工作后才恢复(第一次尝试时,显示器上没有显示任何内容)。我可以修复安装HWE堆栈的问题:($ sudo apt install linux-generic-hwe-18.04对于某些硬件,甚至linux-generic-hwe-18.04-edge值得一试)。
hiro主角

1
啊。我不会冬眠!我有512Gb RAM。哦,好...(我的10Tb HDD上有足够的空间,但是重启需要几个小时!)
Alexis Wilke

9

使用交换分区的UUID代替RESUME参数resume=UUID=<#>中的安装点/etc/default/grub/etc/initramfs-tools/conf.d/resume

在创建交换分区的条目/etc/fstab 没有安装点是这样的

# Entry for Swap : 
UUID=# none  swap    sw              0       0

/etc/default/grub我使用一个单独的条目来恢复休眠状态

# FOR HIBERNATION 
GRUB_CMDLINE_LINUX="resume=UUID=..."

在地方当局中创建策略工具包(pkla)

sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

然后插入

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes

之后,更新initramfs和GRUB

sudo update-initramfs -u -k all
sudo update-grub

重新启动,打开一些应用程序并使用systemctl hibernate(不使用sudo)查看它是否有效


工作良好!非常感谢。
Yossarian42,

谢谢男人,你救了我!
Vahe Shadunts

1

对我来说,它一直有效到18.04,而在18.04之后,我在很多文章中都启用了它,但是直到昨天它突然停止工作(可以工作4-5个月),

这是...使它再次工作的一件事...

告诉grub2交换分区在哪里:

首先使用以下命令找出它所在的分区:

cat /etc/fstab

我的在sda7上,如下所示:

在安装过程中,交换位于/ dev / sda7上

然后,使用以下命令在Grub2的以下行中添加以下内容:

须藤gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT =“ intel_pstate =禁用简历= / dev / sda7”

重要的是 resume=/dev/sda7

在我的情况下是/ dev / sda7

然后,使用以下命令更新Grub,在此之后它又可以再次正常运行:

sudo update-grub

经过多次尝试,这才是一回事,也许仅仅是因为内核的更新将其搞砸了,但无论如何,它的作用越来越小。


0

希望这会对某人有所帮助,但是我正在运行popos / ubuntu 19.04。在我的设置中,我能够使用s2disk或pm-hibernate进行休眠,但是恢复失败。为了解决这个问题,我的系统是使用UEFI而不是grub启动的。我只需要重新安装引导加载程序。要检查您是否正在运行UEFI,请使用以下命令:

[ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"

如果处于UEFI模式,那么我将按照本指南重新安装引导加载程序,如果您使用的是nvme磁盘或sata磁盘,则会有所不同:https : //support.system76.com/articles/bootloader/

确保在您的kernalboot选项中指定要从中恢复的分区或UUID,例如:

简历= UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

您可以通过以下任一方法添加它:1)sudo kernel-stub -a“ resume = UUID = ...” 2)编辑/etc/initramfs-tools/conf.d/resume文件并添加:resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

检查您的/ var / log / syslog文件是否类似以下内容:8月4日22:26:42 pop-os / usr / bin / kernelstub [19639]:kernelstub:DEBUG kopts:root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

如果简历丢失或错误,则需要再次更新启动内核。


0

除了在Sam73的答案中提到的grub中设置交换恢复点之外,我还发现我的Ubuntu 18.04也需要安装laptop-mode-tools

$sudo apt install laptop-mode-tools

然后ENABLE_LAPTOP_MODE_ON_AC=1在配置文件中更改:

$sudo vim /etc/laptop-mode/laptop-mode.conf

使用以下命令启动笔记本电脑模式:

$sudo laptop_mode start

PS您可以检查笔记本电脑是否启动与

$cat /proc/sys/vm/laptop_mode

如果打印0laptop_mode则表明不能正常工作,否则表明工作正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.