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

时间:2020-01-09 10:37:54  来源:igfitidea点击:

本教程讨论Linux中交换文件的概念,使用原因及其相对于传统交换分区的优势。我们将学习如何创建交换文件或者调整交换文件的大小。

在Linux中什么是交换文件?

交换文件允许Linux将磁盘空间模拟为RAM。当系统开始用尽RAM时,它将交换空间用于交换RAM的某些内容并将其交换到磁盘空间。这样可以释放RAM,以服务于更重要的进程。当RAM再次空闲时,它将交换磁盘中的数据。

传统上,交换空间用作磁盘上的单独分区。安装Linux时,我们将创建一个单独的分区,仅用于交换。但是近年来这种趋势已经改变。

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

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

默认情况下,最新版本的Ubuntu和其他一些Linux发行版已开始使用交换文件。即使我们不创建交换分区,Ubuntu也会自行创建大约1 GB的交换文件。

让我们看看更多有关交换文件的信息。

在Linux中检查交换空间

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

我们可以在Linux中使用free命令对其进行检查。就我而言,我的Dell 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系统该文件将用作交换空间。我们可以使用mkswap工具执行此操作。

sudo mkswap /swapfile

我们应该看到如下输出:

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

步骤3:启用交换文件

现在系统知道文件swapfile可以用作交换空间。但是还没有完成。我们需要启用交换文件,以便系统可以开始使用此文件作为交换文件。

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桌面的默认swappiness为60,而服务器为1. 我们可以使用以下命令检查swappiness:

cat /proc/sys/vm/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