在 Linux 中创建和激活交换文件

CompTIACompTIABeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

引言

在本实验中,你将学习创建和激活 Linux 交换文件(swap file)这一重要的管理任务。此过程允许你增加系统的虚拟内存,当物理 RAM 不足时,这一点至关重要。你将获得使用基本命令行工具有效管理系统资源的实践经验,为创建专用交换分区提供了一种灵活的替代方案。

你将完成整个工作流程,首先学习如何使用 swapon 命令查看当前的交换空间。接下来,你将使用 dd 创建交换区域的文件,使用 mkswap 将其格式化为交换用途,然后激活它。最后,你将验证新的交换文件是否已成功配置并被系统识别。

使用 swapon 查看当前交换空间

在此步骤中,你将学习如何检查 Linux 系统上当前的交换空间配置。交换空间是硬盘的一部分,当物理内存(RAM)已满时,它被用作虚拟内存。这使得系统能够运行比仅靠物理 RAM 所能容纳的更多的应用程序。

首先,你将使用 swapon 命令,这是一个用于指定分页和交换设备的实用程序。我们将使用 --show 选项来显示活动交换设备的摘要。由于管理交换空间是一项管理任务,你需要使用 sudo 来以 root 权限执行该命令。

在你的终端中,它已位于 ~/project 目录,运行以下命令:

sudo swapon --show

你将看到类似以下的输出。详细信息,例如 NAMESIZE,可能会因你的虚拟机的初始配置而异。也有可能没有配置交换空间,在这种情况下,此命令将不产生任何输出。

NAME        TYPE      SIZE USED PRIO
/dev/loop12 partition   2G   0B   -2

让我们来分析一下输出:

  • NAME: 交换设备或文件的名称。在此示例中,它是一个 loop 设备(/dev/loop12)。
  • TYPE: 交换空间的类型,可以是 partition(分区)或 file(文件)。
  • SIZE: 交换空间的总大小。
  • USED: 当前正在使用的交换空间量。
  • PRIO: 交换空间的优先级。如果你有多个交换空间,优先级较高的那个将首先被使用。

通过执行此命令,你已成功审查了系统的当前交换配置。在接下来的步骤中,你将学习如何创建和激活一个新的交换文件,这是一种无需重新分区磁盘即可添加交换空间的灵活方法。

使用 dd 创建交换空间文件

在上一步中,你学习了如何查看现有的交换配置。现在,你将创建一个专用文件,该文件将用作新的交换空间。使用文件作为交换空间是一种灵活的方法,因为它不需要重新分区你的硬盘。

我们将使用 dd 命令,这是一个强大的数据复制和转换实用程序。它非常适合此任务,因为它可以通过读取一个特殊的系统设备 /dev/zero 来创建精确大小的文件,/dev/zero 是一个由空字符(零)组成的无限流。

要在当前目录(~/project)中创建一个名为 swapfile 的 250MB 文件,请执行以下命令。你需要 sudo,因为该文件最终将由系统管理。

sudo dd if=/dev/zero of=swapfile bs=1M count=250

让我们来分析一下这个命令:

  • sudo: 以 root 权限执行命令。
  • dd: 我们正在使用的命令行实用程序。
  • if=/dev/zero: 指定 input file(输入文件)。/dev/zero 是一个特殊的空文件,它产生一个空字符流。
  • of=swapfile: 指定 output file(输出文件)。这将在当前目录中创建一个名为 swapfile 的文件。
  • bs=1M: 将 block size(块大小)设置为 1 兆字节。dd 将以 1MB 的块进行读写。
  • count=250: 复制 250 个块。由于我们的块大小是 1M,这将创建一个 250 * 1M = 250MB 的文件。

运行命令后,你将看到确认操作成功的输出:

250+0 records in
250+0 records out
262144000 bytes (262 MB, 250 MiB) copied, 0.270222 s, 970 MB/s

你现在已成功创建了一个 250MB 的文件。在下一步中,你将格式化此文件,使其可被识别为交换空间,并为其设置适当的权限。

使用 mkswap 将文件格式化为交换空间

在上一步中,你创建了一个名为 swapfile 的文件,其中填充了零。但是,操作系统尚未将其识别为有效的交换区域。你需要为此目的专门格式化它。这时 mkswap 命令就派上用场了。

mkswap 命令在设备或文件中设置 Linux 交换区域。它会在文件中写入一个内核可以识别的特殊签名。

首先,让我们格式化你创建的 swapfile。在你的终端中,运行以下命令:

sudo mkswap swapfile

