当我使用 Ubuntu 17.04 时,Hibernate 工作正常。升级到 17.10 后,由于恢复后黑屏而无法恢复(此错误)。
升级到 18.04 后,如果我尝试在休眠后启动计算机,它会像没有进行休眠一样启动。
LAF*_*ica 36
与之前的 LTS (16.04) 相比,对默认设置进行了更改。在我的情况下,直到我做了几个步骤,休眠才起作用,其中包括增加交换文件的大小,打开它,确保策略允许它等。
这可能很容易成为我对整个 StackExchange 的最长回答,因此我尝试使标题具有描述性。
谨慎查看您的日志(dmesg
可能会有所帮助)并查看是否有任何内容。尽管您告诉系统休眠,但实际上它不会,或者它会挂起到 RAM(睡眠),这是有原因的。
查看kern.log
并syslog
寻找任何与休眠相关的消息也不会受到伤害。以“问题”开头的部分可能会帮助您解决特定问题。
一个重要的变化是,现在您没有交换分区,但您有一个交换文件。
交换文件可能不适用于您的硬件/驱动程序/操作系统和休眠的混合。
策略也可能关闭或禁止休眠。
暂停到 RAM - RAM 保存数据,计算机进入睡眠更快,暂停时使用更多能量,唤醒更快。有人称之为睡眠。
挂起到磁盘 - 又名休眠。RAM 被保存到交换(分区或文件),计算机进入睡眠较慢,休眠时使用较少的能量,唤醒较慢。
要休眠,您需要(此处简化)将整个 RAM 保存到硬盘驱动器。所以,你需要留出足够的空间来这样做。如果你不这样做,这将失败并且你不会休眠。
free -m
会告诉你你有多少内存,使用多少以及你的交换中有多少。 df -h
将告诉您每个挂载点上有多少磁盘空间以及已使用、空闲等。这很重要,因为您可能希望稍后指定交换文件的位置,或者要“修剪”哪个分区足够的空间供您交换。cat fstab
如果您有交换分区或文件,应该为您提供信息。根据 Ubuntu 休眠常见问题解答swapfile
可能并不总是适用于某些硬件/驱动程序组合。如果您没有足够的空间,请遵循Ubuntu 交换常见问题解答。它告诉你如何增加交换文件,添加另一个,检查它是否被使用等。带有命令和解释。真是不错的资源。
内核文档说:
/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,即使您的内核不支持休眠,您也可以通过其他方式尝试,向下滚动到部分Interfaces
。
没有特定的顺序:
不要使用 BTRFS 和休眠:会导致数据损坏。
在某些情况下,当人们放弃交换文件并返回交换分区时。毕竟,它适用于以前的 LTS。我没有尝试,所以不会提供指针。
/etc/fstab
为新文件。重新启动以查看更改是否正常(存储备份,fstab
以便您可以轻松恢复以防万一。仔细阅读并决定是否要这样做,但这只是配置内核的一种方式。通过systemd
and休眠可能更容易uswsusp
(请参阅下面的接口)。可能是,您 - 像我一样 - 最终会决定挂起到 RAM 就足够了,并且您不想在交换文件上有 32GB(例如,对于笔记本电脑中有一个 SSD 的人来说不是很好)。但!
resume=
知道您的交换文件在哪个分区上,并resume_offset=
知道从交换文件中的哪个位置开始恢复。resume=
指向交换分区。resumedelay=
.关于延迟从休眠状态恢复的内核文档:
resumedelay= [HIBERNATION] 在尝试读取恢复文件之前暂停的延迟(以秒为单位)
交换文件和休眠所需的参数:
简历= [SWSUSP]
Run Code Online (Sandbox Code Playgroud)Specify the partition device for software suspend Format: {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}
resume_offset= [SWSUSP]
Run Code Online (Sandbox Code Playgroud)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。为了休眠到文件 - 提供可以找到文件的分区。
读:
交换文件需要正确格式化。如果您的日志告诉您这一点,您要么试图休眠到文件,要么您的 resume 参数不正确。
切换到分区或修复文件或更改用于休眠的界面。
请参阅: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可能会有所帮助。
对于 Mint,请参阅:https : //forums.linuxmint.com/viewtopic.php?t=259912
测试:cat /sys/power/disk
有disabled
。日志显示“无法通过 logind 使系统休眠:不支持睡眠动词”。
解决方案:搜索您的BIOS并找到有问题的东西。把它关掉。
解决方案 2:尝试另一个休眠界面。
对我来说,编译它几乎需要两天的工作。希望这将帮助您(和其他人)更快地解决您的问题。还有一些我错过了,但现在是凌晨 2 点,我现在不想写更多了。我当然愿意接受任何人的指点以使其更好,因此请发表评论。我会在睡觉、工作等后回复:-)
我不确定休眠到磁盘是否有那么好。我最后还是睡了。但对我来说,问题是拥有 32GB 的文件只是为了能够进行休眠,因为我通常根本避免交换。我最初的交换文件是 2GB,而且大部分是空的。天啊。尽管如此,祝你好运!从日志开始!
Roe*_*oey 15
在简历中使用参数的交换分区的UUID,而不是它的安装点resume=UUID=<#>
在这两个/etc/default/grub
和/etc/initramfs-tools/conf.d/resume
在/etc/fstab
没有安装点的情况下为交换分区创建一个条目,如下所示
# Entry for Swap :
UUID=# none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
在/etc/default/grub
我使用了一个单独的条目来恢复休眠
# FOR HIBERNATION
GRUB_CMDLINE_LINUX="resume=UUID=..."
Run Code Online (Sandbox Code Playgroud)
在地方当局 (pkla) 中创建政策包
sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Run Code Online (Sandbox Code Playgroud)
并插入那里
[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
Run Code Online (Sandbox Code Playgroud)
之后更新 initramfs 和 GRUB
sudo update-initramfs -u -k all
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
重新启动,打开一些应用程序并使用systemctl hibernate
(不使用sudo)来查看它是否有效
归档时间: |
|
查看次数: |
34358 次 |
最近记录: |