绝大多数现代linux服务器(尤其是云主机)用fallocate创建/swapfile即可,快、安全、易调整;仅i/o延迟极度敏感场景才需独立swap分区。

绝大多数现代 Linux 服务器(尤其是云主机)根本不需要独立 swap 分区,用 fallocate 创建一个 /swapfile 就够了——快、安全、可随时缩放;只有 I/O 延迟极度敏感的数据库或高负载物理服务器才值得上分区。
为什么优先用 fallocate 而不是 dd
dd 会真实写零,耗时长、在 SSD 上还可能触发写放大;fallocate 是原子操作,瞬间分配稀疏文件,不占 I/O,也不磨损磁盘。
- 成功执行:
fallocate -l 4G /swapfile - 若报错
Operation not supported(常见于 XFS 某些挂载选项、NFS 或旧 ext2),退回到:dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress - 别把
/swapfile放在/tmp、/var/tmp或 tmpfs 挂载点下——这些目录实际不落盘,swap 会静默失效 - 路径必须是根文件系统下的普通文件,不能是符号链接、bind mount 或容器卷
swapon 失败的三个必查点
权限不对、没格式化、zswap 已抢占,这三者漏掉任意一个都会导致 swapon: /swapfile: swapon failed: Invalid argument 或无提示失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 设权限:
chmod 600 /swapfile(mkswap和swapon都会拒绝非 600 权限) - 格式化:
mkswap /swapfile(不是mkfs.ext4,也不是重复执行) - 检查并禁用 zswap:
lsmod | grep zswap,若输出非空,先运行:sudo modprobe -r zswap
/etc/fstab 怎么写才不会开机卡住
写错 fstab 是最常导致系统启动卡在 initramfs 的原因。错误包括:多空格、少空格、none 写成 swap、用 defaults 替代 sw。
- 正确条目(严格四字段,单空格分隔):
/swapfile none swap sw 0 0 -
none是固定关键字,不是路径;sw是 swap 专用挂载选项,defaults会带入relatime等无关行为,不安全 - 推荐用 UUID(更可靠):
sudo blkid /swapfile复制 UUID,写成:UUID=xxxx-xxxx-xxxx-xxxx none swap sw 0 0 - 写完立刻验证:
sudo swapon --verify(报错就别重启),再试:sudo swapoff -a && sudo swapon -a
vm.swappiness 设多少才算合理
它不是“开/关 swap”,而是控制内核“多早开始换出不活跃页”。默认 60 对服务器太激进,容易把刚释放的干净页反复换出换入,徒增 I/O。
- 生产环境 Web/DB/容器服务建议设为
10:sudo sysctl vm.swappiness=10 - 永久生效:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p -
swappiness=0≠ 禁用 swap:它只是让内核坚持到 OOM killer 启动前最后一刻才换出;但休眠(hibernate)会失效 - Kubernetes 节点通常要求
swappiness=0,否则kubelet可能报Node is under pressure
真正容易被忽略的是:Swap 文件所在分区的剩余空间必须始终大于 Swap 大小——swapon 成功不代表运行中安全,一旦磁盘写满,swap 会静默降级,OOM 风险陡增。










