Swapfile 指北

swapfile 和 swap 是同种东西,都是虚拟内存。不过各有优劣,需要按照自己的需求选择。

本文不提供创建 swapfile 和 swap 分区的教程,但是提供你可能会用到的文档链接

概念

这个东西在 Windows 和 Linux 上的叫法其实不太一样,但是功能是一致的

  • Windows 和 macOS 上可能叫做交换文件,虚拟内存
  • Linux 上一般只叫做 swap 或者交换内存

下文全部叫做交换内存或者 swap

使用分区?还是使用文件?

使用分区可以在你有一个十分高速的磁盘上将整个磁盘都规划为交换内存,在这种情况下优势是:没有文件系统的额外开销,内核是直接将硬盘作连续的内存空间使用的

但是有些时候你会需要更加灵活的操作,这个时候你需要使用一些文件系统上的开销,创建一个 swap 文件即可

下表可以一眼看出优势和劣势

swap 方案优势劣势
分区性能最好不灵活
文件灵活性能稍差

分区方案

常见于自己电脑安装 Linux 发行版时发行版默认创建的 2GB 大小 swap 分区

这种 swap 方案往往是发行版自行管理的1,并且推荐至少有 2GB 大小的 swap 分区

不过也可以自己来挂载额外的一块 swap 分区,这种分区一般推荐是在单独的一块高速硬盘上

文件方案

这种方案十分灵活,比如你可以在根目录下创建一个 .swapfile,并且把它使用 mkswap 命令格式化成为一个 swapfile

接下来就出现了两个分支了2

  1. 通过 swapon3 命令临时挂载起来作为 swap 使用
  2. 写入到 /etc/fstab 使得系统可以在开机的时候自动挂载成为 swap

备选

什么,备选方案?有!

你想一下,这个世界上存在一些原地压缩与解压的算法比如 lzolz4,他们不消耗内存并且可以压缩数据

内存也是数据,为什么不能压缩?

那我使用这些压缩算法压缩内存不就变相扩大了内存?好聪明!

但是这种操作的代价就是一旦进入 swap 了会消耗更多的 CPU 资源,这种技术就叫做 zram

很多发行版提供了对应的工具比如 zram-tools

Footnotes

  1. Debian 论坛:swap 分区

  2. DebianWiki

  3. swapon 命令的 man 手册