linux如何关闭swap
- Linux
- 2025-08-03
- 4444
/etc/fstab
注释掉swap分区条目,然后执行
swapoff -a
命令
是关于如何在Linux系统中关闭Swap(交换空间)的详细指南,涵盖临时禁用和永久配置的方法,并附有注意事项及常见问题解决方案:
查看当前Swap状态
在执行任何操作前,建议先确认系统中是否存在正在使用的Swap分区或文件,可通过以下命令检查:
sudo swapon --summary
:列出所有启用的Swap设备及其详细信息(如类型、大小、已用空间等)。free -h
:以人类可读格式显示内存与Swap的使用情况,若输出中“Swap”行的总量为0B,则说明无可用交换空间;否则会显示具体数值,某系统可能显示为“Swap: 4.0Gi 0B 4.0Gi”。sudo swapon -s
:另一种查看已激活的Swap列表的方式,适用于快速排查。
临时关闭Swap
此方法仅在当前会话有效,重启后会自动恢复,适合测试环境或短期需求场景。
关闭特定Swap设备/文件
假设检测到/dev/sda2
是一个活动的分区型Swap,可运行:
sudo swapoff /dev/sda2
若使用的是文件型Swap(如/swapfile
),则命令为:
sudo swapoff /swapfile
一键关闭所有Swap
使用通配符选项-a
实现批量操作:
sudo swapoff -a
该命令会立即释放所有Swap资源回物理内存,完成后再次执行free -h
验证结果,应看到“Swap”相关字段全部归零。
永久禁止Swap自动挂载
要使更改持久化,需修改系统配置文件并重启服务,以下是不同发行版的兼容方案:
方法1:编辑/etc/fstab
传统方式
打开文本编辑器修改启动表:
sudo vi /etc/fstab
找到包含关键词“swap”的行(通常格式类似UUID=xxx none swap sw 0 0
),在其开头添加注释符号使其失效,保存退出后,可通过mount -a
强制重新加载配置,确保改动即时应用而无需立即重启。
方法2:Systemd单元管理(针对较新系统)
自Ubuntu 20.04起,部分Linux发行版采用systemd控制Swap服务,此时需执行以下步骤:
- 屏蔽目标服务:创建符号链接至空设备以阻止加载:
sudo systemctl mask swap.target
- 验证状态变化:检查服务状态确认是否被成功禁用:
systemctl status swap.target
预期输出应显示“Loaded: masked”,最后执行
reboot
使设置生效。
彻底删除Swap实体(可选)
如果不再需要原有的Swap结构,可以进一步清理底层存储对象:
| 类型 | 操作命令 | 说明 |
|————|——————————|—————————–|
| 磁盘分区 | sudo fdisk /dev/sdX
| 使用交互式工具删除对应分区 |
| Swap文件 | sudo rm /swapfile
| 直接移除已存在的交换文件 |
警告:此步骤不可逆且风险较高,务必提前备份重要数据!仅推荐在确定不再需要该空间时操作。
注意事项与风险提示
- 内存容量评估:关闭Swap前必须确保物理内存充足,否则可能导致关键进程因OOM杀手被终止,甚至引发系统崩溃,建议通过监控工具观察日常峰值用量作为参考。
- 性能影响分析:虽然减少I/O竞争可能提升响应速度,但完全依赖RAM会增加硬件压力,对于数据库、虚拟化等高负载工作负载尤其谨慎。
- 容器环境特殊考量:Kubernetes等平台默认要求禁用主机级别的Swap以防止不可预测的行为干扰Pod调度,此类场景下推荐遵循官方文档指导。
恢复Swap的方法
如需重新启用已禁用的Swap,可根据之前的操作反向执行:
- 对于文件型Swap,需先重建元数据再激活:
sudo mkswap /swapfile && sudo swapon /swapfile
- 若是分区型Swap,只需取消
fstab
中的注释并执行:sudo swapon -a
FAQs
Q1: 如果遇到错误信息“swapoff: /dev/sdb1: swapoff failed: Device or resource busy”,该怎么办?
解答:这通常是由于系统仍在使用该交换区导致无法直接关闭,可以尝试先释放缓存:执行sudo sysctl -w vm.drop_caches=3
清理页缓存,然后再次运行sudo swapoff -a
,若仍失败,需手动终止占用较多内存的进程(通过ps aux --sort=-%mem | head -n 10
定位TOP进程,并用sudo kill -9 <PID>
结束)。
Q2: 为什么在Ubuntu 20.04之后修改/etc/fstab无法永久禁用Swap?该如何解决?
解答:新版Ubuntu引入了systemd对Swap的统一管理机制,此时仅修改/etc/fstab不够,还需屏蔽systemd的目标服务:运行sudo systemctl mask swap.target
,然后重启系统即可彻底禁用,这是由于现代init系统将交换功能抽象为独立的服务单元进行