银河麒麟服务器操作系统关闭 Swap 分区
银河麒麟服务器操作系统关闭 Swap 分区
1. 适用范围
- 操作系统:银河麒麟高级服务器操作系统
2. 问题现象
按通用教程在 /etc/fstab 中注释掉 swap 挂载行后重启,swap 仍然被自动启用:
查看 swap 单元状态:
[root@192 ~]# free -h
total used free shared buff/cache available
Mem: 15G 1.2G 13G 12M 1.1G 14G
Swap: 7.9G 0B 7.9G
[root@192 ~]# systemctl list-unit-files | grep swap
dev-mapper-klas\x2dswap.swap generated -
swap.target masked disabled
3. 原因分析
(1)swap 单元是 generated(运行时生成)状态
dev-mapper-klas\x2dswap.swap 对应设备 /dev/mapper/klas-swap(单元名中的 \x2d 是 systemd 对字符 - 的转义)。该单元并非磁盘上真实存在的单元文件,而是由 systemd 生成器在系统启动时根据探测到的交换设备动态生成的。
对于 generated 状态的单元:
systemctl disable无法禁用(磁盘上没有可移除的启用链接);- 仅注释
/etc/fstab只是移除了 fstab 生成器的一个来源,swap.target仍会被设备型 swap 单元拉起,重启后 swap 依旧启用。
(2)必须使用 systemctl mask
mask 会在 /etc/systemd/system/ 下创建指向 /dev/null 的软链接,从根源上阻止该单元(及其依赖链上的所有 swap 单元)被启动。屏蔽 swap.target 后,任何 swap 单元都无法再被激活,这是麒麟服务器操作系统上彻底关闭 swap 的有效方法。
4. 操作步骤
建议以 root 用户执行;操作前确认物理内存充足(关闭 swap 后无交换空间兜底)。
4.1 查看当前 swap 状态
swapon --show
free -h
systemctl list-unit-files | grep swap
确认 swap 设备名称(本文以 /dev/mapper/klas-swap 为例,实际以查询结果为准)。
4.2 备份并注释 /etc/fstab 中的 swap 行
cp /etc/fstab /etc/fstab.bak
vi /etc/fstab
将 swap 挂载行注释掉(行首加 #):
# /dev/mapper/klas-swap none swap defaults 0 0
该行也可能写作 UUID=xxxx-xxxx-xxxx swap swap defaults 0 0 形式,同样注释即可。此步骤用于消除 fstab 来源,单独执行并不彻底,需配合 4.4。
4.3 立即关闭当前已启用的 swap
swapoff -a
或精确关闭指定设备:
swapoff /dev/mapper/klas-swap
执行后 free -h 的 Swap 行应变为 0。
4.4 关键步骤:屏蔽 swap.target
systemctl mask swap.target
如需双保险,可同时屏蔽具体的 swap 单元(注意用引号保留 \x2d 转义):
systemctl mask "dev-mapper-klas\x2dswap.swap"
屏蔽后再次查询,swap.target 的状态应显示为 masked:
[root@192 ~]# systemctl list-unit-files | grep swap
dev-mapper-klas\x2dswap.swap masked -
swap.target masked disabled
4.5 重启并验证
reboot
5. 验证方法
重启后逐项确认:
# 1) 无任何 swap 设备输出
swapon --show
# 2) Swap 总量为 0
free -h
# 3) swap.target 状态为 masked
systemctl list-unit-files | grep swap
三项均符合预期(swapon --show 无输出、Swap total 为 0、swap.target 为 masked)即表示关闭成功。
6. 回退(恢复 swap)方法
如需恢复 swap,按相反顺序操作:
# 1) 解除屏蔽
systemctl unmask swap.target
systemctl unmask "dev-mapper-klas\x2dswap.swap"
# 2) 取消 /etc/fstab 中 swap 行的注释
vi /etc/fstab
# 3) 立即启用(或直接重启)
swapon -a
reboot
7. 注意事项与常见问题
| 问题 | 说明 |
|---|---|
| 为什么注释 fstab 不生效? | swap 单元为 generated 状态,由 systemd 启动时动态生成并挂接到 swap.target,注释 fstab 只是移除了其中一个来源,必须 mask 才能彻底阻断。 |
| systemctl disable dev-mapper-klas\x2dswap.swap 报错? | generated 单元没有磁盘单元文件,disable 无效,属预期行为;请改用 systemctl mask。 |
| masked 单元无法 start? | mask 后单元被强制指向 /dev/null,任何启动尝试都会失败,这正是关闭 swap 的预期效果。 |
| 关闭 swap 的风险? | 物理内存耗尽时进程会被 OOM Killer 直接杀死,无交换空间缓冲。请确保内存余量充足。 |
| 只是 mask 屏蔽 swap 单元而不注释 fstab? | 如果没有注释 fstab 文件中对于 swap 分区的挂载,只是使用 systemctl 屏蔽了所有 swap 单元,swap 分区仍可用 swapon 打开;注释 fstab 文件的同时使用 systemctl 屏蔽所有 swap 单元,swapon 命令将不会再拉起 swap 分区。 |
文档适用环境:银河麒麟高级服务器操作系统。操作前请做好备份,生产环境建议先在测试机验证。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)