解决ubuntu20.04无法唤醒的问题的一种方法

解决ubuntu20.04无法唤醒的问题的一种方法

我更改了三个个地方,目前不清楚是哪个地方起的作用,也可能都起作用了

修改的第一个地方

步骤 1: 获取 Swap 分区的 UUID

首先,你需要知道你的 swap 分区的 UUID。你可以使用以下命令来查找它:

复制代码
sudo blkid | grep swap

这将列出所有标记为 swap 的分区及其 UUID。找到你的 swap 分区对应的 UUID 并记录下来。

步骤 2: 修改 GRUB 配置文件

  • 创建备份 :在修改 GRUB 配置之前,创建一个完整的系统备份,特别是 /etc/default/grub 文件的备份。

    复制代码
    sudo cp /etc/default/grub /etc/default/grub.bak

接下来,编辑 /etc/default/grub 文件。可以使用你喜欢的文本编辑器(如 vinano):

复制代码
sudo vi /etc/default/grub

在该文件中找到这一行:

复制代码
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

将其修改为包含 resume=UUID=你的_swap_UUID 参数。例如,如果 swap 分区的 UUID 是 a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6,则应修改为:

复制代码
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6"

注意: 如果你已经有其他参数,只需添加 resume=UUID=你的_swap_UUID,而不需要移除现有的参数。

步骤 3: 更新 GRUB

保存并关闭文件后,运行以下命令以更新 GRUB 配置:

复制代码
sudo update-grub

这一步非常重要,因为它会重新生成 GRUB 的配置文件并将新的设置应用到启动菜单中。

步骤 4: 重启计算机

最后,重启计算机以使更改生效:

复制代码
sudo reboot

确认更改

系统重启后,可以通过检查 /proc/cmdline 文件来确认内核启动参数是否已正确更新:

复制代码
cat /proc/cmdline

你应该能看到其中包含了 resume=UUID=你的_swap_UUID 参数。

修改的第二个地方

步骤 1: 编辑 resume 文件

创建或编辑 /etc/initramfs-tools/conf.d/resume 文件,并仅写入以下内容:

复制代码
RESUME=UUID=a6e68944-1234-4e02-9fcd-9504e5ea1234c

请注意,这里的 UUID 应该是你之前通过 sudo blkid | grep swap 命令找到的交换分区的 UUID。确保你使用的是完整的 UUID 字符串。

步骤 2: 更新 GRUB 配置(如果需要)

虽然你的主要问题是关于 initramfs 的配置,但为了确保休眠功能正常工作,通常还需要更新 GRUB 配置来包含 resume 参数。如果你还没有这样做,请参考之前的建议,编辑 /etc/default/grub 文件并在 GRUB_CMDLINE_LINUX_DEFAULT 中添加 resume 参数:

复制代码
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=a6e68944-1234-4e02-9fcd-9504e5ea1234c"

然后更新 GRUB:

复制代码
sudo update-grub

步骤 3: 重新生成 initramfs 镜像

完成上述配置后,你需要重新生成 initramfs 镜像,以便这些更改生效。你可以使用以下命令来为所有内核版本重新生成 initramfs:

复制代码
sudo update-initramfs -c -k all

这一步非常重要,因为它会确保新的配置被正确地包含在 initramfs 中,这对于休眠功能的支持至关重要。

步骤 4: 重启计算机

最后,重启计算机以使所有更改生效:

复制代码
sudo reboot

验证配置

系统重启后,你可以尝试执行一次休眠操作,看看它是否成功:

复制代码
sudo systemctl hibernate

如果系统能够正常进入休眠并在唤醒后恢复正常工作,则说明配置正确无误。

检查启动参数

为了确认内核启动参数是否已正确更新,可以查看 /proc/cmdline 文件:

复制代码
cat /proc/cmdline

修改的第三个地方

你应该能看到其中包含了 resume=UUID=a6e68944-1234-4e02-9fcd-9504e5ea1234c 参数

如果你遇到合上盖后进入休眠或睡眠状态后无法唤醒的问题,可以尝试以下步骤进行诊断和修复:

  1. 启用配置并设置为休眠

为了确保合上盖子后系统进入休眠而不是睡眠状态,并且能够正确唤醒,你可以明确设置 HandleLidSwitch 为 hibernate 或 hybrid-sleep(如果支持)。

编辑 /etc/systemd/logind.conf 文件:

复制代码
sudo vi /etc/systemd/logind.conf

取消注释并修改以下行:

复制代码
[Login]
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=hibernate
HandleLidSwitchDocked=ignore

HandleLidSwitch=hibernate:当使用电池供电时,合上盖子将使系统进入休眠状态。

