当我使用Ubuntu 17.04时,Hibernate可以正常工作。升级到17.10后,由于恢复后出现黑屏而无法恢复(此bug)。
升级到18.04后,如果我尝试在休眠后启动计算机,则它会启动,好像没有进行任何休眠一样。
当我使用Ubuntu 17.04时,Hibernate可以正常工作。升级到17.10后,由于恢复后出现黑屏而无法恢复(此bug)。
升级到18.04后,如果我尝试在休眠后启动计算机,则它会启动,好像没有进行任何休眠一样。
Answers:
与以前的LTS(16.04)相比,默认设置有所更改。就我而言,休眠直到我执行几个步骤后才起作用,其中包括增加交换文件的大小,打开它,确保策略允许它等等。
这可能是我在整个StackExchange上最长的答案,因此我尝试使标头具有描述性。
审慎地查看您的日志(dmesg
可能会有所帮助),看看是否有任何内容。尽管有原因,尽管您告诉系统进入休眠状态,但实际上却不会,或者它会挂起到RAM(休眠)。
查看kern.log
并syslog
查找任何与休眠有关的消息也不会受到伤害。以“问题”开头的部分可能会帮助您解决特定问题。
一项重要的更改是,现在您没有交换分区,但是有了交换文件。
交换文件可能不适用于您的硬件/驱动程序/操作系统和休眠模式。
策略也可能会关闭或禁止休眠。
挂起RAM-RAM保持数据,计算机更快进入睡眠状态,挂起时消耗更多能量,唤醒得更快。有人称此为睡眠。
挂起至磁盘-也称为休眠状态。RAM被保存以进行交换(分区或文件),计算机进入睡眠速度较慢,休眠时消耗的能量较少,唤醒速度较慢。
要休眠,您需要(在此处简化)将整个RAM保存到硬盘驱动器。因此,您需要留出足够的空间来这样做。如果不这样做,它将失败,并且您将不会休眠。
free -m
会告诉您您有多少内存,使用的内存以及交换中有多少内存。 df -h
会告诉您每个安装点上有多少磁盘空间,以及已使用,可用等的空间。这很重要,因为您以后可能要指定交换文件的位置或要“修剪”的分区。足够的空间用于交换。cat fstab
如果您有交换分区或文件,则应向您提供信息。根据Ubuntu Hibernation,常见问题解答swapfile
可能并不总是与某些硬件/驱动程序结合使用。如果您没有足够的空间,请遵循Ubuntu swap FAQ。它告诉您如何增加交换文件,添加另一个文件,检查是否使用了交换文件等。带有命令和说明。真的很好的资源。
内核文档说:
/ sys / power / image_size控制由磁盘暂挂机制创建的映像的大小。可以写一个表示非负整数的字符串,该字符串将用作图像大小的上限(以字节为单位)。磁盘暂挂机制将尽最大努力确保映像大小不会超过该数目。但是,如果事实证明这是不可能的,则它将尝试使用尽可能小的图像来暂停。特别是,如果将“ 0”写入此文件,则挂起映像将尽可能小。从该文件读取将显示当前图像大小限制,默认情况下将其设置为可用RAM的2/5。
因此,请尝试调整图像大小。方法-请问另一个问题。
内核支持中列出的内容/sys/power/state
,因此:
cat /sys/power/state
允许(据我所知)条目有很多,包括:mem
,standby
,freeze
,disk
。说明:
mem
-具有多种含义,您可以通过准确地在系统上找到一种含义cat /sys/power/mem_sleep
。我有:s2idle [deep]
standby
-开机挂起(如果支持)freeze
-暂停至空闲(STI)disk
-挂起至磁盘(STD),处于休眠状态。这个-你想要的。然后我们需要检查cat /sys/power/disk
。如果您在那里,disabled
那么请进入BIOS寻找“安全启动”-这是我唯一能提供的想法,并且我所知道的唯一事情可能会干扰并关闭休眠状态。虽然我只知道SecureBoot,但可能还会有其他干扰,因此即使您没有任何“安全启动”,看看BIOS也是一个好主意。
在这里阅读:
TBH,即使您的内核不支持休眠,您也可以尝试另一种方式,向下滚动到sectionInterfaces
。
没有特别的顺序:
不要使用BTRFS并休眠:将导致损坏的数据。
在某些情况下,人们放弃交换文件并返回交换分区。毕竟,它适用于以前的LTS。我没有尝试,所以不会提供指针。
/etc/fstab
为新文件。重新启动以查看更改是否已正确完成(存储的备份,fstab
以便您以防万一。仔细阅读并决定是否要这样做,但这只是配置内核的一种方法。通过systemd
和休眠可能更容易uswsusp
(请参见下面的接口)。可能是,您-和我一样-最终将决定RAM暂挂就足够了,并且您不想在交换文件上拥有32GB的存储空间(例如,对于笔记本电脑中只有一个SSD的人们来说,这不是那么好)。但!
resume=
知道交换文件位于哪个分区上,并resume_offset=
知道从哪个位置开始恢复交换文件。resume=
指向交换分区。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/sdaX
或UUID
或LVM。要休眠到文件-提供可以在其中找到文件的分区。
阅读:
交换文件需要正确格式化。如果您的日志告诉您,则说明您试图休眠到文件,或者您的简历参数不正确。
切换到分区或修复文件或更改用于休眠的接口。
参见:https : //unix.stackexchange.com/questions/43508/debian-hibernate-problem-pm-swap-header-not-found
测试:(pm-hibernate
如果已安装pm-utils软件包)或systemctl hibernate
告诉您您不允许这样做。自IIRC 12.04起,Ubuntu中的默认设置。
解决方案:取决于您的Polkit版本,Ubuntu版本和风味...请参阅此问题。另外,Polkit上的ArchWiki可能会有所帮助。
对于薄荷,请参见:https : //forums.linuxmint.com/viewtopic.php?t=259912
测试:cat /sys/power/disk
具有disabled
。日志显示“无法通过登录来休眠系统:不支持睡眠动词”。
解决方案:搜索您的BIOS,找到有问题的东西。把它关掉。
解决方案2:尝试另一个休眠界面。
对我来说,编译该文件大约需要两天的时间。希望这可以帮助您(和其他人)更快地解决您的问题。我仍然错过了一些要点,但现在是凌晨2点,我现在不想写更多内容了。我当然愿意接受任何人的指教,以使其变得更好,因此请置评。睡觉,上班等我会回复:-)
我不确定进入磁盘休眠状态有多好。我最后睡着了。但是对我来说,问题在于拥有32GB的文件只是为了使其能够进入休眠状态,因为我通常完全避免交换。我最初的交换文件为2GB,但大部分为空。YMMV。尽管如此,祝你好运!从日志开始!
$ sudo apt install linux-generic-hwe-18.04
对于某些硬件,甚至linux-generic-hwe-18.04-edge
值得一试)。
使用交换分区的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)查看它是否有效
对我来说,它一直有效到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
经过多次尝试,这才是一回事,也许仅仅是因为内核的更新将其搞砸了,但无论如何,它的作用越来越小。
希望这会对某人有所帮助,但是我正在运行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
如果简历丢失或错误,则需要再次更新启动内核。
除了在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
如果打印0
,laptop_mode
则表明不能正常工作,否则表明工作正常。