Debian13 Linux系统无法关闭swap、无法完全禁用的问题和解决方案

原创 阁主  2026-02-20 22:05:50  阅读 50 次 评论 0 条
摘要:

本文介绍了在Debian系统中禁用swap分区的方法。临时禁用swap可以通过特定命令实现,但要持久禁用,需要防止系统重启后自动挂载swap分区。尽管修改了相关配置文件并重启系统,swap依然会被挂载,这是因为Debian使用systemd来管理挂载。为了解决这个问题,需要对systemd的相关设置进行调整,执行特定命令以禁用swap分区,确保重启后swap不再自动挂载。

传统的方案

传统的方案都是使用swapoff -a来临时关闭swap,再去/etc/fstab注释或删除对应的swap挂载项。如需要持久化地关闭 swap,则需要防止重启后 swap 分区的自动挂载。Debian 默认使用 swap 分区而不是 swap 文件,且使用 UUID 进行挂载。编辑 /etc/fstab,将 swap 分区挂载相关的行加上注释符号 # 即可。

传统方案.png

问题

但是上面方法基本上对云服务厂商那些机器有作用,本文是在自己的VMware虚拟机创建了一台debian13的虚拟机,使用这个方法并不能完全禁用swap,甚至重启系统还会自动重新创建swap分区。查阅资料后发现,Debian 默认使用 systemd 接管 swap 的挂载。systemd 对于交换分区的激活方式都是通过 /usr/lib/systemd/system-generators 中的可执行文件,具体可分为两种,因此只修改 /etc/fstab 是不够的,必须对 systemd 相关的设置进行修改。可以自行查阅下面的参考文献详细了解。

解决方案

在操作之前先临时关闭swap

swapoff -a

永久关闭:注释 /etc/fstab 中的 swap 行

sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

随后执行systemctl list-units --type=swap --all,查看所有与 swap 相关的 systemd 项:

systemctl list-units --type=swap --all

systemctl list-units --type=swap --all.png

接着禁用所有 swap 相关的目标

systemctl mask swap.target

执行之后reboot命令重启系统即可关闭相关项。重启之后 swap 分区就不会再被挂载。

关闭swap.png

验证关闭情况

# 应该所有swap项是空的
systemctl list-units --type=swap --all

# 应该没有任何输出
swapon --show

# swap 应该为 0
free -h

ok.png

参考文献

  1. Disabling Swap on Debian Permanently

  2. Debian 11 关闭 swap 遇到的问题和解决方案

本文地址:https://www.mainblog.cn/346.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
NEXT:已经是最新一篇了

评论已关闭!