HandleLidSwitchExternalPower=hibernate:当连接外部电源时,合上盖子也将使系统进入休眠状态。

HandleLidSwitchDocked=ignore:当笔记本电脑插入基座时,合上盖子不会采取任何行动。

保存文件并重启 systemd-logind 服务以应用更改:

复制代码
sudo systemctl restart systemd-logind

需要注意的是不是睡眠模式,而是休眠模式两个是不一样的

下面是错误的配置

复制代码
[Login]
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignore

睡眠模式(Suspend)和休眠模式(Hibernate)是两种不同的电源管理状态,它们旨在节省电力的同时保留用户的会话数据。尽管两者都用于节能目的,但它们的工作原理和恢复速度有显著差异。

睡眠模式(Suspend)

特点:

内存供电:在睡眠模式下,系统将 CPU 和硬盘等设备断电,但继续为 RAM 供电,以保持当前的会话数据。

快速唤醒:由于数据保存在 RAM 中,当用户重新打开电脑时,系统可以非常迅速地从睡眠状态恢复到之前的状态,通常只需几秒钟。

低功耗:相比完全运行状态下,睡眠模式大大降低了功耗,但仍需要少量电力来维持 RAM 中的数据。

风险:如果电池电量耗尽或电源中断,RAM 中的数据将会丢失,导致无法恢复之前的会话。

适用场景:

适合短时间内不使用电脑的情况,如短暂离开办公桌时。

对于笔记本电脑,在连接电源适配器的情况下特别有用,因为即使电池电量不足,也可以通过外接电源恢复。

休眠模式(Hibernate)

特点:

数据写入磁盘:在休眠模式下,系统会将 RAM 中的所有内容(包括当前运行的应用程序和打开的文件)保存到硬盘上的一个特殊文件(通常是交换分区或专用的休眠文件),然后完全切断电源。

完全断电:由于所有组件都被断电,休眠模式下的功耗几乎为零,类似于关机状态。

较慢唤醒:当用户重新启动电脑时,系统会从硬盘读取之前保存的数据并加载到 RAM 中,这个过程比从睡眠模式唤醒要慢一些,因为它涉及到大量的磁盘 I/O 操作。

无数据丢失风险:即使电池完全没电或长时间没有电源供应,也不会影响存储在硬盘上的数据,因此可以在任何时间点安全恢复。

适用场景:

适合长时间不使用电脑的情况,如晚上或周末不工作时。

对于便携式设备尤其有用,因为即使电池电量耗尽,也不会丢失未保存的工作。

混合睡眠模式(Hybrid Sleep)

某些系统还提供了一种称为混合睡眠(Hybrid Sleep)的模式,它结合了睡眠模式和休眠模式的优点:

双重保障:它不仅将数据保存到 RAM 中(像睡眠模式一样),还会同时将数据复制到硬盘上(像休眠模式一样)。这意味着如果电源意外中断,用户仍然可以从硬盘恢复数据。

快速唤醒与安全恢复:这种模式提供了快速唤醒的能力,同时也确保了即使发生意外断电,也能安全恢复。

适用场景:

适用于台式机,特别是那些可能遭遇突然断电的情况。

对于希望获得额外安全性的用户来说是一个不错的选择。

总结

选择使用睡眠模式还是休眠模式取决于你的具体需求:

如果你需要快速恢复并且预计很快就会再次使用电脑,那么睡眠模式是更好的选择。

如果你打算较长时间不使用电脑,并且希望确保不会因电池耗尽而丢失数据,则应选择休眠模式。

如果你想要兼顾两者的优点,可以考虑启用混合睡眠模式,但这通常只适用于台式机或有稳定电源供应的环境。

相关推荐
维尔切7 分钟前
Linux中基于Centos7使用lamp架构搭建个人论坛(wordpress)
linux·运维·架构
tan77º1 小时前
【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
linux·网络·分布式·网络协议·tcp/ip·rpc·json
正在努力的小河4 小时前
Linux设备树简介
linux·运维·服务器
荣光波比4 小时前
Linux(十一)——LVM磁盘配额整理
linux·运维·云计算
LLLLYYYRRRRRTT4 小时前
WordPress (LNMP 架构) 一键部署 Playbook
linux·架构·ansible·mariadb
轻松Ai享生活4 小时前
crash 进程分析流程图
linux
大路谈数字化6 小时前
Centos中内存CPU硬盘的查询
linux·运维·centos
luoqice7 小时前
linux下查看 UDP Server 端口的启用情况
linux
倔强的石头_8 小时前
【Linux指南】动静态库与链接机制:从原理到实践
linux
赏点剩饭7788 小时前
linux中的hostpath卷、nfs卷以及静态持久卷的区别
linux·运维·服务器