openSUSE Tumbleweed 中禁用 SWAP

现在电脑里内存很大,如果不使用休眠功能的话就完全用不上 SWAP。偶尔遇到内存泄漏,内存空间被快速占满,然后又开始占用 SWAP,此时 SWAP 反而成为累赘。反正系统也无救了不如让它早点崩溃更好。于是决定禁用 SWAP。可是早些年禁用 SWAP 的方法已经不管用了。

以前只要不分配 SWAP 分区或文件,或者即使分配了 SWAP 分区但是在 /etc/fstab 将其注释掉,然后在 GRUB2 的启动参数里面去掉 resume 选项也就没事了。这里介绍的步骤就是传统禁用 SWAP 方法的经典操作,

  1. 修改 /etc/fstab,注释掉 swap 那一项(前面加 # 号);
  2. 修改 /etc/default/grub,将启动选项里面的 resume=...... 删除;
  3. 重建 「initrd」(sudo mkinitrd);
  4. 重建「grub.cfg」(grub2-mkconfig -o /boot/grub2/grub.cfg);
  5. 重启。

但是现在呢,做了这些并不能阻止系统识别原来的 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 了。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/disable-swap-in-opensuse-tumbleweed/>。转载请保留此信息及相应链接。

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)