Arch Linux 使用 Swap File 进行休眠

2019年06月08日 49点热度 0人点赞 1条评论

大部分情况下,为了便于调整和配置的灵活性,我们一般使用 Swap File。

参考资料:Arch WikiArch WikiArch BBS

建立 Swap File(参考 Arch Wiki

手动方式

建立交换文件

用root账号,使用 fallocate 命令来创建一个所需大小的交换文件(M = Mebibytes, G = Gibibytes)。例如,创建一个16G 的交换文件(用作休眠,最好设置为你电脑内存的大小):

# fallocate -l 16G /swapfile

注意: fallocate 命令用在 F2FSXFS 文件系统时可能会引起问题。[1] 代替方式是使用 dd 命令,但是要慢一点:

# dd if=/dev/zero of=/swapfile bs=1M count=512

为交换文件设置权限:(交换文件全局可读是一个巨大的本地漏洞)

# chmod 600 /swapfile

创建好交换文件后,将其格式化:

# mkswap /swapfile

Tip:这里会有一个UUID,没有任何用处

启用交换文件:

# swapon /swapfile

最后,编辑 /etc/fstab, 在其中添加如下的一行:

/etc/fstab
/swapfile none swap defaults 0 0

设置休眠(参考 Arch Wiki

设置 grub

设置 resume(用于告诉系统应该从哪个硬盘设备恢复)

获取 swap file 所在的分区的 UUID,例如我用的是 LVM

lsblk -no UUID /dev/XzRoot/root

将这串 UUID(2cee6498-2bd1-496f-9801-164ddddcc9c3) 填入 resume

resume=UUID=2cee6498-2bd1-496f-9801-164ddddcc9c3

当然,你也可以填 resume=/dev/XzRoot/root

获取 resume_offset

运行 sudo filefrag -v /swapfile

找到第一行第一个拥有两个句点的数字。如截图所示,为:78610432

设置 resume_offset(用于告诉系统应该从哪个具体的位置恢复)

将刚刚用 swap file 获得的值填入如图所示的 resume_offset。

resume_offset=78610432

重新生成grub.cfg

grub-mkconfig -o /boot/grub/grub.cfg

设置 Kernel Module

编辑 mkinitcpio.conf 的 HOOKS 项

启动钩子的关键词请参考 ArchWiki

添加 resume 钩子

# /etc/mkinitcpio.conf

HOOKS=(base udev autodetect modconf block lvm2 resume filesystems keyboard fsck)

重新编译镜像

sudo mkinitcpio -p 你的内核名称

The End

在第一次休眠之前,需要重新启动才能激活该功能。

重启之后,你应该就能看见电源菜单中有了休眠选项。
1+

xz-dev

文章评论

🌍 Language