休眠 vs 挂起到磁盘
需要明确两个关键概念:

-
挂起到磁盘
- 工作原理:将系统的所有状态(包括你打开的所有应用程序和文件)完整地保存到硬盘上的一个特殊文件(
swap分区或swap文件)中,然后完全切断电源,下次开机时,系统会从硬盘读取这个文件,恢复到休眠前的状态。 - 优点:功耗为零,和关机一样完全不耗电。
- 缺点:需要和你的物理内存一样大或更大的
swap空间,唤醒速度比睡眠慢。 - 命令:
systemctl hibernate
- 工作原理:将系统的所有状态(包括你打开的所有应用程序和文件)完整地保存到硬盘上的一个特殊文件(
-
挂起到内存
- 工作原理:将系统状态保存到内存中,然后进入一个极低功耗状态,内存仍需少量电力来维持数据。
- 优点:唤醒速度极快,几乎是瞬间恢复。
- 缺点:会持续耗电,和笔记本待机时耗电差不多,如果断电,所有未保存的工作都会丢失。
- 命令:
systemctl suspend
在中文语境下,"休眠" 通常指 挂起到磁盘,而 "睡眠" 或 "待机" 指 挂起到内存,下面的命令将明确区分这两者。
使用 systemd 命令(推荐,现代 Ubuntu 版本)
这是目前最推荐、最标准的方法,适用于 Ubuntu 18.04 及更高版本。

挂起到内存 (睡眠/待机)
这个命令会让电脑进入低功耗的睡眠状态。
systemctl suspend
挂起到磁盘 (休眠)
这个命令会将所有状态保存到硬盘并关机,实现真正的“休眠”。
systemctl hibernate
混合休眠
这是一个非常实用的选项,它会同时执行内存和磁盘的保存操作,唤醒时,系统会优先从内存中快速恢复;如果期间断电,系统会从硬盘恢复,保证数据安全。
systemctl hybrid-sleep
如何使用? 你可以直接在终端输入这些命令,或者创建桌面快捷方式、绑定到键盘快捷键。

使用 pm-suspend 命令(旧版方法)
在较旧的 Ubuntu 版本(如 16.04 及之前)中,使用 pm-utils 工具包中的命令,这些命令现在仍然可用,但 systemctl 是首选。
# 挂起到内存 (睡眠) pm-suspend # 挂起到磁盘 (休眠) pm-hibernate # 混合休眠 pm-suspend-hybrid
通过图形界面 (GUI)
对于不习惯使用命令行的用户,图形界面是最简单的方式。
通过电源设置
- 点击屏幕右上角的电源图标(通常看起来像一个插头或电池)。
- 在弹出的菜单中,你通常会看到 “睡眠” 或 “挂起” 选项。
- 注意:默认菜单中可能没有 “休眠” 选项,因为它需要特殊配置(见下文),如果看到“休眠”,点击它即可。
通过关机菜单
- 点击屏幕右上角的电源图标。
- 选择 “电源关闭” 或类似选项。
- 在弹出的二级菜单中,你可能会看到 “休眠” 选项。
重要前提:确保休眠功能可用
systemctl hibernate 能否成功,关键在于你的系统是否正确配置了休眠功能。
检查 Swap 空间
休眠需要将内存内容写入 swap 分区或文件,确保你的 swap 空间至少和你的物理内存一样大。
# 查看内存和 swap 的大小 free -h
输出示例:
total used free shared buff/cache available
Mem: 7.7G 2.1G 4.2G 123M 1.4G 5.2G
Swap: 2.0G 0B 2.0G
在这个例子中,内存是 7.7G,但 Swap 只有 2.0G,这不足以支持休眠,你需要创建一个更大的 Swap 文件或调整 Swap 分区。
检查 kernel 启动参数
这是最常见的问题,系统需要通过 resume= 参数告诉内核要从哪个设备休眠恢复。
步骤:
-
找到你的 Swap 分区/设备名:
swapon --show
输出可能是
/dev/nvme0n1p2或/swapfile。 -
编辑
GRUB配置文件:sudo nano /etc/default/grub
-
找到
GRUB_CMDLINE_LINUX_DEFAULT这一行,它可能看起来像这样:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"你需要在这一行末尾添加
resume=参数,指向你的 Swap 设备。如果你的 Swap 设备是
/dev/nvme0n1p2,就修改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/nvme0n1p2"如果是 Swap 文件(比如在根分区 下的
/swapfile),则需要指定文件所在的分区 UUID 和文件路径。GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=xxxx-xxxx resume_offset=1234567"UUID是根分区的 UUID,可以用blkid /dev/sdXn查看。resume_offset是 Swap 文件在分区中的偏移量,可以用filefrag -v /swapfile查看。
-
更新 GRUB:
sudo update-grub
-
重启电脑:
sudo reboot
重启后,systemctl hibernate 命令就应该可以正常工作了。
检查 uswsusp(可选)
一些系统依赖 uswsusp 来实现更可靠的休眠,可以安装它:
sudo apt install uswsusp
安装后,系统可能会自动检测到合适的 Swap 空间,并使休眠功能可用。
| 功能 | 命令 (推荐) | 命令 (旧版) | GUI 位置 | 说明 |
|---|---|---|---|---|
| 睡眠 (挂起到内存) | systemctl suspend |
pm-suspend |
电源图标 -> 睡眠 | 快速唤醒,持续耗电 |
| 休眠 (挂起到磁盘) | systemctl hibernate |
pm-hibernate |
电源图标 -> 休眠 (可能需配置) | 零功耗,唤醒较慢,需足够 Swap 空间 |
| 混合休眠 | systemctl hybrid-sleep |
pm-suspend-hybrid |
通常在 GUI 中不可用 | 兼顾速度和数据安全 |
对于大多数用户,最简单的流程是:
- 尝试在电源菜单中点击“休眠”。
- 如果没有此选项或失败,使用
free -h检查 Swap 是否足够。 - Swap 不够,需要扩容。
- Swap 足够但命令失败,按照上面的步骤检查并修改
GRUB配置。
