银河麒麟服务器操作系统关闭 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 分区。

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

相关推荐
怕浪猫1 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
miofly3 小时前
Aleph Alpha 开源 78B 参数 MoE 模型 Kolibri
开源·github
ai小陈3 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
JackSparrow4144 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
Ivanqhz4 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
FPGA小徐5 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
有毒的教程5 小时前
VMware仅主机模式:物理机 ↔ 虚拟机 文件共享
运维
知行EDI6 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
成旭先生6 小时前
【2026】企业信息模糊查询 API 实战:名称、注册号、统一社会信用代码、企业类型与法人一次查全
服务器·数据库·数据服务
殷色玫瑰7 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++