为什么休眠在 Ubuntu(和其他 Linux 发行版)上如此复杂?

jma*_*983 3 hibernate

我从 9.04 版开始就是 Ubuntu 用户,我想知道为什么 Ubuntu(和其他 Linux 发行版)上的休眠如此复杂。

最近我安装了 18.04。我在互联网上尝试了几个教程来使系统能够休眠,方法是 (a) 单击菜单并选择休眠选项,或者 (b) 在关闭笔记本电脑的盖子时自动休眠。

对于第一个案例,经过无数个小时的研究,我设法让它在我的笔记本电脑上运行,但是我还没有能够让第二个案例工作。

我试过:

  1. 我安装了休眠状态按钮 GNOME 扩展。

  2. /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla根据AU 上的这个答案进行编辑。

  3. 编辑我的 GRUB 配置以恢复我的 UIID 交换分区,然后更新 GRUB

  4. /etc/systemd/logind.conf根据AU 上的这个答案进行编辑。

眼镜:

  • 戴尔 G3 笔记本电脑
  • CPU:英特尔酷睿 i7 8550H
  • GPU:英伟达 GTX 1050TI
  • 内存:16GB
  • 固态硬盘:闪迪240GB
  • 硬盘:1TB(我认为是希捷)

You*_*Git 5

休眠并不是一件容易实现的事情。事实上,苹果直到 2005 年才在他们的 Mac 上实现休眠(来源),在 Windows ME 于 2000 年正式引入休眠的 5 年后,尽管 Windows 95 和 98 支持它,如果制造商提供特定于硬件的驱动程序(来源) .

基本上,休眠的工作方式是内核将所有进程置于睡眠状态,将 RAM 的内容转储到磁盘上,然后关闭计算机。然后当计算机重新启动时,内存转储到磁盘的内容被重新加载回 RAM,然后进程再次被唤醒。

这整个过程充满了问题。例如,如果文件系统缓冲区未与磁盘同步时计算机处于休眠状态,然后在启动计算机备份时启动另一个操作系统,会发生什么情况?好吧,这就是在使用休眠或启用“快速启动”的 Windows 安装双引导 Linux 时出现“NTFS 分区处于不安全状态”错误的原因

更复杂的是,虽然当前 Windows 上的 hibernate 实现会hiberfile.sys在您的C:\驱动器上创建一个文件来存储内存转储,但当前 Ubuntu 实现的 hibernate 需要一个交换分区。然而,由于交换分区的配置取决于用户在安装过程中的选择,一些用户可能会创建一个不足以容纳 RAM 转储的交换分区,或者其他人可能选择根本不使用交换分区!

另一件需要考虑的事情是休眠可能需要很长时间。如果您有一台具有大量 RAM 的强大计算机,则尤其如此。例如,我有 24GB 的 RAM,并假设以 120MB/s 的恒定转储速率到磁盘,执行休眠将需要 3 多分钟。更不用说,恢复需要同样长的时间。那时,关闭和重新启动需要等量的时间。

当然,如果您有 SSD,休眠和从休眠状态恢复会快得多。但是,反复将 24GB 转储到 SSD 不会对其预期寿命产生重大影响,因为 SSD 中的 NAND 闪存在开始降级之前只能维持有限数量的程序擦除周期。

总的来说,我认为为什么 Ubuntu 上的休眠如此复杂的答案可以总结如下:

  • 休眠和恢复的实际技术过程非常复杂,“有龙在那里”

  • 这不是一个需求量很大的功能(例如,我认为很多其他人,比如我自己,都希望看到,例如,Wayland(X11 的替代品)完成而不是休眠。

  • 我在这里有点猜测,但我会一时兴起说 GPU 和其他设备的驱动程序可能必须专门针对休眠而编写。


小智 2

由于 Hibernate 工作方式的本质以及硬件必须如何支持它,Hibernate 有时并不是一个顺利进行的功能。如果 SWAP 分区设置不正确,可能会因崩溃而导致数据丢失,并且计算机在启动时冻结是与休眠相关的常见问题。

\n\n

通常,Linux 需要 RAM 的大小来满足其 SWAP 大小,但并非每个人都在其实体中遵循这一点,从而导致了 Hibernate 问题。Ubuntu 将休眠作为 Power 面板中的默认功能,但自 Ubuntu 12.04 LTS 以来,由于一些用户报告的问题不断增加,该功能被删除。

\n\n

但这并不意味着您的电脑不能再休眠。您需要做的就是首先检查您的计算机硬件是否与该模式兼容。

\n