1. 为什么 Ubuntu 18.04 用户突然开始关心 swap 空间?
“Ubuntu 18.04 默认不创建 swap 分区”——这句话在当年的 Linux 社区里像一颗小石子,没激起太大水花,但三年后它成了无数人深夜重启服务器时的共同困惑。我第一次遇到这个问题,是在给一台 2GB 内存的旧笔记本装完 Ubuntu 18.04 LTS 后,运行 Chrome + VS Code + Docker 容器,系统直接卡死在光标闪烁状态, top 命令都打不开。 free -h 输出里 Swap: 那一行是空的,不是 0B ,是彻底消失——连占位符都没有。
这背后不是疏忽,而是 Canonical 的一次明确设计转向:他们判断,现代 SSD 寿命与 swap 频繁写入存在冲突,而内存价格持续走低,多数新设备已配 4GB+ RAM;同时,ZRAM(压缩内存)作为更轻量、更快速的替代方案,在桌面场景中表现足够稳定。于是 Ubuntu 18.04 安装器默认跳过了 swap 分区创建,只在安装介质启动时临时启用 ZRAM。
但现实远比设计复杂。ZRAM 是把一部分 RAM 压缩后当 swap 用,本质是“用内存换内存”,它缓解了磁盘 I/O,却无法解决物理内存耗尽的根本问题。一旦你运行内存密集型任务(比如编译大型 C++ 项目、训练轻量 PyTorch 模型、用 GIMP 处理 100MB 的 TIFF 图层),ZRAM 的压缩率会急剧下降,CPU 占用飙升,系统响应反而更慢。这时,一块真正落盘的 swap 空间,就成了救命稻草——它不快,但它稳;它不抢 CPU,但它能兜底。
你搜到的那些热词:“linux让系统使用swap”、“如何在外挂的硬盘中扩展swap”,恰恰印证了这个断层:官方默认方案在特定场景下失效,用户被迫回归传统机制。这不是倒退,而是对真实工作负载的务实妥协。尤其当你手头只有一台 2015 年的老 ThinkPad,加内存条要拆机、换 SSD 成本高,那么在现有硬盘上划出 2GB 空间做 swap,就是成本最低、见效最快的系统稳定性加固手段。
提示:别被“swap 已过时”的论调带偏。Linux 内核至今将 swap 视为内存管理的 核心安全阀 。
vm.swappiness=60是默认值,不是摆设;/proc/sys/vm/swappiness被设为 0 时,内核仍会在 OOM(Out of Memory)前尝试 swap out 不活跃页——只是策略更保守。它的价值不在日常流畅度,而在极端压力下的 可预测性 。
2. 两种实现路径的本质差异:fallocate vs mkswap + dd
当你执行 sudo fallocate -l 2G /swapfile ,你其实跳过了文件系统的底层细节,直奔结果。 fallocate 是一个“元数据操作”:它告诉 ext4 文件系统,“请预留 2GB 连续空间给这个文件,但不用真的往磁盘块里填零”。整个过程毫秒级完成,无论磁盘多慢。这是它快的根本原因。
而 dd if=/dev/zero of=/swapfile bs=1M count=2048 是“物理写入操作”:它真的一字节一字节地把 2GB 零写进磁盘。在机械硬盘上,这可能耗时 30 秒以上;在老旧 USB 3.0 移动硬盘上,甚至超过 2 分钟。更糟的是,如果磁盘有坏道或文件系统碎片严重, dd 可能中途报错,而 fallocate 通常不会。
但 fallocate 有个隐藏前提:它依赖文件系统支持 FALLOC_FL_KEEP_SIZE 标志。ext4、XFS、Btrfs 都支持,但如果你在 FAT32 或 NTFS(通过 ntfs-3g 挂载)分区上操作, fallocate 会直接失败,报错 fallocate: fallocate failed: Operation not supported 。这时候, dd 就是唯一选择。
我们来实测对比一下:
| 操作 | 执行命令 | 耗时(SSD) | 耗时(HDD) | 是否需要填充零 | 文件系统兼容性 |
|---|---|---|---|---|---|
fallocate |
fallocate -l 2G /swapfile |
< 0.01s | < 0.01s | 否 | ext4/XFS/Btrfs |
dd |
dd if=/dev/zero of=/swapfile bs=1M count=2048 |
~1.2s | ~28s | 是 | 全平台通用 |
但注意: fallocate 创建的文件,其内容是“未定义”的。虽然 swap 机制本身不关心文件内容(它只用文件大小和位置),但某些严格的安全审计策略(如 CIS Ubuntu Benchmark)会要求 swap 文件必须用随机数据初始化,以防止从旧磁盘块中恢复敏感信息。此时,
220



被折叠的 条评论
为什么被折叠?



