Linux休眠与挂起究竟有何区别?

Linux休眠将系统状态保存到硬盘后完全断电,恢复时从硬盘加载;挂起则保持内存供电进入低功耗状态,可快速唤醒但持续耗电,休眠适合长时间断电,挂起适合短时离开。

在深入设置之前,明确 Linux 中两种主要的节能状态至关重要,因为它们的设置方式不同:

  1. 挂起 (Suspend / Sleep to RAM – suspend):

    • 原理: 将系统当前状态(内存内容)保存在 RAM 中,关闭除 RAM 之外的大部分硬件(CPU、硬盘、屏幕等)的供电,RAM 需要持续少量供电来保持数据。
    • 特点: 唤醒速度非常快(几秒钟),耗电量低(但并非为零),如果断电(如拔掉笔记本电源且电池耗尽),未保存的工作会丢失。
    • 常见操作: 合上笔记本盖子、按下电源按钮选择“睡眠”、系统设置中的“暂停”选项。
  2. 休眠 (Hibernate – hibernate):

    • 原理: 将系统当前状态(内存内容)完整地写入到硬盘(通常是 Swap 交换分区或 Swap 文件)中,然后完全关闭计算机电源。
    • 特点: 唤醒速度较慢(需要从硬盘读取数据回内存),但唤醒后能恢复到休眠前的精确状态,完全断电后数据也不会丢失,因为状态保存在硬盘上。
    • 常见操作: 系统设置中的“休眠”选项、特定命令。

用户通常关心的“休眠时间设置”主要涉及:

  1. 自动进入挂起/休眠的等待时间: 当系统闲置(无用户操作)一段时间后,自动触发挂起或休眠。
  2. 合上笔记本盖子时的行为: 合盖后是执行挂起、休眠还是什么都不做。
  3. 按下电源按钮时的行为: 短按电源按钮是执行挂起、休眠、关机还是弹出菜单。
  4. 当电池电量极低时的行为: 是执行挂起、休眠还是强制关机。

如何设置这些时间或行为?

设置方法主要取决于你使用的 桌面环境 (Desktop Environment, DE)系统管理工具,以下介绍主流方法:

通过图形化系统设置 (推荐给大多数桌面用户)

这是最简单直观的方式,适用于 GNOME, KDE Plasma, Xfce, Cinnamon, MATE 等主流桌面环境,具体路径大同小异:

  1. 打开“系统设置” (System Settings)。 通常在应用程序菜单中能找到。
  2. 寻找“电源管理” (Power Management)、“节能” (Energy Saving) 或“电源” (Power) 相关选项。
  3. 查找以下关键设置项:
    • 屏幕关闭时间 (Turn off the screen / Blank screen): 设置显示器在无操作后关闭的时间,这通常独立于挂起/休眠。
    • 自动挂起/暂停 (Automatic Suspend / Sleep):
      • 使用电池时 (On Battery Power): 设置笔记本在使用电池供电时,闲置多久后自动挂起。
      • 接通电源时 (Plugged In): 设置笔记本在连接电源适配器时,闲置多久后自动挂起。
      • 选项: 通常有“从不”、“5分钟”、“10分钟”、“15分钟”、“30分钟”、“1小时”、“2小时”等,选择你需要的时长。
    • 自动休眠 (Automatic Hibernate): 注意:并非所有发行版或桌面环境都直接在图形界面提供此选项。 如果提供,设置逻辑与自动挂起类似,但时间通常更长(在挂起一段时间后自动转入休眠以进一步省电)。
    • 合上盖子时的行为 (When the lid is closed):
      • 使用电池时: 选择合盖后执行的操作(如“挂起”、“休眠”、“关机”、“不执行任何操作”)。
      • 接通电源时: 同上。
    • 按下电源按钮时的行为 (When the power button is pressed): 设置短按电源按钮的操作(如“挂起”、“休眠”、“关机”、“弹出菜单”、“不执行任何操作”)。
    • 低电量操作 (Critical Battery Action): 设置当电池电量降至极低水平(如 3%-5%)时执行的操作(通常是“挂起”、“休眠”或“关机”),同时可以设置触发该操作的电量阈值

使用 systemdsleep.conf 文件 (适用于所有支持 systemd 的系统)