执行命令后,你将看到输出表明交换空间已设置好。系统将为你的新交换区域分配一个唯一的标识符(UUID)。你也可能会看到关于不安全权限的警告,我们将在下一步中解决这个问题。

mkswap: swapfile: insecure permissions 0644, fix with: chmod 0600 swapfile
Setting up swapspace version 1, size = 250 MiB (262139904 bytes)
no label, UUID=aabf0226-9f7b-47f5-9ad3-10248552795c

重要的安全提示: 交换文件可能包含你计算机内存中的敏感数据。出于安全原因,至关重要的是只有 root 用户才有权限读取和写入它。系统上的其他用户不应拥有任何访问权限。

要设置正确的权限,我们将使用 chmod 命令。我们将权限设置为 600,这赋予所有者(root)读写权限,并撤销其他所有人的所有访问权限。

运行以下命令来保护你的 swapfile

sudo chmod 600 swapfile

如果成功,此命令将不会产生任何输出。你现在已成功格式化 swapfile 并保护了其权限。它现在已准备好被系统激活和使用,你将在下一步中进行操作。

使用 swapon 激活新的交换文件

你已成功创建并准备好了 swapfile。它现在已格式化并具有正确的权限,但 Linux 内核尚未将其用作虚拟内存。在此步骤中,你将激活交换文件,使其可供系统使用。

为此,你将再次使用 swapon 命令。在第一步中,你使用了 --show 选项来查看当前配置。这次,你将提供 swapfile 的路径作为参数来启用它。

在你的终端中,位于 ~/project 目录,执行以下命令来激活你的新交换空间:

sudo swapon swapfile

让我们回顾一下这个命令:

  • sudo: 这是必需的,因为激活交换空间是一项需要 root 权限的系统级操作。
  • swapon: 用于启用设备和文件进行交换的命令。
  • swapfile: 你想要激活的文件的名称。由于你当前位于文件所在的 ~/project 目录,因此无需指定完整路径。

如果命令成功执行,它将不会产生任何输出。这是许多 Linux 命令的标准行为——没有消息就是好消息。

你的 swapfile 现在已激活,并被系统用作额外的虚拟内存。在最后一步中,你将验证新的交换空间是否已成功添加到系统的总内存资源中。

验证新的交换空间配置

恭喜!你已成功创建、格式化并激活了一个新的交换文件。在最后一步中,你将验证系统是否识别并已准备好使用此新资源。这将确认所有先前步骤均已正确完成。

让我们从使用本实验开始时使用的相同命令 swapon --show 开始。现在运行它应该会显示一个活动的交换空间更新列表,包括你刚刚添加的 swapfile

在你的终端中,执行以下命令:

sudo swapon --show

输出现在将显示两个条目:原始交换分区(如果存在)和你的新交换文件。请注意 /home/labex/project/swapfile 的新行。

NAME                         TYPE      SIZE USED PRIO
/dev/loop12                  partition   2G   0B   -2
/home/labex/project/swapfile file      250M   0B   -3

如你所见,系统现在识别了一个 file 类型的交换空间,大小为 250M。它还被分配了一个优先级(PRIO)。内核将首先使用优先级较高的交换空间。

另一个用于检查内存和交换空间使用情况的有用命令是 free。使用 -h--human)选项可以通过以兆字节(M)或千兆字节(G)为单位显示大小来使输出更易于阅读。

运行 free -h 命令:

free -h

你将看到系统内存的摘要。请密切关注 Swap 行。

               total        used        free      shared  buff/cache   available
Mem:           3.5Gi       608Mi       732Mi        16Mi       2.2Gi       2.7Gi
Swap:          2.2Gi          0B       2.2Gi

Swap 行上的 total 值现在应该反映了原始交换空间和你新的 250MB 文件的组合大小。例如,如果你最初有 2G 的交换空间,那么新的总计约为 2.2G。

你已成功在你的 Linux 系统上添加并验证了一个新的交换文件,为它提供了更多的虚拟内存来使用。

总结

在本实验中,你学习了如何创建和激活交换文件,为 Linux 系统添加虚拟内存。你首先使用 sudo swapon --show 命令查看现有的交换空间配置,以了解系统虚拟内存的当前状态并解读其输出。

在初步查看之后,你继续使用 dd 命令创建了一个新的交换文件,以分配所需的磁盘空间。然后,你使用 mkswap 将该文件格式化为交换用途,并使用 swapon 命令激活它,使其可立即供系统使用。最后,你通过再次运行 swapon --show 来验证新交换文件是否已成功添加并处于活动状态,从而确认了更新后的配置。