今天遇到了 kylin 系统上无法关闭 swap 的情况。记录下和方便别人搜到这个知识点。
环境信息
1 | at /etc/issue |
尝试的步骤
fstab 里没有 swap 的挂载,
1 | swapoff -a && sysctl -w vm.swappiness=0 |
重启后,内核参数是关闭的,但是实际没有关闭
1 | sysctl -a |& grep vm.swappiness |
应该有其他的挂载,据我所知, systemd 也会负责挂载的,查找下
1 | systemctl list-units | grep swap |
发现这个无法 disable ,会报错 no such file。
解决办法
查找了下文档,systemd-gpt-auto-generator
是一个 GPT 分区 自动发现 与 挂载。会自动生成 mount 和 swap 的 systemd unit 文件。找到了英文文档里有下面的话:
1 | systemd-gpt-auto-generator understands the following kernel command line parameters: |
我们可以通过添加 kernel boot cmdline 来关闭 systemd-gpt-auto-generator
。
先查找到 grub.cfg
:
1 | find /boot -type f -name 'grub*cfg' -exec grep -l '/vmlinuz' {} \; |
进去备份下文件:
1 | cd /boot/grub/ |
找到类似下面的行:
1 | linux /boot/vmlinuz-xxx |
后面加上 systemd.gpt_auto=false
,文档是写布尔值的,不过我看到有人 systemd.gpt_auto=0
也行。然后重启。
理论上改文件 /etc/default/grub
里 GRUB_CMDLINE_LINUX
后面添加也行。