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

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

我从 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 笔记本电脑
  • 处理器:英特尔酷睿 i7 8550H
  • 显卡:Nvidia GTX 1050TI
  • 内存:16GB
  • 固态硬盘:SanDisk 240GB
  • 硬盘:1TB(我认为是希捷)

答案1

休眠功能并不容易实现。事实上,Apple 直到 2005 年才在 Mac 上实现休眠功能(来源)距 Windows ME 于 2000 年正式引入休眠功能已过去了 5 年,尽管如果制造商提供特定于硬件的驱动程序,Windows 95 和 98 也可以支持该功能(来源)

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

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

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

另一件需要考虑的事情是休眠可能需要很长时间。如果你的电脑性能强大,内存充足,情况尤其如此。例如,我有 24GB 的内存,假设磁盘转储速率恒定为 120MB/s,则休眠需要 3 分钟以上。更不用说,恢复需要同样长的时间。此时,关机和重启需要同样长的时间。

当然,如果您有 SSD,休眠和从休眠中恢复的速度会快得多。但是,反复将 24GB 的数据转储到 SSD 不会对其使用寿命产生很大影响,因为 SSD 中的 NAND 闪存只能承受有限数量的编程擦除周期,之后就会开始退化。

总的来说,我认为 Ubuntu 上的休眠如此复杂的原因可以总结如下:

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

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

  • 我在这里猜测了一点,但我将随心所欲地说,GPU 和其他设备的驱动程序可能必须专门考虑休眠功能来编写。

答案2

休眠功能有时并不顺利,这是由于其工作方式和硬件必须支持它的特性所致。如果 SWAP 分区设置不正确,则可能会因崩溃而导致数据丢失,并且计算机在启动时冻结是与休眠相关的常见问题。

通常,Linux 需要 RAM 大小作为其 SWAP 大小,但并非所有人都遵循这一点,从而导致休眠问题。Ubuntu 将休眠作为 Power 面板中的默认功能,但自 Ubuntu 12.04 LTS 以来,由于一些用户报告的问题越来越多,该功能被删除。

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

相关内容