因为自己的电脑装的是win10 + ubuntu20.04的双系统,所以切换到另一个系统时,需要保存一下目前系统的RAM状态到硬盘上,然后再切换,这样再切换回来的话就能直接恢复之前的状态,比较方便。
之前自己双系统的ubuntu一直都是开着休眠功能的,但是前几天不知道具体原因,系统崩了,修复很久之后好了,但是由于自己再修复过程中remove掉很多软件包(本意是想着能减少系统负担,唉),最后连terminal都找不到了,就离谱。
所以最后不得已重装系统,但是休眠功能尝试了很久才打开。之前开启休眠功能完全没这么复杂,不知道为啥。
本文就把踩的各种坑记录下来(也不能说是坑,主要是自己想研究透彻点,就尝试了很多都没成功),便于自己以后查阅。

系统信息:ubuntu 20.04
RAM:24G
安装时预设的swap空间大小:30G

文章目录

  • 成功开启使用的方法
  • 各种尝试全记录
    • 尝试一
    • 尝试二
    • 尝试三
    • 尝试四,扩增swap分区
    • 尝试四,就是上述成功的那种方法
    • 进一步尝试,用更小的swap area,看看是否可行
      • 先用一个较小的30G的
      • 再用一个大点儿的40G的
    • 继续尝试,别的方法
    • 又看到一种方法
    • 更新,安装nvidia-smi之后的影响
  • 后记
  • 更新,再次成功开启休眠功能
    • 注,后续又进行一些尝试

成功开启使用的方法

尝试了不少次之后,成功的方法是:
直接创建一个2倍RAM大小的/swapfile文件作为交换空间
安装时预设的交换空间位于:/dev/nvme1n1p3,可以通过查看/etc/fstab看到:

cat /etc/fstab | grep swap
# 输出如下:
# swap was on /dev/nvme1n1p3 during installationUUID=e20d7f03-985c-45ed-86b8-d4335cc10d6f swap            swap    sw              0       0我们先选择不使用这个swap area:
sudo swapoff /dev/nvme1n1p3 # 一般,在swapoff之后,直接tab键就自动补全了
此时可以查看一下交换空间的信息,用 free -m 或者 swapon --show然后,创建swap文件: # 因为我的RAM是24G,所以就直接创建一个48G的swap文件了
sudo dd if=/dev/zero of=/swapfile bs=1M count=48k 之后:
sudo mkswap /swapfile
sudo chmod 600 /swapfile
sudo swapon /swapfile # 启用新的swap area然后,在/etc/fstab中,将原swap注释掉,添加一行:
/swapfile       swap    swap    defaults      0       0之后直接使用:
sudo hibernate # 可以通过apt 安装这个命令
# 反正我这一步成功用的是这个命令,不过按道理,sudo systemctl hibernate应该也行,
# 因为hibernate只是一个脚本,调用的还是系统的hibernate命令

之后就成功了,也没有修改/etc/default/grub等文件(跟我原来使用休眠的经历类似,总之就是不复杂)

各种尝试全记录

尝试一

参考:ubuntu启用休眠,先使用命令:

sudo pm-hibernate
# 或者是命令:
sudo systemctl hibernate

测试是否支持休眠。

发现还没有装pm-hibernate,使用命令sudo apt install pm-utils来安装。

之后再次sudo pm-hibernate倒是能正常关闭系统,但是启动之后还是相当于重启了,休眠失败。

考虑可能是交换空间的问题(因为之前设置休眠的时候就对交换空间进行了一些设置)
查看交换空间信息:

sudo swapon --show # 查看一下交换空间信息
# 信息如下:
NAME           TYPE       SIZE USED PRIO
/dev/nvme1n1p3 partition 28.6G   0B   -2

之后查看/etc/fstab文件,有如下关于交换空间的信息:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
......
# swap was on /dev/nvme1n1p3 during installation
UUID=e20d7f03-985c-45ed-86b8-d4335cc10d6f none           swap    sw              0       0

可以看到,其中的swap的对应的是none,根据swapon --show的输出,将none改为 /dev/nvme1n1p3,然后尝试休眠:

sudo systemctl hibernate
# 或者是:
pm-hibernate

结果:失败。。

尝试二

看debian有关fstab文件的介绍:https://wiki.debian.org/fstab
其中提到有关最后一个label的含义:

<pass> fsck reads the <pass> number and determines in which order the file systems should be checked. Possible entries are 0, 1, and 2. The root file system should have the highest priority, 1, all other file systems you want to have checked should get a 2.
File systems with a <pass> value 0 will not be checked by the fsck utility.

最后一句说到,如果<pass>的值为0,则不会检查,还以为会有用,就将swap分区的<pass> 改为了1:

