简介
在本实验中,你将学习在 Linux 中创建并启用交换文件这一重要的系统管理任务。当物理 RAM 不足时,这个过程可以增加系统的虚拟内存。你将实际使用基础命令行工具来有效管理系统资源,以灵活地替代创建专用交换分区。
你将完整实践整个流程:首先使用 swapon 命令查看当前交换空间;然后使用 dd 创建交换区域文件,使用 mkswap 将其格式化为交换空间,启用该文件,并配置 Linux 在系统重启后自动重新启用它。最后,你将验证新交换文件是否已成功配置并被系统识别。
使用 swapon 查看当前交换空间
在本步骤中,你将学习如何检查 Linux 系统当前的交换空间配置。交换空间是硬盘上的一部分空间。当物理内存(RAM)已用尽时,系统会将它用作虚拟内存。交换空间可以让系统运行超出物理 RAM 容量限制的应用程序。
首先使用 swapon 命令。这个工具用于指定分页和交换所使用的设备与文件。我们会配合 --show 选项使用它,以显示当前已启用交换设备的摘要。由于管理交换空间属于系统管理任务,因此需要使用 sudo 以 root 权限执行命令。
终端当前已经位于 ~/project 目录中。在终端执行以下命令:
sudo swapon --show
你会看到类似下面的输出。具体内容(例如 NAME 和 SIZE)可能因虚拟机的初始配置而不同。如果系统没有配置交换空间,该命令可能不会产生任何输出。
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:以 root 权限执行命令。dd:本次使用的命令行工具。if=/dev/zero:指定输入文件(input file)。/dev/zero是一个会持续生成空字符的特殊文件。of=swapfile:指定输出文件(output file)。该参数会在当前目录中创建名为swapfile的文件。bs=1M:将块大小(block size)设置为 1 MB。dd会以 1 MB 为一块读取和写入数据。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 并保护了它的权限。该文件已经可以由系统启用和使用,下一步将完成启用操作。
启用新的交换文件并使其持久化
你已经成功创建并准备好了 swapfile。它已经完成格式化并设置了正确的权限,但 Linux 内核还没有将其用作虚拟内存。在本步骤中,你将启用该交换文件,使系统可以使用它。
这次仍然使用 swapon 命令。第一步中,你配合 --show 选项查看了当前配置。这次,你将把 swapfile 的路径作为参数传给它,以启用该文件。
终端当前位于 ~/project 目录中。执行以下命令,启用新的交换空间:
sudo swapon swapfile
下面回顾该命令:
sudo:启用交换空间属于系统级操作,需要 root 权限,因此必须使用该命令。swapon:用于启用交换设备和交换文件的命令。swapfile:要启用的文件名称。由于你当前位于该文件所在的~/project目录中,因此不需要指定完整路径。
如果命令执行成功,不会产生任何输出。这是许多 Linux 命令的标准行为——没有错误消息通常就表示执行成功。
swapon 只会在当前启动周期内启用该文件。要让 Linux 在系统重启后自动启用它,请将包含交换文件绝对路径的条目添加到 /etc/fstab:
echo '/home/labex/project/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
这六个字段依次用于标识交换文件;由于交换空间没有挂载点,因此使用 none;指定 swap 类型和标准的 sw 选项;最后两个 0 用于禁用转储和文件系统检查。
现在,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)选项可以让输出更易读,以 MB(M)或 GB(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 命令启用它,并将其添加到 /etc/fstab,使 Linux 能够在系统重启后自动重新启用该文件。最后,你再次运行 swapon --show,验证新的交换文件已成功添加并处于启用状态,从而确认配置已更新。



