什么是交换文件?

交换文件允许Linux将磁盘空间模拟作为内存,当你的系统物理内存耗尽时,系统便会将一部分内容存到交换空间用以释放内存。为更重要的进程提供,当内存闲置时系统便从磁盘的交换空间取回文件。传统上交换空间是一个独立的Swap分区,会在安装Linux的时候创建,但是这样的做法并不方便。
使用交换文件,你不需要再创建单独的分区,你只需要在Linux根文件目录下创建一个文件并告诉系统使用这个文件作为交换空间即可。
使用专用的交换分区,在许多情况下就和未使用LVM时管理磁盘一样,调整它在部分场景下这是不可能完成的;但是使用交换文件你可以在任何情况下对文件进行任意调整,有些时候还可以通过释放交换文件为转移文件处理本机存储空间告警提供一定的帮助。

检查交换空间

在Linux上你可以使用free命令来查看系统的物理内存以及交换空间

1
$ free -h

在此处,free命令告诉你了真实的交换空间大小,但是并未指出是交换文件还是交换分区;使用swapon命令来查看交换空间,会指出交换空间的分区或者文件地址.

1
2
3
$ swapon --show
NAME TYPE SIZE USED PRIO
/var/swapfile file 2G 0B -2

在这里我使用的是交换文件,如果你使用的是交换分区那么指向应该是:

1
2
3
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/nvme0n1p5 partition 2G 0B -2

/dev/nvme0n1p5仅供参考,具体使用fdisk -l查看分区信息。
如果在你的系统上并未挂载交换空间,那么swapon将不会输出任何信息。

在Linux上创建交换文件

如果你的系统上没有交换空间,或者你使用的是Linux桌面版系统,你需要使用睡眠电源管理等情况,你可以在系统上创建交换文件来完成这些需求。

步骤1 创建一个交换文件

首先第一步是创建一个新的交换文件,以下以创建4GB交换文件为例子:

1
$ sudo fallocate -l 4G /swapfile

在完成了交换文件的创建后,需要对文件的权限进行修改当;如果你创建完成后直接将此文件用于交换空间时,你可能会看到“不安全的权限0644, 建议0600”的警告。

1
$ sudo chmod 600 /swapfile

注意:
在这里交换文件的命名是没有限制的,遵循基本文件命名条件即可;同时在这里你可以任意选择交换文件的位置,根据具体需求使用或者直接存放于根目录;交换文件在数量上也没有限制,依旧是根据需求来使用。

步骤2 将新创建的文件标记为交换空间

你需要将此文件作为交换空间使用告诉操作系统,你可以使用mkswap工具完成这一个操作,使用命令:

1
$ sudo mkswap /swapfile

步骤3 启用交换文件

当你完成了步骤2时,你的系统已经知道了此文件可以作为交换空间使用,但是你还需要启用这个交换空间:

1
$ sudo swapon /swapfile

现在你可以开始检查交换空间是否成功启用了:

1
2
3
4
$ swapon --show

NAME TYPE SIZE USED PRIO
/swapfile file 4096M 0B -2

步骤4 让系统自动挂载交换文件为交换空间

虽然你完成了步骤3后交换空间已经可以使用,但是它依旧只是暂时的;在你重启系统后它将消失,你需要手动启用,所以现在要让系统自动帮你完成这个动作。
你可以将你创建的交换文件写入/etc/fstab来实现这个:
备份/etc/fstab,如果你刚开始学习Linux你应该考虑先备份这个文件。

1
$ sudo cp /etc/fstab /etc/fstab.bakup 

修改文件,在/etc/fstab文件末尾加入:

1
2
$ sudo vim /etc/fstab
/swapfile none swap sw 0 0

你可以使用以下命令:

1
$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

现在已经完成了,即使你重新启动后,它也不会消失让你需要手动启用。

在Linux上调整交换空间

要修改此前文件你需要先关闭交换空间的使用:

1
$ sudo swapoff /swapfile

在这里可以参考步骤1重新来重新制定/swapfile的大小大小。

删除交换文件

1
2
$ sudo swapoff /swapfile
$ sudo rm /swapfile

注意:如果你在此之前修改了/etc/fstab文件,请记得修改修改回来。