# swap was on /dev/nvme1n1p3 during installation17 UUID=e20d7f03-985c-45ed-86b8-d4335cc10d6f none            swap    sw              0       1

然后试图休眠
结果:失败。。

尝试三

参考:https://blog.csdn.net/miaoyuyouran/article/details/107776184
还是修改修改/etc/default/grub中的GRUB_CMDLINE_LINUX_DEFAULT,形式为: resume=UUID=xxxx

然后,更新grub:sudo update-grub

结果:不仅失败,打开之后直接黑屏了。最后通过recovery模式,用root的方式恢复/etc/default/grub文件,最终才好

尝试四,扩增swap分区

sudo dd if=/dev/zero of=/swapfile bs=1M count=20K
# 输出如下:
20480+0 records in
20480+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 53.6445 s, 400 MB/s
# 然后初始化新增的swap:
sudo mkswap /swapfile
# 输出如下:
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 20 GiB (21474832384 bytes)
no label, UUID=9d24497c-e831-4500-89c5-82534ac06aef
# 根据提示,修改swapfile的权限:
sudo chmod 600 /swapfilesudo swapon /swapfile
# 此时,查看交换空间大小
free -m 或者是 swapon --show
# 如下结果:
NAME           TYPE       SIZE USED PRIO
/dev/nvme1n1p3 partition 28.6G 1.5M   -2
/swapfile      file        20G   0B   -3最后把/swapfile 放到 /etc/fatab 里面

然后试图休眠

尝试四,就是上述成功的那种方法

进一步尝试,用更小的swap area,看看是否可行

先用一个较小的30G的

# 先关闭之前的swap area:
sudo swapoff /swapfile
# 删除
sudo rm /swapfile
# 用 free -m 或者 swapon --show 查看,发现成功删除
# 再重新创建:
sudo dd if=/dev/zero of=/swapfile bs=1M count=30k
sudo mkswap /swapfile
sudo chmod 600 /swapfile
# 别忘了设置为交换空间!
sudo swapon /swapfile
# ok了,之后尝试休眠:
sudo systemctl hibernate
结果:失败,打开后相当于重启。再次尝试,直接用hibernate命令:
sudo hibernate
直接失败,屏幕黑了一下又恢复原样了。相对于之前的2倍RAM的交换空间,这次只是减小了交换空间的大小,其他都不变

生成swap时,会输出uuid信息,如果当时生成时没注意的话,可以参考另一篇文章,来查看创建的swap文件的uuid信息

:后面查看/etc/default/grub文件时,才发现里面的 resume=UUID=xxxx在重新生成/swapfile之后忘记改了。。
所以:

更改/etc/default/grub文件中相应的部分
然后更新grub:
sudo update-grub

重启之后再次尝试sudo hibernate:失败

再用一个大点儿的40G的

重复以上过程,结果:
这次屏幕黑了一会儿,而不只是一下,不过最后又恢复原样了。
猜测:黑了一会儿可能是正在将RAM转储到ROM上,但是最后一点失败了,就恢复原样了。
后续又用上面成功的2倍RAM大小的交换空间,但是还是没有休眠成功。。
就很玄学,明明这一步用的swap文件大小都跟成功的那次一样,其他配置应该也都一样,最后就是休眠不成功了。
离谱

继续尝试,别的方法

参考:https://linux.die.net/man/1/pm-is-supported
发现pm-is-supported --hibernate没有输出,说明不支持休眠;但是,cat /sys/power/state输出为:freeze mem disk,说明支持休眠。(懵)

之后参考:https://www.linuxuprising.com/2021/08/how-to-enable-hibernation-on-ubuntu.html

在 `/etc/default/grub`中添加resume_offset项
之后 update-grub;
然后:
sudo vim /etc/initramfs-tools/conf.d/resume
注意:这里resume要小写,大写会出错:
W: initramfs-tools configuration sets RESUME=UUID=63b2777c-1ad9-4735-ba2f-fe5110d7c6b8
W: but no matching swap device is available.
然后:
sudo update-initramfs -c -k all
输出:
update-initramfs: Generating /boot/initrd.img-5.13.0-30-generic
update-initramfs: Generating /boot/initrd.img-5.13.0-40-generic
最后reboot

结果:还是失败

又看到一种方法

参考:https://askubuntu.com/q/1053134
将 pm-utils和uswsusp remove掉,然后和上面一样,更新:

sudo update-initramfs -c -k all 或者是 sudo update-initramfs -u
sudo update-grub

然后reboot。重启之后发现sudo hibernatesudo systemctl hibernate命令都能使用,不过最终还是没有休眠成功,只是相当于关机了。

后来又将uswsusp安装回来:

sudo apt install uswsusp # uswsusp提供的有swap-offset命令,可以直接查看交换空间的offset

