草稿待审:Swap 分区创建步骤(fdisk/parted、分区类型 82)基于文档核查,尚未在 WSL 上实际执行;Swap 文件创建、mkswap、swapon、swappiness 调整、权限修复已在 WSL2 Ubuntu 24.04 验证。
Swap 空间作为物理内存的扩展,在内存不足时承接冷页,避免进程被 OOM Killer 终止。
查看现有 Swap 状态
在修改前先确认当前 Swap 使用情况:
free -h
swapon --show
cat /proc/swaps
free -h的 Swap 行显示总量和已用量swapon --show列出当前活跃的 Swap 分区或文件 [2]/proc/swaps提供同样的原始信息
方案一:新建 Swap 分区
Swap 分区是传统方案,适合磁盘有未分配空间的服务器 [1]。
1. 创建新分区并设置分区类型为 Linux swap(fdisk 下类型 82,parted 下 set <num> swap on) 2. 初始化分区:
mkswap /dev/sdxY
3. 立即启用:
swapon /dev/sdxY
4. 写入 /etc/fstab 持久化 [3]:
UUID=<交换分区UUID> none swap sw 0 0
UUID= 比设备路径更稳定,可通过 blkid /dev/sdxY 获取。
方案二:新建 Swap 文件
Swap 文件不需要重新分区,适合云主机和测试环境。
1. 确认可用空间后创建文件。dd 配合 /dev/zero 创建的是连续零填充文件,不存在空洞,是兼容性最广的方式 [4]:
dd if=/dev/zero of=/swapfile bs=1MiB count=4096 conv=fsync status=progress
fallocate 预分配速度更快,但在 ext4 上实际可用;某些文件系统(如 XFS)或内核版本下 fallocate 创建的文件可能被识别为有空洞而被 swapon 拒绝 [4]。
2. 设置权限为 0600,防止其他用户读取该文件:
chmod 0600 /swapfile
mkswap 和 swapon 都会对 0644 权限发出警告,但不会阻止启用 [1]。
3. 初始化为 Swap 区域并启用:
mkswap -f /swapfile
swapon /swapfile
4. 写入 /etc/fstab 持久化 [3]:
/swapfile none swap sw 0 0
调整 Swappiness 和优先级
vm.swappiness 控制内核将内存页换出到 Swap 的倾向,范围 0–100,默认值 60 [5]。
临时调整:
sysctl vm.swappiness=10
sysctl 用于临时或持久化内核参数 [6]。持久化需在 /etc/sysctl.conf 或 /etc/sysctl.d/99-swap.conf 中添加:
vm.swappiness=10
多个 Swap 区域可通过 swapon -p <优先级> 或 fstab 中的 pri=<N> 调整使用顺序,数值越大越优先 [2]。
排错速查表
| 现象 | 原因 | 处理 |
|---|---|---|
swapon: /swapfile: insecure permissions |
文件权限非 0600 |
chmod 0600 /swapfile 后重试 |
swapon: /swapfile: appears to have holes |
文件含空洞(常见于 fallocate 或 truncate 创建) |
用 dd if=/dev/zero 重建 |
swapon /dev/sdxY: device is busy |
分区正在被使用或内核持有 | 先 swapoff,或重启后操作 |
| Swap 开机不生效 | fstab 格式错误或 UUID 不对 | 用 blkid 核对 UUID |
回滚与清理
禁用 Swap 文件并删除:
swapoff /swapfile
rm -f /swapfile
sed -i '/\/swapfile none swap/d' /etc/fstab
禁用 Swap 分区并标记为普通分区:
swapoff /dev/sdxY
mkswap -f /dev/sdxY # 仅清除 swap 签名,不破坏数据
附录
- 测试机:WSL2 Ubuntu 24.04
- 内核:Linux 6.6.114.1-microsoft-standard-WSL2
- 测试日期:2026-11-04
- 观察结果:
dd if=/dev/zero创建 512M 文件耗时约 0.5s,mkswap报权限警告但成功,swapon报权限警告但成功启用,swapon --show确认文件型 Swap 活跃,默认vm.swappiness = 60。
常见问题
- 问:Swap 文件性能比分区差吗?
在 NVMe SSD 上差异极小;机械硬盘上两者都慢于内存,Swap 文件更灵活。
- 问:2GB 内存配多少 Swap 合适?
传统建议是 2 倍内存,实际取决于休眠需求。日常桌面 2–4GB 足够,服务器可按负载调整。
- 问:Swap 能代替内存升级吗?
不能。Swap 延迟在毫秒级,内存是纳秒级。Swap 只能延缓 OOM,不能解决内存不足的卡顿问题。
- 问:WSL 能创建 Swap 文件吗?
可以,但 WSL 已有基于虚拟磁盘的内置 Swap,手动添加的 Swap 文件优先级为 -3,低于内置的 -2,实际使用率极低,主要用于测试流程。
- 问:
mkswap --file有什么用?
util-linux 2.41+ 在 Btrfs 上会自动设置 nocow 属性,避免写时复制开销;ext4/XFS 上不影响 [1]。
参考资料
- [1] mkswap(8) — util-linux — Debian trixie(mkswap)
- [2] swapon(8) – Linux manual page(swapon)
- [3] fstab(5) — mount — Debian trixie(fstab)
- [4] swapon(8) — mount — Debian testing(holes)
- [5] proc_sys_vm(5) – Linux manual page(proc_vm)
- [6] sysctl(8) — procps — Debian trixie(sysctl)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。