介绍
交换分区是 Linux 中的一项功能,可提供虚拟内存空间和多种好处。它允许操作系统有效地处理内存需求。因此,交换分区提高了系统稳定性、响应能力和繁重的工作负载处理能力。
本指南将探讨交换分区及其优缺点,并概述在 Linux 系统上创建和管理交换分区的步骤。
先决条件
- 运行 Linux 的系统。
- 具有 root 权限的帐户。
- 硬盘上的可用空间。
什么是交换分区?
交换分区是硬盘驱动器的一部分,用作交换内存,即 RAM 的溢出空间。使用交换分区旨在使计算机比仅使用 RAM 更有能力处理内存请求。
当 RAM 开始填满时,操作系统会将不太常用的进程或数据从 RAM 移动到交换分区。底层机制是交换或分页,它使用交换分区作为虚拟内存。当没有足够的物理 RAM 来保存所有当前活动的数据和程序时,该机制会扩展可用内存。
尽管使用交换分区听起来像是一种增加可用内存量的简单方法,而无需使用更多 RAM 升级计算机,但事实并非如此。有一些限制和准则,下面将对此进行说明。
使用交换分区的好处
交换分区在 Linux 或其他类 Unix 操作系统中提供了多种好处。使用交换分区的一些优点是:
- 虚拟内存扩展。交换空间用作物理内存 (RAM) 的扩展。当RAM被充分利用时,操作系统会暂时将不太频繁访问的数据存储在交换空间中。这样做会增加系统的虚拟内存,允许用户同时运行更多应用程序。
- 提高了系统稳定性。如果系统用完了物理RAM,它可能会变得不稳定甚至崩溃。交换分区通过在物理内存过载时提供安全网来防止这种情况。
- 多任务处理。交换分区允许用户同时运行更多应用程序,而不会遇到因内存不足而导致的减速或崩溃。此功能对于具有繁重工作负载的服务器和系统特别有用。
- 休眠支持。许多操作系统(包括 Linux 和 Windows)在机器处于休眠状态时使用交换分区来存储 RAM 的内容。休眠允许用户关闭机器电源,然后从中断的地方继续工作。
- 没有内存不足 (OOM) 情况。如果进程占用过多内存,则具有交换空间可以防止 OOM 情况。操作系统将不太重要的数据交换到交换分区,以允许关键系统进程继续运行。
- 紧急恢复。交换分区在内核崩溃或崩溃时可能会有所帮助。交换分区捕获内存转储,这对于诊断崩溃原因和故障排除非常有价值。
- 兼容性。各种操作系统都支持交换分区,使其成为可靠且广泛使用的内存管理解决方案。
使用交换分区的缺点
交换分区提供了许多好处,但如果过度使用,则有缺点和注意事项。潜在的缺点是:
- 磁盘空间使用情况。交换分区会占用一部分磁盘空间,这在存储容量有限的系统中很不方便。
- 性能较慢。性能下降是因为读取和写入磁盘的速度明显慢于访问 RAM 中的数据。过度交换(抖动)会降低系统性能。
- 椎间盘磨损。固态硬盘 (SSD) 对每个存储单元的写入周期有限。频繁更换会增加 SSD 的磨损,从而缩短其使用寿命。在传统硬盘驱动器 (HDD) 上,磁盘磨损问题较少。
- 资源使用效率低下。在某些情况下,交换分区可以掩盖与物理 RAM 不足相关的问题。虽然解决方案是添加更多 RAM 或优化软件,但严重依赖交换空间会导致性能下降。
- 复杂的管理。管理交换分区可能比管理交换文件更复杂。在系统设置或扩展过程中,需要手动创建和管理分区,这不如配置交换文件那么人性化。
- 碎片化。随着时间的流逝,交换分区变得碎片化,从而降低系统性能。当数据从交换空间中写入和删除时,会发生碎片。
- 灵活性有限。更改交换分区的大小可能需要调整系统分区的大小,甚至重新配置整个存储设置,这可能既耗时又有风险。
- 潜在的安全风险。来自正在运行的进程的敏感数据最终可能会进入交换空间。如果交换空间未正确加密,则存在未经授权访问磁盘的安全风险。
要缓解这些缺点,请遵循使用交换分区的一般准则,以最大程度地减少交换,并根据特定的系统要求和约束创建分区。
如何检查/查找交换分区
有几种方法可以检查 Linux 交换分区大小和使用情况:
swapon 命令
使用 swapon
命令激活交换分区或显示有关现有分区的详细信息。请按照以下步骤操作:
1. 打开终端 (Ctrl + Alt + T)。
2. 运行以下命令:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>swapon --show</code></span></span>
输出显示交换空间的路径、交换类型(分区或文件)、大小和当前使用的交换量。“优先级”列确定在存在多个交换空间的情况下交换数据时使用交换设备的顺序。
在上面的示例中,交换分区仍未配置,因此磁盘上只有一个交换文件。
检查 /proc/swaps 文件
/proc/swaps 文件包含交换空间信息及其利用率。使用 cat 命令查看文件。跑:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>cat /proc/swaps</code></span></span>
输出与 swapon
命令的输出相同。
free 命令
free 命令提供有关系统中内存使用情况的信息,包括虚拟内存。运行以下命令:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>free -m</code></span></span>
输出显示 RAM 和交换空间,包括大小、已用内存、可用内存等。
top 或 htop 命令
top 命令显示系统资源的交互式实时视图。htop
命令是 top
的替代方法,具有更用户友好的界面。使用 top
或 htop
查看 Linux 中的交换空间利用率。请按照以下步骤操作:
1. 运行以下命令:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>top</code></span></span>
2. 按 Shift+O 打开“订购依据”提示。
3. 键入 VERT
(虚拟内存使用情况),然后按 Enter 键。
输出按虚拟内存使用情况显示进程,包括 RAM 和交换空间。
如何创建交换分区
根据您的偏好,创建一个新分区或将现有分区中的可用空间用于交换文件。要创建新分区,您可以使用任何磁盘实用程序,例如 fdisk
、gdisk
或 parted
。在本教程中,我们将使用 fdisk
。
注意:只能从尚未分区的磁盘空间创建新分区。在本教程中,我们添加了一个新磁盘 /dev/sdb/。
请按照以下步骤操作:
1. 对要分区的磁盘运行 fdisk
命令:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo fdisk [disk_path]</code></span></span>
将 [disk_path]
替换为您的磁盘标识符。
2. 键入 p
并按 Enter 键查看磁盘概览。
输出提供有关新分区的可用磁盘空间的信息。如果最后一个分区在硬盘驱动器的最后一个扇区之前结束,则有足够的空间来创建新分区。上面的输出显示整个磁盘空间可用于创建新分区。
3. 键入 n
并按 Enter 键创建新分区。对于分区类型,输入 p
并按 Enter 键。
4. 设置分区号(或保留默认编号 1),然后按 Enter 键确认。
5. 输入新分区的第一个可用扇区,然后按 Enter 键。您也可以保留提供的默认选项。
6. 设置分区的最后一个可用扇区。您可以以 KiB、MiB 或 GiB 单位指定分区大小。我们将创建一个 1GiB 的交换分区,因此命令为:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>+1G</code></span></span>
7. 按 p
验证分区创建,然后按 Enter 键确认。
8. 默认情况下,分区类型为 83,而 82 是交换空间的分区类型标识符。
键入 t
并按 Enter 键更改分区类型。将值更改为 82,然后按 Enter。
9. 使用 p
验证更改,然后使用 Enter 确认。
10. fdisk
在确认之前不会对磁盘进行任何更改。若要继续更改,请键入 w
,然后按 Enter。
12. 使用以下语法更新分区表:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo partprobe [disk_path]</code></span></span>
将 [disk_path]
替换为您的磁盘名称。
例如,对于磁盘 /dev/sdb,运行:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo partprobe /dev/sdb</code></span></span>
13. 使用 mkswap
命令格式化交换空间的分区。该命令在分区中写入交换签名,其余部分未格式化。未格式化的空间存储内存页。
使用以下语法格式化分区并创建交换空间:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo mkswap [disk_path]</code></span></span>
例如:
格式化后,交换分区已创建并可供使用。
交换分区应该有多大?
现代系统中交换分区的大小取决于几个因素,例如物理 RAM 的数量、工作负载大小、休眠支持、硬盘类型和速度等。此外,不同的 Linux 发行版对交换空间大小有特定的建议。
以下指南概述了多个 Linux 发行版的交换空间建议,并提供交换大小提示:
红帽
RedHat 发行版的交换分区大小应为可用 RAM 的 20%。RAM的最小容量为4GB。
CentOS 操作系统
CentOS 提供以下准则:
- 如果总 RAM 量低于 2GB,则交换分区应是 RAM 量的两倍。
- 如果您的 RAM 超过 2GB,则交换分区的大小应为 RAM + 2 GB。例如,使用 8GB 的交换来换取 6GB 的 RAM。
Ubuntu/Debian
Ubuntu 的交换大小建议基于休眠的使用。
- 如果使用休眠,则交换分区应与 RAM 量加上 RAM 量的平方根相同。
如果您不使用休眠:
- 对于小于 1GB 的 RAM,交换分区大小应至少与 RAM 量相同,最多应是 RAM 量的两倍。
- 对于超过 1GB 的 RAM,请创建一个至少等于 RAM 量平方根的交换分区,并且最多是 RAM 量的两倍。
如何初始化/启用交换分区
使用 Linux swapon
命令启用交换分区。本教程将介绍如何激活分区并使更改保持不变。请按照以下步骤操作:
1. 激活交换分区
使用 swapon
命令临时启用交换分区:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo swapon [disk_path]</code></span></span>
将 [disk_path]
替换为分区的路径。
2. 检查掉期使用情况
通过运行以下命令验证交换分区是否处于活动状态:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>swapon --show</code></span></span>
输出应包括新的交换分区。
3. 使交换持久化(可选)
将分区包含在 /etc/fstab 文件中,以确保交换分区在启动时激活。在文本编辑器(如 nano)中打开文件:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo nano /etc/fstab</code></span></span>
在末尾添加以下行:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>/dev/sdb none swap sw 0 0</code></span></span>
将 /dev/sdb
替换为交换分区的路径。
如何更改交换分区的大小
您可以在 Linux 中通过扩展或减少交换分区来更改交换分区的大小。以下各节概述了每种方案的步骤。
如何扩展交换分区
使用 fdisk
、gparted
或 parted
等工具扩展交换分区。在本教程中,我们将使用 fdisk,这是一个比 gparted
等图形工具更复杂的 CLI 实用程序,因为它涉及手动分区表编辑。
按照以下步骤使用 fdisk
扩展交换分区:
重要:使用 fdisk
时要小心,因为不正确的操作可能会导致数据丢失。在继续操作之前,请确保备份重要数据。
1. 检查现有掉期
在调整交换分区大小之前,请检查当前的交换大小和使用情况:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>swapon --show</code></span></span>
2. 禁用交换
要安全地调整交换分区的大小,请首先通过运行以下命令来禁用它:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo swapoff -a</code></span></span>
3. 打开 fdisk 以获得正确的磁盘
为包含要调整大小的交换分区的磁盘运行 fdisk
。语法为:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo fdisk [disk_path]</code></span></span>
将 [disk_path]
替换为正确的设备路径(例如 /dev/sdb
)。
4. 列出分区
在 fdisk
中,键入 p
以打印当前分区表。输出显示磁盘上的分区列表。
5.删除交换分区
在列表中识别交换分区并记下其起始扇区。若要删除交换分区,请键入 d
,然后按 Enter。交换分区条目将从分区表中消失。
6. 创建一个新的交换分区
键入 n
以创建新分区。按照提示操作:
- 分区类型:选择默认值(主)。
- 分区号:使用与已删除的交换分区相同的编号。
- 第一个扇区:指定起始扇区。确保指定与原始交换分区相同的起始扇区。
- 最后一个扇区:指定交换分区的新大小。您可以使用
+<size>
来表示扇区的大小(例如,+2G 表示 2 GB)。
7. 将更改写入磁盘
键入 w
将更改写入分区表并退出 fdisk
。该操作将重新创建具有新大小的交换分区。
8.格式化新分区
调整分区大小后,使用 mkswap
命令对其进行格式化。使用以下语法:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo mkswap [disk_path]</code></span></span>
将 [disk_path]
替换为新的交换分区。
9. 启用交换
通过运行以下命令重新启用交换分区:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo swapon -a</code></span></span>
10. 更新 /etc/fstab
要使更改永久化,请使用文本编辑器更新 /etc/fstab 文件以反映新的交换分区。将旧的交换分区条目替换为新的交换分区条目。
11. 重启
重新启动系统以确保更改生效。跑:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo reboot</code></span></span>
如何减少交换分区
减少交换分区与扩展交换分区类似,唯一不同的步骤是步骤 6,其中指定较小的大小来缩小它,而不是扩展交换分区。
请记住,调整分区大小会带来一些风险,如果操作不当,可能会导致数据丢失。备份数据并在运行命令之前仔细检查这些命令。
如何禁用和删除交换分区
要使用 fdisk
禁用并删除交换分区,请按照以下步骤操作:
警告:删除交换分区时要小心,因为它可能会影响系统稳定性。确保您备份了任何重要数据。
1. 检查当前掉期使用情况
在删除交换分区之前,请检查当前的交换使用情况和可用的交换设备:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>swapon --show</code></span></span>
2. 禁用交换
使用 swapoff
命令禁用交换分区。语法为:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo swapoff [disk_path]</code></span></span>
将 [disk_path]
替换为要禁用的交换分区的路径。
3. 删除掉期条目(可选)
如果要删除交换分区,下一步是从 /etc/fstab 文件中删除该条目。使用文本编辑器(例如 nano)打开 /etc/fstab:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo nano /etc/fstab</code></span></span>
删除交换分区对应的行
4. 打开相应磁盘的 fdisk
为包含要删除的交换分区的磁盘运行 fdisk
。语法为:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo fdisk [disk_path]</code></span></span>
将 [disk_path]
替换为正确的设备标识符(例如 /dev/sdb
)。
5. 列出分区
键入 p
以显示当前分区表,其中包含磁盘上的分区列表。在列表中标识交换分区(应为“Linux 交换”类型代码 82)。
记下分区标识符(例如,/dev/sdb
),并确保已选择要删除的正确交换分区。
6. 删除交换分区条目
键入 d
,后跟分区号(例如,dN
,其中 N
是交换分区的分区号)。
这将从分区表中删除交换分区条目。
7. 将更改写入磁盘
键入 w
将更改写入分区表并退出 fdisk
。此步骤将永久删除交换分区。
8. 更新分区信息
删除交换分区条目后,更新磁盘的分区信息。执行以下命令,刷新信息。
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo partprobe</code></span></span>
9. 重启
最好重新启动系统,以确保所有更改都生效,并且没有对已删除的交换分区的延迟引用。跑:
<span style="color:#404040"><span style="background-color:#f7f7f7"><code>sudo reboot</code></span></span>
通过执行这些步骤,您已成功禁用,然后使用 fdisk
从 Linux 系统中删除交换分区。
结论
本教程解释了交换分区的概念、使用方式及其优缺点。按照这些步骤操作后,您就知道如何创建、调整交换分区的大小和删除交换分区。
交换分区是每个 Linux 系统的基本功能,如果使用得当,它可以提供多种好处并提高整体系统性能。
接下来,了解交换性、它是什么、它是如何工作的以及如何管理它。