如果用fallocate创建swapfile时遇到“Operation not supported”,更稳妥的做法是改用dd命令,因为它对各种文件系统的兼容性更好。操作前先确认目标分区有足够可用空间,同时把文件权限设为600;接着执行mkswap和swapon完成启用,最后在/etc/fstab中写入正确配置,这样重启后也能持续生效。

swapfile 创建失败:fallocate 报错“Operation not supported”
遇到这个错误,说明当前文件系统(比如旧版 XFS 或某些 NFS 挂载)不支持 fallocate 的预分配机制。别硬扛,直接切回 dd —— 它兼容所有文件系统,只是慢一点。
dd if=/dev/zero of=/swapfile bs=1M count=1024是最稳妥的 1GB 创建方式;count和bs相乘即为总大小,别写错单位(count=1G是无效语法)- 创建前先
df -h确认目标路径所在分区有足够连续空间;/swapfile放根目录最稳妥,避免挂载点权限或 SELinux 干扰 - 创建后立刻执行
chmod 600 /swapfile—— 权限不对会导致mkswap失败或系统拒绝启用
swapon 后 free -h 显示 Swap 仍为 0
这几乎一定是没真正激活成功。常见原因就三个:权限不对、mkswap 没跑、或者路径写错了。
- 先确认
mkswap /swapfile是否成功输出 “Setting up swapspace version 1…”;失败时不会报严重错误,但后续swapon必然无效 - 运行
swapon /swapfile后,立刻检查swapon --show—— 它比free -h更准,会明确列出已启用的 swap 设备 - 如果提示 “Permission denied”,回头再查一遍
ls -l /swapfile,确保是-rw------- 1 root root
重启后 Swap 自动失效
CentOS 7 不会自动加载 swap 文件,必须靠 /etc/fstab 驱动。漏掉这一行,等于白配。
- 往
/etc/fstab追加这行:/swapfile swap swap defaults 0 0—— 注意字段顺序不能错,第四个字段是0(不是1),第五个是0(不是1) - 追加后别急着重启,先手动测试:
swapoff -a && swapon -a,再看swapon --show是否恢复 - 如果
swapon -a报错,大概率是/etc/fstab里路径写错,或文件被删了,或权限又变回 644
Swap 一直不用?检查 vm.swappiness 值
默认值 60 对云服务器太激进,但设成 0 又会导致内存彻底耗尽才用 Swap,容易 OOM Kill 进程。生产环境建议调到 10~20 之间。
- 临时生效:
sysctl vm.swappiness=10;验证:cat /proc/sys/vm/swappiness - 永久生效:在
/etc/sysctl.conf末尾加一行vm.swappiness=10,然后sysctl -p - 调低后,Swap 不会“消失”,而是等内存使用率超过阈值(比如 90%)才开始换出 —— 这才是合理行为,不是故障
实际配置中,最容易被跳过的环节是 swapon --show 验证和 swapon -a 测试。很多人改完 /etc/fstab 就以为万事大吉,结果重启发现 swap 没挂上,问题全卡在那一行配置的空格或路径拼写上。