swap大小改不了需先确认是分区还是文件:swapon --show看type列,partition需fdisk/parted高风险调整,file则用fallocate/dd创建+chmod600+mkswap+swapon,扩容后须更新fstab并测试。

swap 分区大小改不了?先确认你用的是 swap 分区还是 swap 文件
Linux 里调整 swap 不是统一操作——swapoff 和 swapon 对分区和文件的处理逻辑完全不同,强行套用会失败。常见错误是:看到网上说“删掉再重建”,结果发现 /dev/sda2 是根分区的一部分,根本不敢动;或者以为 swapfile 跟普通文件一样直接 truncate 就完事,结果系统启动时加载失败。
检查方法很简单:swapon --show 看输出里的 TYPE 列:如果是 partition,说明用的是磁盘分区;如果是 file,那就是 swap 文件(多数现代发行版默认用这个)。
- swap 分区:需用
fdisk/parted调整分区表,风险高,一般不建议新手操作 - swap 文件:安全、灵活、可随时增减,95% 的场景该选它
- 如果你的
swapon --show输出为空,说明当前没启用 swap,别急着调大小,先确认是否真需要
用 swap 文件扩容:三步到位,不重启也能生效
swap 文件是目前最稳妥的扩容方式,核心就是创建新文件 → 设置权限 → 格式化 → 启用。关键不是“怎么建”,而是“建在哪”和“格式化命令不能错”。很多人卡在 mkswap: error: swap area needs to be at least 4096 bytes,其实是文件没真正写满或没同步到磁盘。
- 选挂载点:优先放在根分区(
/)或独立大容量分区(如/var),避免放在/tmp或/run这类内存文件系统上 - 创建文件必须用
fallocate或dd,但fallocate -l 4G /swapfile更快;如果fallocate报错(比如 XFS 文件系统不支持),就换dd if=/dev/zero of=/swapfile bs=1G count=4 - 格式化前必须加权限:
chmod 600 /swapfile,否则swapon会拒绝加载(报错swapon: /swapfile: insecure permissions 0644, 0600 recommended) - 启用后验证:
swapon --show看 SIZE 是否匹配,free -h看 total 是否更新
swap 分区扩容:真要动,得先停系统服务再操作
swap 分区本质是磁盘上的一个区域,扩容等于重划分区,意味着要卸载、移动数据、调整边界——这跟调整 / 或 /home 没本质区别。绝大多数情况下,不值得为 swap 冒这个风险。如果你非得扩,唯一可行路径是:系统离线 + Live USB 启动 + gparted 或 parted 操作。
- 在线状态下无法 resize 正在使用的 swap 分区,
swapoff /dev/sda2失败是正常的,除非你确认没有进程在用 swap(cat /proc/swaps为空且free显示 swap 已 off) -
parted /dev/sda里用resizepart前,必须确保后面有连续空闲空间,且目标分区未被任何 LVM/RAID 占用 - resize 完必须重新
mkswap /dev/sda2,旧的 UUID 会变,记得更新/etc/fstab里的 UUID(用blkid查新值) - 别信“不用重启”的说法——内核缓存的分区表可能没刷新,reboot 是最保险的验证方式
fstab 和 systemd 配置漏了哪项,swap 开机就不加载
临时启用 swap(swapon /swapfile)成功 ≠ 开机自动加载。很多人调完大小,一重启发现 free -h 里 swap 又是 0,问题基本出在两个地方:fstab 条目写错,或 systemd 没识别到 swap 单元。
-
/etc/fstab必须有这一行:/swapfile none swap sw 0 0,注意第二个字段是none,不是swap(那是挂载点类型,swap 没挂载点) - 如果用了 systemd,可以手动启用对应单元:
systemctl enable dev-swapfile.swap(把-换成/的转义,实际名用systemctl list-units | grep swap确认) - 改完 fstab 后务必运行
swapon --all --verbose测试,而不是等重启——它会告诉你哪一行语法错、路径不存在、权限不对 - 某些发行版(如 Ubuntu 22.04+)默认禁用 swap 文件的自动加载,因为担心加密或压缩文件系统兼容性,这时得检查
/etc/systemd/system/multi-user.target.wants/dev-swapfile.swap是否存在
swap 大小本身不是越大多好,超过物理内存 2 倍后边际收益急剧下降,反而拖慢 OOM killer 判定。真正要注意的是:swap 文件是否放在 SSD 上、是否启用了 zram 替代方案、以及应用是否真在频繁触发 swap ——这些比调数字重要得多。










