要真正回收 swap 占用的物理资源,需先区分 swapfile 或 swap 分区类型,再分别执行 swapoff、注释 /etc/fstab、删除文件或移除逻辑卷并扩展文件系统,最后验证 swapon --show 为空且 free -h 显示 swap 为 0b。

直接用 swapoff 关闭交换区只是停用,不等于释放磁盘空间。要真正回收物理资源(比如删掉 swapfile 或腾出 swap 分区的空间),必须配合卸载、删除和重新分配操作。关键在于区分 swap 类型:是文件(swapfile)还是分区(swap partition),处理方式不同。
确认当前 swap 类型和状态
先看清系统用的是哪种 swap:
- 运行
swapon --show或cat /proc/swaps,看 TYPE 列:显示file就是 swapfile(如/swapfile);显示partition就是 swap 分区(如/dev/sdb1或/dev/mapper/centos-swap) - 运行
lsblk或df -h辅助判断:swapfile 属于某个挂载点下的普通文件;swap 分区在磁盘结构中独立存在 - 检查
/etc/fstab中对应行,确认是否被启用(没加#注释)
安全关闭并回收 swapfile 资源
swapfile 是普通文件,关闭后直接删掉就能释放磁盘空间:
- 执行
sudo swapoff /path/to/swapfile(例如sudo swapoff /swapfile),或一次性关所有:sudo swapoff -a - 编辑
/etc/fstab,把包含该 swapfile 的那一行前面加#注释掉,防止重启又启用 - 运行
sudo rm -f /path/to/swapfile,文件删除后空间立即可用 - 可选:执行
sudo sync确保写入完成,再用df -h验证空间是否已释放
安全关闭并回收 swap 分区资源
swap 分区是独立的磁盘区域,关闭后需手动移除逻辑卷或重新分配空间:
- 先停用:
sudo swapoff /dev/xxx(例如sudo swapoff /dev/mapper/centos-swap) - 编辑
/etc/fstab,注释掉对应 swap 行 - 如果是 LVM 管理的 swap(常见于 CentOS/RHEL/Alibaba Cloud Linux):
• 运行sudo lvremove /dev/mapper/xxx-swap(按提示输y确认)
• 把释放的空间合并到根分区:sudo lvextend -l +100%FREE /dev/mapper/xxx-root
• 扩展文件系统:sudo xfs_growfs /(XFS)或sudo resize2fs /dev/mapper/xxx-root(ext4) - 如果是标准分区(如
/dev/sdb2):
• 不建议直接fdisk删除——可能影响分区表顺序
• 更稳妥的做法是保留分区但不再启用,或用parted重新划分并格式化为其他用途
验证与收尾
做完上述操作后,务必验证是否彻底清理:
- 再次运行
swapon --show,输出应为空 - 运行
free -h,Swap 行全部显示为0B - 检查
cat /proc/swaps,应无任何内容 - 对 swapfile:确认
ls /swapfile报错“no such file”
对 swap 分区:运行lsblk,确认对应设备不再标记为swap类型











