必须先用swapon --show看type列:partition为磁盘分区,file为交换文件;空输出表示未启用swap;分区扩容需live usb离线操作,文件扩容只需swapoff→fallocate/dd→chmod 600→mkswap→swapon。

不能直接“修改”swap大小——必须先区分是swap分区还是swap文件,操作路径完全不同。强行用同一套命令处理两者,90%会失败或启动报错。
怎么快速判断当前用的是swap分区还是swap文件
执行 swapon --show,看输出中 TYPE 列的值:
- 如果是
partition,说明你用的是类似/dev/sda2这样的磁盘分区 - 如果是
file,说明你用的是像/swapfile这样的普通文件(现代发行版如 Ubuntu 22.04+/CentOS 8+ 默认走这条路) - 如果输出为空,说明当前没启用任何 swap,别急着扩容,先确认是否真需要(
free -h显示Swap: 0就是这种情况)
swap文件扩容:三步生效,不重启也能用
这是最安全、最常用的方式。关键不是“建多大”,而是“权限对不对”和“格式化有没有真正写入”。很多人卡在 mkswap: error: swap area needs to be at least 4096 bytes,其实是文件没填满或没刷盘。
- 停旧的:
swapoff /swapfile(如果正在用) - 扩文件(推荐用
fallocate):fallocate -l 8G /swapfile;若报错(比如 XFS 文件系统不支持),改用dd if=/dev/zero of=/swapfile bs=1G count=8 - 设权限(必须!否则
swapon拒绝加载):chmod 600 /swapfile - 重格式化:
mkswap /swapfile(注意:不是mkswap -f,加-f强制覆盖可能掩盖权限问题) - 启用:
swapon /swapfile,再用swapon --show和free -h验证 SIZE 和 total 是否更新
swap分区扩容:在线基本不可行,别硬试
swap 分区本质是磁盘上一段固定区域,扩容 = 重划分区表。这意味着你要移动数据、调整边界、确保后面有连续空闲空间——跟 resize / 或 /home 是同一风险等级。
-
swapoff /dev/sda2失败?正常。只要cat /proc/swaps不为空或free显示 swap 在用,就说明还有进程在使用它,无法卸载 - 在线状态下无法用
parted resizepart扩展正在使用的 swap 分区;即使成功,也必须保证该分区后方有未分配空间,且不被 LVM/RAID 占用 - 唯一稳妥路径:关机 → Live USB 启动 → 用
gparted或parted操作 → 重新mkswap→ 更新/etc/fstab
fstab配置和常见陷阱
临时启用 swapon /swapfile 成功 ≠ 开机自动挂载。漏掉这步,重启后 swap 又变 0。
- 备份再改:
cp /etc/fstab /etc/fstab.bak - 追加行(注意字段顺序和空格):
echo '/swapfile none swap sw 0 0' >> /etc/fstab - 验证语法:
mount -a不报错,且swapon --show仍显示该文件,才算真正落盘 - 常见错误:
/swapfile swap swap defaults 0 0(第二字段应为none,不是swap);或权限仍是644导致开机时swapon被拒绝
真正容易被忽略的点是:swap 文件必须建在支持 fallocate 或能稳定写满的文件系统上(ext4/XFS 多数 OK,但某些 overlayfs 或 tmpfs 就不行);另外,swappiness 值长期保持默认 60,在内存充足时反而会拖慢响应——这不是 swap 大小的问题,但常被误认为“扩容没用”。











