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 了。©

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

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>