给 Arch 添加 Swap 文件
分类:技术
自从半年前换了 Arch Linux,就一直没有设置 swap,心想最多也就编译的时候 Chrome 标签页「哦哟」一下嘛。
不过实际没有 swap 不能休眠还是有点不踏实,毕竟是台式机,又懒得接 UPS。于是以下就是这周末设置 swap 文件用于休眠的历程(内容 Arch Wiki 上都有提及,就是总结记录一下)。
查看当前 Swap 状态
使用 swapon --show
。
创建多大的 Swap 文件
Swap 文件的大小一般至少是 512M。如果你和我一样是为了让系统能够休眠,那么可以参考 /sys/power/image_size
里的字节数,如果你没有修改过,这个值默认是当前内存大小的五分之二。
/sys/power/image_size
控制的就是休眠镜像的文件大小。系统会尽可能保证镜像大小不超过这个值,即便无法实现,也会尽量将镜像缩小。也就是说,你给它设 0 也是可以的,此时休眠镜像的大小会是最小的。
创建 Swap 文件
首先在一些文件系统上使用 swap 文件是会有问题的,比如早期的 Btrfs 就不支持。
创建 Swap 文件有很多种方法,但最可移植的方法是使用 dd
。比如创建 1G 的 /swapfile
:
# dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
# chmod 0600 /swapfile
# mkswap -U clear /swapfile
这里的 chmod
是为了安全,所有人都可读写的 Swap 文件是巨大隐患。
mkswap
的 -U
参数用于设置 swap 的 UUID。但是因为 swap 文件必须使用文件系统路径去指定,所以这里使用特殊的 clear
作为参数去清空它(实际效果是设置了全零的 UUID)。
打开与关闭
创建好 swap 文件后,就可以直接启用了:
# swapon /swapfile
最后把它放进 /etc/fstab
里,这样每次启动就会直接启用:
/swapfile none swap defaults 0 0
如果是要关闭,顾名思义就:
# swapoff /swapfile
关闭以后它就是个普通文件,想删除就可以直接删除了。
使用 Swap 文件进行休眠
故事讲到这里,休眠和混合睡眠应该就都可以创建休眠镜像了。但我们还需要进行额外设置,才能在启动时使用这个休眠镜像。
内核参数
首先需要为内核设置 resume
和 resume_offset
参数,告诉它去哪里找休眠镜像。
resume
参数是 swap 文件所在的分区(例如 /dev/nvme0n1p2
,或者 UUID=4209c845-f495-4c43-8a03-5363dd433153
),可以在 /etc/fstab
里查看,也可以通过 findmnt -no UUID -T /swapfile
获取。
resume_offset
是文件开头在这个分区中的物理偏移量,可以通过 filefrag -v /swapfile
查看。
关于内核参数的设置,如果你和我一样使用的是 GRUB,可以编辑 /etc/default/grub
,把 resume=XXX resume_offset=XXX
追加到 GRUB_CMDLINE_LINUX_DEFAULT
里。最后重新生成一下 grub.cfg
即可:
# grub-mkconfig -o /boot/grub/grub.cfg
如果你有闲情逸致,也可以先不这么做。直接在 GRUB 启动界面按 e
,然后去手动编辑本次启动所使用的参数 😛
initramfs
如果你的 initramfs 没有使用 systemd 钩子(使用的是 base),那么就还需要添加一个 resume 钩子才会尝试从休眠中恢复:
编辑 /etc/mkinitcpio.conf
文件,在 HOOKS=(...)
里的 udev
之后的任何位置加入 resume
。最后重新生成 initramfs 即可:
# mkinitcpio -p linux
《2023年中央广播电视总台春节联欢晚会(特别加长版 )》大陆综艺高清在线免费观看:https://www.jgz518.com/xingkong/159657.html
《铁血红安》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/34035.html
《神秘家族》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/62363.html
《恋爱秘籍之换体魔戒》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/61297.html