现在电脑里内存很大,如果不使用休眠功能的话就完全用不上 SWAP。偶尔遇到内存泄漏,内存空间被快速占满,然后又开始占用 SWAP,此时 SWAP 反而成为累赘。反正系统也无救了不如让它早点崩溃更好。于是决定禁用 SWAP。可是早些年禁用 SWAP 的方法已经不管用了。
以前只要不分配 SWAP 分区或文件,或者即使分配了 SWAP 分区但是在 /etc/fstab
将其注释掉,然后在 GRUB2 的启动参数里面去掉 resume 选项也就没事了。这里介绍的步骤就是传统禁用 SWAP 方法的经典操作,
- 修改
/etc/fstab
,注释掉 swap 那一项(前面加 # 号); - 修改
/etc/default/grub
,将启动选项里面的resume=......
删除; - 重建 「initrd」(
sudo mkinitrd
); - 重建「grub.cfg」(
grub2-mkconfig -o /boot/grub2/grub.cfg
); - 重启。
但是现在呢,做了这些并不能阻止系统识别原来的 swap 分区并自动加载它。这都是 systemd 的智能功能。经过上面的操作之后可以通过 systemctl 查看其神奇能力,
# systemctl list-units | grep swap dev-disk-by\x2duuid-8361adce\x2d1e7d\x2d45ff\x2da38d\x2d700f9029d57c.swap loaded active active /dev/disk/by-uuid/8361adce-1e7d-45ff-a38d-700f9029d57c swap.target loaded active active Swap
有人说,那我将这两个 systemd 的 target 屏蔽了吧,
# systemctl mask dev-disk-by\x2duuid-8361adce\x2d1e7d\x2d45ff\x2da38d\x2d700f9029d57c.swap Unit dev-disk-byx2duuid-8361adcex2d1e7dx2d45ffx2da38dx2d700f9029d57c.swap does not exist, proceeding anyway. Created symlink /etc/systemd/system/dev-disk-byx2duuid-8361adcex2d1e7dx2d45ffx2da38dx2d700f9029d57c.swap → /dev/null. # systemctl mask swap.target Created symlink /etc/systemd/system/swap.target → /dev/null.
其实没有这么麻烦。
在 systemd.swap 的说明页面介绍了 swap.target 在工作时候的优先级。系统的 SWAP 既可以通过 systemd.swap 单元来配置,也可以通过 /etc/fstab
来配置。但是如果 /etc/fstab
中在 swap 那一项中添加了 noauto
参数,则两方面都不会自动挂载 swap 分区。所以我们只需要编辑 /etc/fstab
文件,不要注释掉 swap 那一行,而是在其后面默认的挂载选项 defaults
后面加上 noauto
变成 defaults,noauto
就可以了。当然 GRUB2 的应该还是没有那个 resume 的参数,毕竟我们已经禁用 SWAP 了。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/disable-swap-in-opensuse-tumbleweed/>。转载请保留此信息及相应链接。