TLDR:即使从 /etc/fstab 中删除了交换分区,完全更新的 ubuntu 22.04 服务器仍然在安装交换分区
我快要被这个问题搞晕了。我已经阅读了 ubuntu 文档中关于 swap 的内容大约 15 次,但仍然不明白为什么会发生这种情况。
我注释掉了 /etc/fstab 中的交换 FS,重新启动后,我的系统仍然在 /proc/swaps 和 free -h 中列出了交换驱动器。
/proc/swaps
Filename Type Size Used Priority
/dev/dm-0 partition 2097148 0 -2
正如我所怀疑的,systemd 是罪魁祸首。
dev-disk-by\x2duuid-8a852d8d\x2d56cf\x2d4478\x2da13e\x2d0405fa7239dc.swap - /dev/disk/by-uuid/8a852d8d-56cf-4648-a13e-0405fa7239dc
Loaded: loaded (/etc/fstab; generated)
Active: active since Tue 2023-01-10 12:49:44 CET; 2 weeks 2 days ago
What: /dev/disk/by-uuid/8a852d8d-56cf-4678-a13e-0405fa7239dc
Docs: man:fstab(5)
man:systemd-fstab-generator(8)
Tasks: 0 (limit: 38460)
Memory: 200.0K
CGroup: /system.slice/dev-disk-by\x2duuid-8a852d8d\x2d56cf\x2d4478\x2da13e\x2d0405fa7239dc.swap
在阅读了一些有关 systemd swap 的内容后,我意识到这个驱动器不是通过单元文件安装的,因为似乎没有单元文件。
现在我怀疑 systemd-gpt-auto-generator 通过发现自动安装交换驱动器。 https://man.archlinux.org/man/systemd-gpt-auto-generator.8
我不明白的是如何安全地禁用交换安装。我真的不想抛弃所有这些默认配置,因为它在许多系统上运行。并且未来更新的风险取决于此,从而导致异常。
我可以完全删除交换分区,但这确实是最丑陋的修复方法,而且也不太像 Linux。我真的不想让没有经验的管理员乱删除分区,这不值得冒这个险。另一个非解决方案是调整交换性,但我真的不想要交换。有人在 stackexchange 上提到在启动后执行 swapoff,这实际上也不是解决方案。
咆哮:Systemd 再次修复了没有损坏的部分,并忽略了 KISS,好像这是微软设计的。这些事情过去是可以预见的。
另外:我正在运行的软件确实受到交换的影响,我宁愿让它崩溃也不愿让它被交换。
最后但并非最不重要的一点是,关于这个问题的信息少得令人震惊,我不可能是唯一一个遇到这个问题的人。
任何意见都值得赞赏!提前致谢。
编辑
根据请求:swapon -s 的输出
Filename Type Size Used Priority
/dev/dm-0 partition 2097148 2316 -2
/etc/fstab 的输出
UUID="f7285d85-d18f-4a10-9580-e54a2cd4581c" / ext4 defaults,errors=remount-ro 0 1
systemctl --type swap 的输出
UNIT LOAD ACTIVE SUB DESCRIPTION
dev-dm\x2d0.swap loaded active active /dev/dm-0
答案1
systemd
如今,交换分区和交换文件除了由条目安装外,还由设备安装/etc/fstab
。
最有可能的是有一个systemd
单元安装了你的交换分区...使用以下命令找到它:
systemctl --type swap
输出可能类似于:
UNIT LOAD ACTIVE SUB DESCRIPTION
dev-dm0.swap loaded active active /dev/dm-0
像这样掩盖它:
sudo systemctl mask dev-dm0.swap
然后重新启动。
答案2
您可以systemd-gpt-auto-generator
通过以下方式禁用
添加systemd.gpt_auto=no
启动参数/etc/default/grub
。
并且仅使用fstab
。
但是如果您不打算使用交换分区,我认为没有理由保留它。
您也可以随时通过以下方式在工作系统中禁用交换:
sudo swapoff -a
答案3
通过翻转交换分区上的“不自动挂载”选项,我自己解决了这个问题。
由于 Ubuntu 默认使用 LVM,因此必须在 /dev/LMV0/SWAP 上而不是在底层设备上设置属性。
sgdisk -A 2:set:63 /dev/LVM0/SWAP
重新启动时,不再安装交换设备。
当设置此属性时,systemd-gpt-auto-generator 将不会自动挂载驱动器,因此不会有交换分区。