systemd 是现代 Linux 发行版的核心系统和服务管理器,它可以更精细地控制挂起和休眠的行为,包括设置挂起延迟后自动转入休眠的时间(这是实现“休眠时间”的关键之一)。

  1. 创建或编辑配置文件: 使用具有管理员权限的文本编辑器(如 sudo nanosudo gedit)打开或创建文件:

    sudo nano /etc/systemd/sleep.conf
  2. 配置关键参数: 在文件中添加或修改 [Sleep] 部分,最重要的参数是:

    • HibernateDelaySec=: 指定系统在挂起 (suspend) 状态持续多少秒后,自动转入休眠 (hibernate),这对于希望挂起一段时间后彻底断电省电非常有用。
      • HibernateDelaySec=1h (1小时后转入休眠), HibernateDelaySec=30min (30分钟后转入休眠)。
    • 其他可能相关的参数(根据需求):
      • SuspendMode=: 指定挂起模式 (suspend, deep, shallow – 取决于硬件支持)。
      • SuspendState=: 指定挂起时进入的 ACPI 状态 (mem, standby – 通常用 mem)。
      • HibernateMode=: 指定休眠模式 (platform, shutdown – 通常用 platform)。
      • HibernateState=: 指定休眠时进入的 ACPI 状态 (disk)。

    示例 /etc/systemd/sleep.conf 片段:

    [Sleep]
    # 挂起后 2 小时自动转入休眠
    HibernateDelaySec=2h
    # 使用深度挂起 (如果硬件支持)
    SuspendMode=deep
    SuspendState=mem
    HibernateMode=platform
    HibernateState=disk
  3. 保存并退出编辑器。

  4. 重启 systemd-logind 服务使更改生效 (通常不是必须,但有时需要):

    sudo systemctl restart systemd-logind.service

使用 systemdlogind.conf 文件 (控制用户会话行为)

这个文件控制当用户执行特定操作(如合盖、按电源键)或系统处于特定状态(如空闲)时,systemd-logind 服务的行为。

  1. 创建或编辑配置文件:

    sudo nano /etc/systemd/logind.conf
  2. 配置关键参数: 找到并取消注释(删除行首的 )或添加以下行,并设置所需的值:

    • 处理盖子开关:
      • HandleLidSwitch=: 合上盖子时的操作 (suspend, hibernate, poweroff, ignore 等)。
      • HandleLidSwitchExternalPower=: 当连接外部电源时合上盖子的操作(覆盖 HandleLidSwitch)。
      • HandleLidSwitchDocked=: 当系统被认为处于“Docked”(扩展坞)状态时合上盖子的操作。
    • 处理电源键:
      • HandlePowerKey=: 按下电源键时的操作 (suspend, hibernate, poweroff, reboot, halt, kexec, ignore 等)。
    • 处理挂起键和休眠键 (如果有):
      • HandleSuspendKey=, HandleHibernateKey=: 类似。
    • 空闲行为 (与图形界面设置类似):
      • IdleAction=: 当系统检测到空闲时执行的操作 (suspend, hibernate, poweroff, reboot, halt, ignore 等)。
      • IdleActionSec=: 系统空闲多少秒后执行 IdleActionIdleActionSec=15min
    • 低电量处理:
      • HandleLowPower=: 当电池电量达到 LowPowerPercentageLowPowerVoltage 时执行的操作 (suspend, hibernate, poweroff, ignore 等)。
      • LowPowerPercentage=, LowPowerVoltage=: 定义“低电量”的阈值。
      • CriticalPowerAction=: 当电池电量达到 CriticalPowerPercentageCriticalPowerVoltage 时执行的操作 (suspend, hibernate, poweroff, ignore 等)。
      • CriticalPowerPercentage=, CriticalPowerVoltage=: 定义“严重低电量”的阈值。

    示例 /etc/systemd/logind.conf 片段:

    [Login]
    # 合盖时休眠
    HandleLidSwitch=hibernate
    # 连接电源时合盖也休眠 (明确指定)
    HandleLidSwitchExternalPower=hibernate
    # 短按电源键弹出操作菜单
    HandlePowerKey=ignore  # 或者设置为 poweroff/shutdown 等
    # 空闲 30 分钟后挂起
    IdleAction=suspend
    IdleActionSec=30min
    # 电量低于 10% 时挂起,低于 5% 时强制休眠
    HandleLowPower=suspend
    LowPowerPercentage=10
    CriticalPowerAction=hibernate
    CriticalPowerPercentage=5
  3. 保存并退出编辑器。

  4. 重启 systemd-logind 服务使更改生效:

    sudo systemctl restart systemd-logind.service

