如何在 Linux 上创建和使用交换文件

本教程讨论了 Linux 中交换文件的概念、为什么使用它以及它相对于传统交换分区的优势。 您将学习如何创建交换文件或调整其大小。

Linux 中的交换文件是什么?

交换文件允许 Linux 将磁盘空间模拟为 RAM。 当您的系统开始耗尽 RAM 时,它会使用交换空间并将 RAM 的一些内容交换到磁盘空间。 这可以释放 RAM 以服务于更重要的进程。 当 RAM 再次空闲时,它会从磁盘交换回数据。 我建议阅读这篇文章以了解有关 Linux 上交换的更多信息。

传统上,交换空间用作磁盘上的单独分区。 安装 Linux 时,您会创建一个单独的分区,仅用于交换。 但这种趋势近年来发生了变化。

使用交换文件,您不再需要单独的分区。 您在根目录下创建一个文件并告诉您的系统将其用作交换空间。

使用专用交换分区,在许多情况下调整交换空间的大小是一场噩梦,也是一项不可能完成的任务。 但是使用交换文件,您可以根据需要调整它们的大小。

最新版本的 Ubuntu 和其他一些 Linux 发行版已经启动 默认使用交换文件. 即使您不创建交换分区,Ubuntu 也会自己创建一个大约 1 GB 的交换文件。

让我们看更多关于交换文件的内容。

检查 Linux 中的交换空间

在开始添加交换空间之前,最好检查一下系统中是否已有可用的交换空间。

你可以用 Linux 中的自由命令. 就我而言,我的戴尔 XPS 有 14GB 的交换空间。

free -h               total        used        free      shared  buff/cache   available Mem:           7.5G        4.1G        267M        971M        3.1G        2.2G Swap:           14G          0B         14G

free 命令为您提供交换空间的大小,但它不会告诉您它是真正的交换分区还是交换文件。 swapon 命令在这方面更好。

swapon --show NAME           TYPE       SIZE USED PRIO /dev/nvme0n1p4 partition 14.9G   0B   -2

如您所见,我有 14.9 GB 的交换空间,它位于一个单独的分区上。 如果它是交换文件,则类型将是文件而不是分区。

swapon --show NAME      TYPE SIZE USED PRIO /swapfile file   2G   0B   -2

如果您的系统上没有交换空间,它应该显示如下内容:

free -h               total        used        free      shared  buff/cache   available Mem:           7.5G        4.1G        267M        971M        3.1G        2.2G Swap:           0B          0B         0B

swapon 命令不会显示任何输出。

在 Linux 上创建交换文件

如果您的系统没有交换空间,或者您认为交换空间不够,您可以在 Linux 上创建交换文件。 您也可以创建多个交换文件。

让我们看看如何在 Linux 上创建交换文件。 我在本教程中使用的是 Ubuntu 18.04,但它也应该适用于其他 Linux 发行版。

步骤 1:制作新的交换文件

首先,创建一个具有所需交换空间大小的文件。 假设我想为我的系统添加 1 GB 的交换空间。 使用 fallocate 命令创建大小为 1 GB 的文件。

sudo fallocate -l 1G /swapfile

建议只允许 root 读写交换文件。 当您尝试将此文件用于交换区域时,您甚至会看到诸如“建议不安全权限 0644、0600”之类的警告。

sudo chmod 600 /swapfile

请注意,交换文件的名称可以是任何名称。 如果你需要多个交换空间,你可以给它任何合适的名字,比如 swap_file_1、swap_file_2 等。它只是一个具有预定义大小的文件。

第 2 步:将新文件标记为交换空间

您需要告诉 Linux 系统该文件将用作交换空间。 你可以这样做 交换 工具。

sudo mkswap /swapfile

你应该看到这样的输出:

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a

步骤 3:启用交换文件

现在您的系统知道文件交换文件可以用作交换空间。 但它还没有完成。 您需要启用交换文件,以便您的系统可以开始将此文件用作交换。

sudo swapon /swapfile

现在,如果您检查交换空间,您应该会看到您的 Linux 系统识别并使用它作为交换区域:

swapon --show NAME       TYPE   SIZE USED PRIO /swapfile  file 1024M   0B   -2

第 4 步:使更改永久生效

到目前为止,您所做的一切都是暂时的。 重新启动系统,所有更改都将消失。

您可以通过将新创建的交换文件添加到 /etc/fstab 文件来使更改永久化。

在对 /etc/fstab 文件进行任何更改之前进行备份总是一个好主意。

sudo cp /etc/fstab /etc/fstab.back

现在您可以将以下行添加到 /etc/fstab 文件的末尾:

/swapfile none swap sw 0 0

您可以使用命令行文本编辑器手动完成,也可以使用以下命令:

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

现在你已经准备好了一切。 即使在您重新启动 Linux 系统后,您的交换文件也将被使用。

调整交换性

swappiness 参数确定应使用交换空间的频率。 swappiness 的取值范围是 0 到 100。值越大,表示交换空间的使用频率越高。

Ubuntu 桌面中的默认交换量为 60,而在服务器中为 1。您可以使用以下命令检查交换量:

cat /proc/sys/vm/swappiness

为什么服务器应该使用低swappiness? 因为交换比 RAM 慢并且为了获得更好的性能,应该尽可能多地利用 RAM。 在服务器上,性能因素至关重要,因此交换性尽可能低。

您可以使用以下 systemd 命令即时更改 swappiness:

sudo sysctl vm.swappiness=25

不过,这只是暂时的。 如果要使其永久化,可以编辑 /etc/sysctl.conf 文件并在文件末尾添加 swappiness 值:

vm.swappiness=25

在 Linux 上调整交换空间的大小

有几种方法可以在 Linux 上调整交换空间的大小。 但在你看到它之前,你应该学习一些关于它的东西。

当您要求系统停止使用交换文件作为交换区域时,它会将所有数据(准确地说是页面)传输回 RAM。 因此,在您换掉之前,您应该有足够的空闲 RAM。

这就是为什么一个好的做法是创建并启用另一个临时交换文件。 这样,当您交换掉原始交换区时,您的系统将使用临时交换文件。 现在您可以调整原始交换空间的大小。 您可以手动删除临时交换文件或保持原样,它将在下次启动时自动删除。

如果您有足够的可用 RAM 或创建了临时交换空间,请交换原始文件。

sudo swapoff /swapfile

现在您可以使用 fallocate 命令来更改文件的大小。 假设您将其更改为 2 GB:

sudo fallocate -l 2G /swapfile

现在再次将文件标记为交换空间:

sudo mkswap /swapfile

并再次打开交换:

sudo swapon /swapfile

您也可以选择同时拥有多个交换文件。

在 Linux 中删除交换文件

您可能有自己的理由不在 Linux 上使用交换文件。 如果要删除它,该过程类似于您刚刚在调整交换大小时看到的过程。

首先,确保您有足够的可用 RAM。 现在交换文件:

sudo swapoff /swapfile

下一步是从 /etc/fstab 文件中删除相应的条目。

最后,您可以删除文件以释放空间:

sudo rm /swapfile

你换吗?

我想你现在对 Linux 中的交换文件概念有了很好的理解。 您现在可以轻松创建交换文件或根据需要调整它们的大小。

如果您对此主题有任何补充或有任何疑问,请在下面发表评论。