如何在 Ubuntu 17.10 上休眠或保存我的会话?

如何在 Ubuntu 17.10 上休眠或保存我的会话?

我想在 Ubuntu 17.10 上存储我的会话或休眠,以避免总是必须重新打开相同的应用程序。

我怎样才能做到这一点?

答案1

这个答案的主要来源(除了我自己的经验)是Arch Linux wiki 上的此页面

在这个答案中我使用sudoeditroot 权限对文件进行更改。如果您愿意,您可以直接使用 root 权限调用您最喜欢的文本编辑器,但如果您想使用 GUI 编辑器并使用 Wayland,请参阅为什么 gksu/gksudo 或使用 sudo 启动图形应用程序不能与 Wayland 一起使用?)。

如果您无法休眠,请注意,您仍然可以(可能)通过使用挂起状态来节省电量,此时 RAM 的状态保持不变。对此的 systemd 命令是systemctl suspend,它比休眠更有可能起作用。


应该说,休眠并不能保证一定有效;这就是为什么默认情况下禁用通过 GUI 启动休眠的原因。即使你做对了所有事情,你仍然可能会遇到问题。你的系统可能会崩溃,你的机器状态可能无法恢复(例如,你可能会丢失未保存的工作),你可能会发现自己处于按住电源按钮很长时间的悲惨境地。我建议只在保存所有工作后尝试测试休眠,并且只打开一些空闲的应用程序(例如不执行任何操作的终端仿真器)。

休眠涉及将 RAM 的状态写入磁盘的某个区域。交换空间用于此目的。无论是文件还是分区,它都应该以相同的方式工作。Arch Wiki 表示,如果您的交换空间至少为 RAM 大小的 2/5,您应该能够休眠。Redhat 提供有关休眠所需交换大小的指导这与 Arch Wiki 完全矛盾!但我建议在尝试增加交换空间大小之前先进行其他调试步骤。

如果你使用 Btrfs你可能无法冬眠根据 Arch Wiki,Btrfs 不支持交换文件。Ubuntu 17.10(以及所有其他当前支持的版本)上主分区的默认格式是 ext4,而不是 Btrfs,因此大多数用户无需担心这一点。

NirajW 的回答在这里解释如何测试并启用休眠功能(如果有效)。它建议的命令是

sudo pm-hibernate

无论我做了什么其他调整,这对我来说都失败了(我的系统立即挂起并且再也没有恢复)。相反,我使用

sudo systemctl hibernate

您也可以尝试

echo disk | sudo tee /sys/power/state

休眠是最低的功耗状态 (ACPI S4)。应该发生的是系统关闭,机器关闭并且可以无限期地保持关闭状态,当您重新打开它时,您无需进行干净启动,而是登录并恢复会话。

如果您在尝试休眠时获得了干净启动,那么首先要尝试设置一个启动参数,以便 GRUB 知道在哪里找到机器状态以便在恢复时将其加载回 RAM(至少,这是我理解该过程的方式。如果不准确,请纠正我)。

设置恢复的启动参数

Ubuntu 17.04 和 17.10 的全新安装有一个交换文件。如果您从较早的安装升级,您仍将有一个交换分区。如果您有交换文件,则设置恢复参数的过程会有所不同。通过运行检查您的配置

grep swap /etc/fstab

如果您有一个交换分区,输出将显示分区标签,例如

# swap was on /dev/sda3 during installation

如果没有输出,则运行

ls /

并寻找/swapfile

如果你有一个交换分区

要添加 resume 参数,您可以运行

sudoedit /etc/default/grub       

找到以 开头的行GRUB_CMDLINE_LINUX_DEFAULT=,并将 添加到双引号之间的参数中resume=/Your/Swap/Partition/Your/Swap/Partition用 中找到的设备文件路径替换/etc/fstab。在我给出的示例中,完整的行可能是(取决于正在使用的其他参数 -quiet并且splash是桌面 Ubuntu 安装中的默认参数):

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda3"

编辑此文件后,您必须运行

sudo update-grub

将配置写入 GRUB 在启动时读取的文件。如果您忘记执行此操作,您的更改将无效;)还建议您在尝试休眠之前重新启动。

如果你有交换文件

您需要设置从休眠状态恢复的参数。您的/swapfile应该位于根分区中,因此请设置启动参数, resume=/Your/Root/Partition其中/Your/Root/Partition是根分区的设备文件路径,例如/dev/sda2。如果您不确定,请检查 的内容/etc/fstab以查看哪个分区被挂载/

您还需要为抵消交换文件。您可以通过运行命令来找到此参数的值sudo filefrag -v /swapfile。以下是此命令在我的系统上的输出开头(它与我在 17.04 上得到的输出完全相同,但我现在使用的是 Ubuntu MATE 17.10):

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   ...

偏移参数的数字是physical_offset列中的第一个数字。在我的示例中,它是34816。这意味着我设置的启动参数将是resume_offset=34816

要添加两个启动参数,请编辑 GRUB 的配置文件:

sudoedit /etc/default/grub

找到开头的行GRUB_CMDLINE_LINUX_DEFAULT=并添加两个启动参数,修改后,该行内容如下

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda2 resume_offset=34816"

但请用您的系统的值替换/dev/sda2和。34816

保存文件,退出并运行

sudo update-grub

将配置写入 GRUB 加载时读取的文件中。重新启动,然后再次尝试休眠。

如果你还是无法冬眠,尝试禁用安全启动在您的 UEFI(或 BIOS)设置中,如果尚未完成。

如果你仍然无法休眠,您可以尝试通过设置一些额外的启动参数来调试该过程,详细说明这篇关于调试睡眠状态的文章。再次编辑/etc/default/grub,删除参数quietsplash并添加您想要尝试的调试参数(例如,我使用initctl_debugno_console_suspend),运行sudo update-grub,重新启动,然后重试。

调试参数提供的信息可能会帮助您找出问题所在,并可能帮助您找到解决方案。我使用自己的系统作为案例研究我对另一个关于冬眠的问题的回答。就我而言,问题始终是驱动程序错误。在我使用过的每个 Ubuntu 版本中,我都需要在brcmfmac休眠前从内核卸载模块,并在恢复时重新插入。如果需要卸载更重要的模块,我会使用一种脚本(使用 运行sudo bash filename)进行休眠(替换list of buggy modules为需要拉出的实际模块的名称):

modprobe -r list of buggy modules &&
echo disk > /sys/power/state
modprobe list of buggy modules

我使用&&操作符,这样如果卸载因某种原因失败,就不会尝试休眠。如果恢复成功,模块会立即重新加载到内核中,因此系统应该保持运行。

您可能会发现您的特定系统需要不同的步骤。

答案2

所有这些对于我来说都非常适合休眠文件,感谢您的指导!就我而言,我还必须获取最新的稳定内核才能使休眠工作,即 Ubuntu 17.10 和戴尔 xps 9370,我必须将内核升级到 4.16.0rc

答案3

就我而言,这个过程并没有按描述的那样进行。

我必须更换/dev/sda二十以及 /dev/sdaXX 的 UUID。它的 UUID 是
d2175d30-aee3-418b-8c3f-d4ae61d13b3f
因此 GRUB2 中的 editid 行如下所示:

GRUB_CMDLINE_LINUX_DEFAULT="安静启动恢复=UUID=d2175d30-aee3-418b-8c3f-d4ae61d13b3f恢复偏移量=2367488”

之后它就起作用了。

相关内容