在 Linux 中创建并启用交换文件

CompTIABeginner
立即练习

介绍

在本实验中,你将学习如何在 Linux 中创建并启用交换文件(Swap File),这是一项至关重要的系统管理任务。当物理内存(RAM)不足时,此过程可以让你增加系统的虚拟内存。你将通过实践掌握用于有效管理系统资源的基础命令行工具,这为创建专用的交换分区提供了一种灵活的替代方案。

你将体验完整的操作流程:首先使用 swapon 命令查看当前的交换空间状态;接着使用 dd 创建一个用于交换区域的文件;随后使用 mkswap 将其格式化为交换格式并激活它。实验最后,你将验证新的交换文件是否已成功配置并被系统识别。

这是一个引导实验,提供分步指令帮助你学习和练习。请仔细遵循说明完成每个步骤并获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 100%。它在学习者中获得了 99% 的好评率。

使用 swapon 查看当前交换空间

在这一步中,你将学习如何检查 Linux 系统当前的交换空间配置。交换空间是硬盘驱动器上的一块区域,当物理内存(RAM)存满时,它会被用作虚拟内存。它允许系统运行比物理内存容量更多的应用程序。

首先,你将使用 swapon 命令,这是一个用于指定分页和交换设备及文件的工具。我们将配合 --show 选项来显示活动交换设备的摘要。由于管理交换空间属于管理级任务,你需要使用 sudo 以根用户(root)权限执行该命令。

在你的终端中(当前已处于 ~/project 目录),运行以下命令:

sudo swapon --show

你将看到类似下方的输出。具体的细节(如 NAMESIZE)可能会根据你虚拟机的初始配置而有所不同。如果系统未配置任何交换空间,该命令将不会产生任何输出。

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

让我们解析一下输出内容:

  • NAME:交换设备或文件的名称。在本例中,它是一个回环设备(/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:以根用户权限执行命令。
  • dd:我们正在使用的命令行工具。
  • if=/dev/zero:指定输入文件(input file)。/dev/zero 是一个产生零值流的特殊文件。
  • of=swapfile:指定输出文件(output file)。这将在当前目录下创建一个名为 swapfile 的文件。
  • bs=1M:将块大小(block size)设置为 1MB。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:这是必需的,因为激活交换空间是需要根用户权限的系统级操作。
  • 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

如你所见,系统现在识别出了一个大小为 250M 的文件(file)类型交换空间。它还被分配了一个优先级(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 验证了新交换文件已成功添加并处于活动状态,确认了配置的更新。