— ubuntu24.04设置休眠 —
— 注意—
首先需要明确一点的是,要设置休眠功能,就必须要满足一个硬性条件,交换空间的大小要 > 系统内存的大小。
(其实在休眠时,系统只是将已使用的物理内存存入交换空间。假如你系统内存32G,在系统内存已使用8G时,你想休眠,此时就会占用8G的交换空间,也就是说,在这种情况下,只要你的交换空间大于8G,就能成功休眠。但是下一次,你内存占用了31G,你依然想休眠,交换空间就要大于31G,否则就会休眠失败。你也不想每次休眠的时候都判断一下内存和交换空间的大小关系,并重新设置交换空间的大小吧!索性,我们直接一劳永逸的将交换空间的大小设置成比内存大!这样每次休眠都会是成功的。)
其次,交换空间一般设置得比内存大2G即可。
最后有必要知道的是,有两种设置交换空间的方式,一种是设置swapfile的方式,另一种是将一个固定分区设置交换空间,如/dev/nvme0n1p3分区。
— swapfile设置交换分区 —
linux内核或一些配置对swapfile作为休眠存储支持有限, 主要原因可能包括:
(1) 文件的碎片化
/swapfile
可能在文件系统中被分割成多个非连续的物理块,而内核要求休眠存储必须是连续的存储空间。
运行以下命令检查 /swapfile
是否是连续的。
sudo filefrag -v /swapfile
如果swapfile输出中extents数量大于 1,说明文件是碎片化的,无法用于休眠。
在一些教程中, 通常使用如下两种方式创建swapfile:
# fallocate工具创建34G的swapfile
sudo fallocate -l 34G /swapfile
# dd工具创建34G的swapfile
sudo dd if=/dev/zero of=/swapfile bs=1G count=34
如果你使用这两种方式之一创建swapfile,请一定要用sudo filefrag -v /swapfile命令检查extents的数量是否大于 1, 大于1是无法进入休眠的!!!
很不幸, 我使用swapfile方式设置交换空间, extents的数量总是大于1,所以我使用固定分区设置交换空间的方式。我也强烈建议使用固定分区设置交换空间,使用固定分区设置交换空间,使用固定分区设置交换空间!!!
(2) 文件系统类型的限制
某些文件系统(例如 btrfs
)在支持swapfile时有较多限制,尤其是用于休眠时。可以考虑将文件系统转换为 ext4
。
— 固定分区设置交换空间 —
- 适用版本
ubuntu18.04 – ubuntu24.04(这是测试过的,其他版本应该也是一样的。)
- 创建swap分区
已有swap分区但是大小过小可删除重建, 没有swap分区可使用GParted工具新建.需要注意的是,调整硬盘分区是需要卸载硬盘的,如果你因为正在使用该硬盘而无法卸载,请制作一个ubuntu启动盘,选择试用的方式经行swap分区的创建.
swap分区的大小比自己的物理内存大2G即可。
swap分区如图:
swap分区创建好后, 进入要设置休眠的系统执行下面的操作.
- 格式化新的swap分区
sudo mkswap /dev/nvme1n1p3
/dev/nvme1n1p3
请替换成自己的swap分区.
- 激活新的swap 分区
sudo swapon /dev/nvme1n1p3
- 查看swap分区的UUID
sudo blkid | grep swap
类似如图:
- 更新/etc/fstab
将新的 Swap 分区写入 /etc/fstab
文件
gedit /etc/fstab
# 加入一行, <新的UUID>替换成自己swap的UUID
UUID=<新的UUID> none swap sw 0 0
# 比如,我填写的配置如下:
UUID=3da00566-1972-4152-9f77-018525d655b6 none swap sw 0 0
- 更新RESUME
配置
sudo gedit /etc/initramfs-tools/conf.d/resume
# 将文件内容修改为
RESUME=UUID=<UUID>
# 比如,我填写的配置如下:
RESUME=UUID=3da00566-1972-4152-9f77-018525d655b6
- 保存文件并更新initramfs
# 二选一
sudo update-initramfs -c -k all # 优先选择
sudo update-initramfs -u
- 编辑/etc/default/grub
sudo gedit /etc/default/grub
# 在GRUB_CMDLINE_LINUX_DEFAULT参数,向splash后添加以下内容
resume=UUID=<UUID>
# 比如,我填写的配置如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=3da00566-1972-4152-9f77-018525d655b6"
- 更新GRUB配置
sudo update-grub
- 验证交换swap
sudo swapon --show
sudo free -h
- 测试休眠
sudo systemctl hibernate
— 欢迎指正 —
如何有任何问题,可通过邮箱:1469501961@qq.com 或 企鹅号1469501961 与本人进行联系。
欢迎指正!