Arch 休眠到交换文件

参考 Arch WikiArch简明指南 配置系统休眠到 swap file(ext4),配置完毕后无法正常休眠,问题如下

1. KDE 开始菜单不展示休眠选项

尝试手动休眠 systemctl hibernate,提示 "Not enough swap space for hibernation"

根据 Arch BBS,通过 systemctl edit systemd-logind.service 并在其中添加

# 注意添加位置,必须在文件中注明的两段注释之间,否则不会生效
[Service]       
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1

后重启 logind 服务 systemctl restart systemd-logind 即可

2. 休眠后立刻回到登录页面

休眠后查看日志 journalctl -n 1000,在其中查找 hibernate 相关记录,发现报了

Failed to find location to hibernate to: Function not implemented

怀疑是 hibernate 目标交换文件配置有误,检查后发现在获取交换文件 resume_offset 时,用 sudo filefrag -v /swapfile 命令查看的偏移如下:

Filesystem type is: ef53
File size of /swapfile is 34359738368 (8388608 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    6143:    4114432..   4120575:   6144:            
   1:     6144..   38911:    3997696..   4030463:  32768:    4120576:
   2:    38912..   71679:    3506176..   3538943:  32768:    4030464:
   3:    71680..  104447:    8224768..   8257535:  32768:    3538944:
   ...

physical_offset列的第一个值应当是 4114432,而我配置成了 4120575,修改后重新生成 grub.cfg 即可