今天遇到了 kylin 系统上无法关闭 swap 的情况。记录下和方便别人搜到这个知识点。
环境信息 1 2 3 4 $ at /etc/issue Kylin 4.0.2 \n \l $ uname -aLinux H-192-168-63-132 4.15.0- 58-generic #64kord1k1'SMP Thu Aug 1S15:51:97 csT 2919 aarch64 ......
尝试的步骤 fstab 里没有 swap 的挂载,
1 swapoff -a && sysctl -w vm.swappiness=0
重启后,内核参数是关闭的,但是实际没有关闭
1 2 3 4 5 6 7 $ sysctl -a |& grep vm.swappiness vm.swappiness = 0 $ free -h total used free shared buff/cache available Mem: 127G 48G 70G 169M 7.8G 64G Swap: 7.6G 0B 7.8G
应该有其他的挂载,据我所知, systemd 也会负责挂载的,查找下
1 2 3 4 5 6 7 8 9 10 11 12 13 $ systemctl list-units | grep swap dev-sda3.swap loaded active active Swap Partition swap.target loaded active active Swap $ systemctl cat dev-sda3.swap # /run/systemd/generator.late/dev-sda3.swap # Automatically generated by systemd-gpt-auto-generator [unit] Description=Swap Partition Documentation=man:systemd-gpt-auto-generator(8) [Swap] What=/dev/sda3
发现这个无法 disable ,会报错 no such file。
解决办法 查找了下文档,systemd-gpt-auto-generator
是一个 GPT 分区 自动发现 与 挂载。会自动生成 mount 和 swap 的 systemd unit 文件。找到了英文文档里有下面的话:
1 2 3 4 systemd-gpt-auto-generator understands the following kernel command line parameters: systemd.gpt_auto, rd.systemd.gpt_auto Those options take an optional boolean argument, and default to yes. The generator is enabled by default, and a negative value may be used to disable it.
我们可以通过添加 kernel boot cmdline 来关闭 systemd-gpt-auto-generator
。
先查找到 grub.cfg
:
1 2 $ find /boot -type f -name 'grub*cfg' -exec grep -l '/vmlinuz' {} \; /boot/grub/grub.cfg
进去备份下文件:
1 2 cd /boot/grub/ cp grub.cfg grub.cfg-20201120
找到类似下面的行:
1 2 3 linux /boot/vmlinuz-xxx # 或者 linux /vmlinuz-xxx
后面加上 systemd.gpt_auto=false
,文档是写布尔值的,不过我看到有人 systemd.gpt_auto=0
也行。然后重启。
参考正则定位数据 第一行,改完的
1 2 3 4 root@user-PC:/boot/grub/# grep /vmlinuz- grub.cfg linux /vmlinuz-4.19.0-arm64-server root=UUID=d6d053b2-86e8-4d19-b19b-2051e6d856b5 ro splash quiet console=tty plymouth.ignore-serial-consoles DEEPIN_GFXMODE=$DEEPIN_GFXMODE systemd.gpt_auto=0 linux /vmlinuz-4.19.0-arm64-server root=UUID=d6d053b2-86e8-4d19-b19b-2051e6d856b5 ro splash quiet console=tty plymouth.ignore-serial-consoles DEEPIN_GFXMODE=$DEEPIN_GFXMODE linux /vmlinuz-4.19.0-arm64-server ro boot=live toram=filesystem.squashfs splash quiet locales=zh_CN.UTF-8 console=tty live-media-path=usr/doppel root=UUID=d6d053b2-86e8-4d19-b19b-2051e6d856b5
2021/03/23
测试了下面的不行。。。 改文件 /etc/default/grub
里 GRUB_CMDLINE_LINUX
后面添加也行。
Azure Linux 的话有个
1 systemctl list-units | grep temp-disk-swapfile
参考