别再建 swap 分区了,改用 swap 文件
Stop making swap partitions–use swap files instead
swap 文件在性能上早已与 swap 分区无异,这一事实已存在超过 20 年,但许多 Linux 发行版在安装时仍默认推荐分区方案。swap 文件在创建、调整大小、移除和修改方面都更加灵活便捷,无需重新分区即可动态管理。无论是使用 fallocate 快速分配空间,还是通过 mkswap 格式化并挂载,整个过程简单高效。对于 btrfs 用户,甚至可以直接使用 mkswapfile 命令一键完成。与其固守过时的分区习惯,不如拥抱更现代、更灵活的 swap 文件方案,让系统管理更轻松。
swap 文件在性能特征上与 swap 分区完全一致,这一事实已存在超过 20 年。
HN 评论区
56- weinzierl
曾经有一段时间,不仅操作系统为了获得最佳性能(swap 文件)需要使用分区,应用程序也是如此。
90 年代末,数据库通常被配置为将数据直接存储在原始分区上。还有其他类型的应用程序也需要分区,但在数据库领域这确实非常普遍。
这种做法真正消亡,是因为操作系统开始允许应用程序绕过正常的文件系统缓存。
在 Linux 中,这就是 O_DIRECT。有趣的是,Linux 加入这一行列非常晚,因为 Linus 对此极度反感。当然,他绝不是唯一一个持此观点的人,至少 Alan Cox 和 Andrew Morton 都持怀疑态度,其他人也是。Linus 的态度尤其极端,那场特定的讨论很可能就是人们用来反驳他的绝大多数引用的单一来源。
- ducktective
有点跑题,但有人知道为什么到了 2026 年,在 Debian 13 上,当某个进程耗尽内存时,我的机器仍然会挂起吗?
真的没有一个更高优先级的内核进程来防止系统完全冻结,并在发生这种情况时向肇事进程发送 SIGKILL 吗?
- williebeek
还记得发行版曾经使用复杂的分区方案吗?一个给 /root,一个给 /var,一个给 /home,再加上一个 swap 分区等等。这始终是个糟糕的选择,因为总有一个会达到 99%,而其他的却徘徊在 10% 以下。
对于 swap,最好的建议是在你的台式机上禁用它,除非内存小于 8GB。真的,我从未需要过它,你大概率也不需要。
- cfstras
swap 文件会让配置休眠变得稍微复杂一些——在大多数情况下,该文件必须是连续的,例如,你在分配后必须对其进行一次碎片整理。
然后,你需要告诉引导加载程序该文件在分区上的字节偏移量。
- Kim_Bruning
凡事都有例外。比如在 zfs 上就要小心这条建议。
与此同时,zswap(与 zfs 无关)是免费的性能提升。难道所有以 'z' 开头的东西都必须很酷吗?