即使已禁用,Ubuntu 20.04 仍可安装交换区

即使已禁用,Ubuntu 20.04 仍可安装交换区

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 将不会自动挂载驱动器,因此不会有交换分区。

相关内容