Ubuntu 22.04.3 LTS LUKS加密系统盘搭配交换文件时启用休眠功能的方法咨询
Ubuntu 22.04.3 LTS LUKS加密系统盘搭配交换文件时启用休眠功能的方法咨询
嗨,我懂你现在的困扰——之前用非加密系统加交换文件能正常休眠,换成LUKS加密盘后,休眠就跟关机没区别,重启后啥都留不住对吧?这是因为加密盘下的休眠配置比普通情况多了几个关键步骤,单纯填UUID肯定行不通,我给你梳理下正确的操作流程:
首先,咱们先确认基础条件没问题:
- 检查交换文件是否正常工作:运行
swapon --show,能看到/swapfile的挂载信息就说明没问题;再用free -h确认交换文件的大小至少等于你的物理内存,不然休眠数据根本存不下。
接下来是最关键的一步:计算交换文件的偏移量。因为交换文件是放在加密的根分区里的,系统得知道它在分区里的具体位置才能读取休眠镜像,这也是你之前没做到的点:
- 运行
filefrag -v /swapfile,找到输出第一行的start数值(比如显示start: 123456); - 再用
dumpe2fs /dev/mapper/你的根映射名 | grep -i 'block size'拿到分区的块大小(一般是4096字节); - 偏移量就是
start数值 × 块大小,比如123456×4096=503316480。嫌计算麻烦的话,可以先装个小工具:sudo apt install swapspace,然后直接运行sudo swapoffset /swapfile就能直接得到偏移量。
然后,找到加密根分区的映射设备名:
- 运行
ls /dev/mapper,里面类似cryptroot或者ubuntu--vg-root的就是加密后挂载的根分区设备;或者用blkid找带有TYPE="crypto_LUKS"的分区,它对应的映射名就是你要的。
现在修改GRUB配置:
- 编辑
/etc/default/grub文件,找到GRUB_CMDLINE_LINUX_DEFAULT这一行,在quiet splash后面加上resume=/dev/mapper/你的映射名 resume_offset=刚才算出的偏移量。比如最终看起来是这样:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mapper/cryptroot resume_offset=503316480"
最后更新系统配置并测试:
- 先更新initramfs(因为加密盘的启动镜像需要包含休眠相关模块):
sudo update-initramfs -u - 再更新GRUB:
sudo update-grub - 现在试试休眠:
sudo systemctl hibernate,重启后应该就能回到之前的会话了。
额外小提醒:如果你的系统用的是Btrfs文件系统,计算偏移量的命令要换成 sudo btrfs inspect-internal map-swapfile /swapfile,直接就能得到正确的offset值,不用自己计算。
备注:内容来源于stack exchange,提问作者Duncan Marshall
相关产品推荐
相关产品推荐