重要前提:确保休眠功能正常工作

  • 足够的 Swap 空间: 休眠要求 Swap 空间(分区或文件)的大小至少等于或大于你当前系统的物理内存 (RAM) 大小,使用 free -hswapon --show 检查 Swap 大小和内存大小。
  • 内核参数配置 (通常自动): 大多数现代发行版会自动配置内核参数 (resume=...resume_offset=... 对于 Swap 文件) 来指向正确的 Swap 位置,如果休眠失败,可能需要检查 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 行是否包含类似 resume=UUID=your-swap-uuid 的参数,然后运行 sudo update-grub (或发行版对应的命令),使用 sudo findmnt -no UUID -T /swapfile (如果是 Swap 文件) 或 sudo blkid 查找 Swap 分区的 UUID。
  • 内核支持: 确保内核启用了休眠支持(通常默认开启)。
  • 硬件支持: 极少数老旧或特殊硬件可能对休眠支持不佳。

测试休眠

在依赖休眠功能前,务必手动测试:

  1. 保存所有工作。
  2. 打开一个终端,运行 sudo systemctl hibernate
  3. 系统应该将内存写入 Swap 并关机。
  4. 重新开机,如果一切正常,系统应该恢复到休眠前的状态。

设置 Linux 的“休眠时间”或节能行为,核心在于理解需求是设置自动挂起/休眠的等待时间,还是特定触发事件(合盖、按键、低电量)的行为

  • 桌面用户首选: 使用图形化的“系统设置” > “电源管理”进行配置,最直观方便。
  • 需要挂起后延迟休眠: 配置 /etc/systemd/sleep.conf 中的 HibernateDelaySec=
  • 需要精细控制事件触发行为或系统级空闲策略: 配置 /etc/systemd/logind.conf 中的相关参数 (HandleLidSwitch, IdleAction, IdleActionSec, HandleLowPower 等)。
  • 基础前提: 务必确保 Swap 空间足够大且休眠功能已正确配置和测试通过。

请根据你的具体需求和使用场景选择合适的方法进行配置,修改系统配置文件时请谨慎操作。

引用与参考说明:

  • systemd 官方文档是这些配置的权威来源:
    • systemd-sleep(8) 手册页 (man systemd-sleep) – 详细说明 /etc/systemd/sleep.conf 的选项。
    • logind.conf(5) 手册页 (man logind.conf) – 详细说明 /etc/systemd/logind.conf 的所有选项及其含义。
    • systemd-logind(8) 手册页 (man systemd-logind) – 概述 systemd-logind 服务及其功能。
  • 主流桌面环境 (GNOME, KDE Plasma 等) 的官方文档或帮助中心通常会说明其图形化电源设置的具体位置和选项。
  • Linux 内核文档 (Documentation/power/ 目录) 提供了关于挂起和休眠机制的低层细节(适合高级用户或开发者)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4909.html

(0)
酷番叔酷番叔
上一篇 2025年6月18日 14:18
下一篇 2025年6月18日 14:51

相关推荐

  • Linux如何查看磁盘分区?

    使用 lsblk 命令(推荐)特点:简单直观,显示树形结构,包含分区挂载点,命令:lsblk输出示例:NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 238.5G 0 disk├─sda1 8:1 0 512M 0 part /boot/efi├─sda2 8……

    2025年7月1日
    900
  • Ubuntu升级失败如何简单解决?

    使用 mail 命令(简单文本邮件)mail 是最基础的命令行工具,适合快速发送文本内容,安装与配置# CentOS/RHELsudo yum install mailx发送邮件示例echo "邮件正文" | mail -s "主题" recipient@example……

    3天前
    700
  • 每天八杯水真的必要吗

    在Linux服务器环境中,IP地址分配是网络配置的核心任务,直接影响服务器与外部通信的能力,以下是详细的操作指南,涵盖主流方法及注意事项:IP分配方式静态IP分配(推荐用于服务器)原理:手动配置固定IP,确保地址永久不变,适用场景:Web服务器、数据库、网关等需稳定地址的设备,配置步骤(以Ubuntu/Cent……

    2025年7月2日
    1500
  • 如何将进程名设为my-service?

    将进程名称修改为”my-service”通常通过修改程序启动命令或配置文件实现,便于在系统进程列表(如ps/top)中清晰识别和管理该特定服务进程。

    2025年7月1日
    1000
  • 如何使用touch命令提升效率?

    在Linux系统中,文件修改时间(Modification Time,简称mtime)记录了文件内容最后一次被更改的时间戳,修改这一时间戳的需求可能出现在多种场景中,修复备份时间、调试程序、同步文件状态或合规性审计,以下是几种安全且高效的修改方法,所有操作均需文件或目录的写权限,touch 是Linux核心工具……

    2025年7月8日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信