当前位置:首页 > Linux > 正文

linux如何关闭swap

Linux系统中,可通过编辑 /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实现批量操作:

linux如何关闭swap  第1张

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系统将交换功能抽象为独立的服务单元进行

0