菜鸟科技网

Ubuntu系统如何安全挂起?

核心概念:三种主要状态

  1. 睡眠 / 挂起

    Ubuntu系统如何安全挂起?-图1
    (图片来源网络,侵删)
    • 工作原理:将当前所有工作状态(打开的程序、文档等)保存在内存中,然后关闭大部分硬件(如硬盘、显示器),仅维持内存供电。
    • 优点:唤醒速度极快(通常几秒钟),因为数据直接从内存读取。
    • 缺点非常耗电,如果断电,所有未保存的数据都会丢失。
    • 英文SuspendSleep
  2. 休眠

    • 工作原理:将内存中的所有数据写入硬盘上的一个特殊文件(swap 分区),然后完全关闭计算机。
    • 优点功耗极低,和关机一样,即使断电,数据也不会丢失。
    • 缺点:唤醒速度较慢,因为需要从硬盘将数据重新读回内存。
    • 英文Hibernate
  3. 混合睡眠

    • 工作原理:结合了睡眠和休眠的优点,数据同时保存在内存和硬盘上。
    • 优点:如果不断电,唤醒速度和睡眠一样快;如果断电,因为有硬盘备份,数据也不会丢失。
    • 缺点:比纯睡眠更耗电,因为需要同时为内存和硬盘供电(直到断电)。
    • 英文Hybrid Sleep,这是 Windows 的默认行为,在 Linux 上也可以配置。

基本命令

在终端中,你可以使用 systemd 提供的命令来控制这些状态。

进入睡眠状态

systemctl suspend

进入休眠状态

systemctl hibernate

进入混合睡眠状态

systemctl hybrid-sleep

让系统进入空闲状态(可选)

这个命令不会立即挂起,而是会等待一段时间的系统无活动后自动执行挂起操作,这通常在电源设置中配置,但也可以手动触发。

Ubuntu系统如何安全挂起?-图2
(图片来源网络,侵删)
systemctl suspend-then-hibernate

这个命令会先让系统进入睡眠状态,如果系统在睡眠期间接收到来自 AC 电源适配器的断开信号(即拔掉电源),它将自动转入休眠状态,防止数据丢失。


通过图形界面操作

对于大多数桌面用户来说,使用图形界面是最简单的方式:

  • 点击右上角的电源图标,通常会有以下选项:
    • 睡眠:对应 systemctl suspend
    • 休眠:对应 systemctl hibernate
    • 注销 / 关机

如何启用休眠功能(重要步骤)

在很多现代 Ubuntu 发行版中,为了节省空间,swap 分区可能没有被创建或者大小不够,这会导致休眠功能无法正常工作,你需要确保系统有一个足够大的 swap 文件或分区。

检查当前 Swap 状态

打开终端,运行:

Ubuntu系统如何安全挂起?-图3
(图片来源网络,侵删)
swapon --show
  • 如果没有任何输出,说明系统没有启用 swap
  • 如果输出显示了你的 swap 分区或文件,请检查 Size 列,确保它至少和你的物理内存大小一样大,如果你有 16GB 内存,swap 最好也 >= 16GB。

创建 Swap 文件(如果需要)

如果你的 swap 太小或不存在,可以按照以下步骤创建一个与内存大小相同的 swap 文件,假设你有 8GB 内存。

  1. 创建一个 8GB 的空文件

    sudo fallocate -l 8G /swapfile

    注意:fallocate 命令在你的文件系统上不起作用(Btrfs),可以使用 dd 命令,但速度会慢很多:

    sudo dd if=/dev/zero of=/swapfile bs=1G count=8 status=progress
  2. 设置正确的权限swap 文件必须是安全的,只有 root 用户可以读写。

    sudo chmod 600 /swapfile
  3. 将文件标记为 Swap 文件

    sudo mkswap /swapfile
  4. 启用 Swap 文件

    sudo swapon /swapfile
  5. 使其永久生效:编辑 /etc/fstab 文件,让它在每次开机时自动加载。

    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

现在你的系统已经准备好支持休眠了。


配置电源按钮和笔记本盖合上的行为

你可以通过 systemd 的配置文件来自定义这些行为。

  1. 创建或编辑配置文件

    sudo nano /etc/systemd/sleep.conf
  2. 取消注释并修改以下行

    • 配置电源按钮

      #HandlePowerKey=poweroff

      修改为你想要的行为, HandlePowerKey=suspend # 按下电源键睡眠 HandlePowerKey=hibernate # 按下电源键休眠 HandlePowerKey=hybrid-sleep # 按下电源键混合睡眠 HandlePowerKey=ignore # 忽略电源键

    • 配置笔记本盖合上

      #HandleLidSwitch=suspend
      #HandleLidSwitchDocked=ignore

      修改为你想要的行为, HandleLidSwitch=suspend # 合上盖子睡眠 HandleLidSwitch=hibernate # 合上盖子休眠 HandleLidSwitch=lock # 合上盖子锁定屏幕 HandleLidSwitch=ignore # 忽略盖子开关

  3. 保存文件并重启 systemd-logind 服务

    sudo systemctl restart systemd-logind

常见问题排查

  • 问题:执行 systemctl hibernate 后,系统黑屏或死机。

    • 原因:通常是因为 kernel 参数中没有正确指定 resume 设备。
    • 解决
      1. 找到你的 swap 分区 UUID:
        blkid | grep swap

        输出类似:/dev/nvme0n1p2: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="swap" PARTUUID="..."

      2. 编辑 kernel 启动参数,添加 resume=UUID=你的swap分区UUID
        sudo nano /etc/default/grub

        找到以 GRUB_CMDLINE_LINUX_DEFAULT= 开头的行,在引号内添加 resume=UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890"

      3. 更新 grub
        sudo update-grub
      4. 重启电脑。
  • 问题:没有休眠选项。

    • 原因swap 分区太小或不存在。
    • 解决:按照上面的步骤创建或调整 swap 文件。

总结表格

命令 功能 优点 缺点
systemctl suspend 睡眠/挂起 唤醒极快 耗电,断电数据丢失
systemctl hibernate 休眠 耗电极低,断电安全 唤醒较慢
systemctl hybrid-sleep 混合睡眠 兼顾速度与安全 比纯睡眠耗电
systemctl suspend-then-hibernate 先睡眠后休眠 拔掉电源自动转入休眠 初始功耗与睡眠相同

希望这份详细的指南能帮助你完全掌握 Ubuntu 的系统挂起功能!

分享:
扫描分享到社交APP
上一篇
下一篇