此时发现 hibernate 命令不能用了,说明二者有冲突。再次sudo apt remove uswsusp之后, hibernate命令又能用了,但是只是关机,还是没有休眠。

更新,安装nvidia-smi之后的影响

安装nvidia的cuda toolkit之后,再次sudo hibernate就会报错:

hibernate some modules failed to unload: nvidia_drm nvidia_modeset nvidia

然后就仍停留在终端界面,不会休眠。

ubuntu20.04 开启休眠(hibernate)功能的成功解决以及各种尝试的过程全记录相关推荐

  1. 历经千辛万苦的Ubuntu20.04与Geomagic Haptic相联(成功一半)

    历经千辛万苦的Ubuntu20.04与Geomagic Haptic相联(成功一半) Background :由于学习项目的需要,为了使得能用3D System公司的Haptic 控制UR5(优傲5) ...

  2. 【锁屏】 Ubuntu20.04 锁屏快捷键无反应的解决方法

    [已解决] Ubuntu20.04 锁屏快捷键无反应的解决方法 一开始查找了一下网上的方案,如果下面的命令输出的是false,代表设置正确 gsettings get org.gnome.deskto ...

  3. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录

    最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...

  4. ubuntu20.04装显卡驱动nvidia-smi显示成功的血泪史

    前提:ubuntu20.04成功安装后系统播放视频没有声音,于是联系淘宝,要我升级内核版本,之前是5.15,升级到5.17后系统进不去,关掉bios安全启动,成功及进入ubuntu 注意这只是我个人在 ...

  5. Ubuntu20.04 启动卡在黑屏的解决方法

    最近在VM中新安装了Ubuntu20.04,悲催的是启动后一直卡在黑屏:在坑里爬了几天后,终于出坑: 以下是整理的实际操作步骤,希望若有入坑的尽快出坑: 1.启动虚拟机时,进入Grub画面选择相应内核 ...

  6. Ubuntu20.04开启root账户

    1. 第一步 以普通用户登录系统,创建root用户的密码 在终端输入命令:sudo passwd root 然后输入设置的密码,输入两次,这样就完成了设置root用户密码了(注意Linux系统下密码是 ...

  7. ubuntu20.04开启SSH远程登录

    默认情况下,首次安装Ubuntu时,不允许通过SSH进行远程访问.以root 用户或具有sudo特权的用户执行以下步骤,以在Ubuntu系统上安装并启用SSH: 1. 打开终端并安装openssh-s ...

  8. ubuntu20.04开启远程桌面服务

    1.开启远程登录设置 2.安装xrdp sudo apt-get install xrdp 3. 黑屏问题解决方法 第1种方法: logout当前用户 第2种方法: 当前用户已经登录, 会出现黑屏的情 ...

  9. ubuntu20.04 开启远程桌面

    sudo apt-get install xrdp sudo apt-get install dconf-editor sudo apt install dconf-editor -y dconf w ...

最新文章

  1. .net ConfigurationSectionDesigner插件使用
  2. Linux之tee命令
  3. 改變人生的21種好習慣
  4. 恶意软件“EXPENSIVEWALL”感染数百万台安卓设备
  5. c语言1+2+3+4+5_C程序来计算系列1+(1 + 2)+(1 + 2 + 3)+(1 + 2 + 3 + 4)+ ... +(1 + 2 + 3 + ... + n)...
  6. mysql双主双从_mysql双主双从
  7. Linux驱动(13)--传递参数
  8. MIX 2008与ASP.NET MVC框架的Road-Map
  9. C/C++ 获取目录下的文件列表信息
  10. 程序员的必杀技——编程全能词典
  11. 纯数学教程 Page 203 例XLI (2)
  12. Git项目下载部分文件或文件夹
  13. 桥接文件中file not found
  14. TCP粘包以及UDP丢包问题
  15. Li Lei 和 Han Meimei该结婚了吧
  16. flv.js视频播放库基本用法
  17. 区块链技术运用在票据领域-票据链
  18. 计算机视觉方面相关项目,『哈尔滨985/211大学科研营』计算机视觉项目
  19. 入门Web前端开发需要学习哪些技术?薪资高吗?
  20. c++ 把类型作为参数

热门文章

  1. 关于个人数据泄露通知的示例 Published by EDPB
  2. MOOS-ivp 多社区 系列停更
  3. Java工程师培训课(十一、新的开始)
  4. 关于学习,很有必要看看这张图
  5. 使用Plumber和React缩放R
  6. html中图片不溢出,防止图片过大超出DIV的CSS样式
  7. python能干啥是什么意思_这年头不懂点Python都不好意思说是码农 神奇的Python都能干啥...
  8. mysql sql stuff函数_SQL常用函数之一 Stuff()
  9. MATLAB与高等数学--方程组相平面图(弹簧的阻尼振动图像)
  10. QQ拼音输入法的人机交互