解决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 中(像睡眠模式一样),还会同时将数据复制到硬盘上(像休眠模式一样)。这意味着如果电源意外中断,用户仍然可以从硬盘恢复数据。

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

适用场景:

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

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

总结

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

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

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

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

相关推荐
bubiyoushang8884 小时前
Windows11 WSL2 Ubuntu编译安装perf工具
linux·运维·ubuntu
行云流水剑5 小时前
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
linux·学习·安全
xuanwojiuxin6 小时前
linux panic-propagation
linux·运维·服务器
achene_ql8 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
藥瓿亭8 小时前
K8S认证|CKS题库+答案| 9. 网络策略 NetworkPolicy
linux·运维·docker·云原生·容器·kubernetes·cks
千千寰宇8 小时前
[数据传输/网络传输/序列化/计算机组成原理] 字节序/大小端
linux·计算机组成原理/硬件/半导体
LFloyue8 小时前
Linux离线(zip方式)安装docker
linux·docker
Blue桃之夭夭8 小时前
深入理解Optional:处理空指针异常
linux·windows·microsoft
什么半岛铁盒9 小时前
Linux线程与进程关系及底层实现
java·linux·运维
简朴-ocean10 小时前
如何删除linux空的文件夹
linux·运维·服务器