银河麒麟服务器操作系统关闭 Swap 分区

银河麒麟服务器操作系统关闭 Swap 分区

1. 适用范围

  • 操作系统:银河麒麟高级服务器操作系统

2. 问题现象

按通用教程在 /etc/fstab 中注释掉 swap 挂载行后重启,swap 仍然被自动启用:

查看 swap 单元状态:

bash 复制代码
[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
bash 复制代码
[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 状态的单元:

  1. systemctl disable 无法禁用(磁盘上没有可移除的启用链接);
  2. 仅注释 /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 状态

bash 复制代码
swapon --show
free -h
systemctl list-unit-files | grep swap

确认 swap 设备名称(本文以 /dev/mapper/klas-swap 为例,实际以查询结果为准)。

4.2 备份并注释 /etc/fstab 中的 swap 行

bash 复制代码
cp /etc/fstab /etc/fstab.bak
vi /etc/fstab

将 swap 挂载行注释掉(行首加 #):

bash 复制代码
# /dev/mapper/klas-swap  none  swap  defaults  0  0

该行也可能写作 UUID=xxxx-xxxx-xxxx swap swap defaults 0 0 形式,同样注释即可。此步骤用于消除 fstab 来源,单独执行并不彻底,需配合 4.4。

4.3 立即关闭当前已启用的 swap

bash 复制代码
swapoff -a

或精确关闭指定设备:

bash 复制代码
swapoff /dev/mapper/klas-swap

执行后 free -h 的 Swap 行应变为 0。

4.4 关键步骤:屏蔽 swap.target

bash 复制代码
systemctl mask swap.target

如需双保险,可同时屏蔽具体的 swap 单元(注意用引号保留 \x2d 转义):

bash 复制代码
systemctl mask "dev-mapper-klas\x2dswap.swap"

屏蔽后再次查询,swap.target 的状态应显示为 masked

bash 复制代码
[root@192 ~]# systemctl list-unit-files | grep swap
dev-mapper-klas\x2dswap.swap                masked       -
swap.target                                 masked          disabled

4.5 重启并验证

bash 复制代码
reboot

5. 验证方法

重启后逐项确认:

bash 复制代码
# 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,按相反顺序操作:

bash 复制代码
# 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 分区。

文档适用环境:银河麒麟高级服务器操作系统。操作前请做好备份,生产环境建议先在测试机验证。

相关推荐
xhbh6667 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
是逍遥子没错7 小时前
一个斜杠,击穿整座网关:API网关路径前缀绕过认证实战
运维·服务器·web安全·网络安全·渗透测试·系统安全
Fluxart.ai8 小时前
GPT Image 2.5 有使用次数限制吗?额度、并发、频率限制说明
服务器·前端·gpt
其实防守也摸鱼8 小时前
每天一个知识点——RCE漏洞
运维·服务器·数据库·windows·安全·github·漏洞
努力努力再努力wz8 小时前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
ao-weilai8 小时前
Linux网络编程:网络知识基础
linux·网络·php
u1301308 小时前
GitHub 热榜项目:日榜(2026-09-12)
github
GeW9 小时前
RHCE10一次过!提高通过率+快速拿证的7个核心技巧
linux
TunerT_TQ9 小时前
Netflix|一个时代的终结:Hystrix静态工程评测,兼谈微服务容错范式的代际迁移
开源·github·资讯
JavaPub-rodert9 小时前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器