Red Hat Training

A Red Hat training course is available for RHEL 8

第 11 章 swap 入门

这部分论述了 swap 空间以及如何使用它。

11.1. 交换(swap)空间

当物理内存(RAM)已满时,将使用 Linux 中的交换空间。如果系统需要更多内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为替代更多 RAM。交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换空间分区(推荐)、交换文件,或者交换分区和交换文件的组合。

过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的 swap 空间被视为系统内存工作负载的功能,而不是系统内存。

第 11.2 节 “推荐的系统 swap 空间” 根据您的系统 RAM 量以及是否有足够的内存供系统休眠显示推荐的 swap 分区大小。推荐的 swap 分区会在安装过程中自动建立。但是,为了允许休眠,您需要在自定义分区阶段中编辑交换空间。

第 11.2 节 “推荐的系统 swap 空间” 中的建议对于内存不足的系统(1 GB 及更少)尤为重要。无法在这些系统上分配足够的交换空间可能会导致问题(如不稳定),甚至会导致安装的系统无法引导。

11.3. 添加 swap 空间

这部分论述了如何在安装后添加更多 swap 空间。例如,您可以将系统中的 RAM 量从 1 GB 升级到 2 GB,但只有 2 GB 交换空间。如果您执行内存密集型操作或运行需要大量内存的应用程序,则可能最好将交换空间大小增加到 4 GB。

有三个选项:创建新交换分区、创建新交换文件,或者在现有 LVM2 逻辑卷上扩展交换。建议您扩展现有逻辑卷。

11.3.1. 在 LVM2 逻辑卷中扩展 swap

这个步骤描述了如何在现有 LVM2 逻辑卷中扩展交换空间。假设 /dev/VolGroup00/LogVol01 是您要扩展为 2 GB 的卷。

先决条件

  • 有足够的磁盘空间。

流程

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol01
  2. 将 LVM2 逻辑卷大小调整为 2 GB:

    # lvresize /dev/VolGroup00/LogVol01 -L +2G
  3. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol01
  4. 启用扩展的逻辑卷:

    # swapon -v /dev/VolGroup00/LogVol01
  5. 要测试是否成功扩展并激活 swap 逻辑卷,请检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.3.2. 为 swap 创建 LVM2 逻辑卷

这个步骤描述了如何为 swap 创建 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要添加的交换卷。

先决条件

  • 有足够的磁盘空间。

流程

  1. 创建大小为 2 GB 的 LVM2 逻辑卷:

    # lvcreate VolGroup00 -n LogVol02 -L 2G
  2. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol02
  3. /etc/fstab 文件中添加以下条目:

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  5. 在逻辑卷中激活 swap:

    # swapon -v /dev/VolGroup00/LogVol02
  6. 要测试是否成功创建并激活了 swap 逻辑卷,请检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.3.3. 创建交换文件

这个步骤描述了如何创建交换文件。

先决条件

  • 有足够的磁盘空间。

流程

  1. 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块数量。例如: 64MB swap 文件的块大小为 65536。
  2. 创建一个空文件:

    # dd if=/dev/zero of=/swapfile bs=1024 count=65536

    使用与所需块大小相等的值替换 count

  3. 使用以下命令设定 swap 文件:

    # mkswap /swapfile
  4. 更改交换文件的安全性,使其不完全可读。

    # chmod 0600 /swapfile
  5. 要在引导时启用交换文件,以 root 用户身份编辑 /etc/fstab 使其包含以下条目:

    /swapfile swap swap defaults 0 0

    下次系统引导时,它会激活新的 swap 文件。

  6. 重新生成挂载单元以便您的系统注册新的 /etc/fstab 配置:

    # systemctl daemon-reload
  7. 立即激活 swap 文件:

    # swapon /swapfile
  8. 要测试新 swap 文件是否已成功创建并激活,请检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.4. 删除 swap 空间

这部分论述了如何在安装后减少 swap 空间。例如:您将系统中的 RAM 大小从 1GB 降到 512MB,但仍分配了 2GB swap 空间。可能最好将交换空间大小减少到 1 GB,因为较大的 2 GB 可能会浪费磁盘空间。

根据您需要的内容,您可以选择以下三个选项之一:减少现有 LVM2 逻辑卷上的交换空间、删除用于交换的整个 LVM2 逻辑卷,或删除交换文件。

11.4.1. 在 LVM2 逻辑卷中减少 swap

这个步骤描述了如何在 LVM2 逻辑卷中减少交换。假设 /dev/VolGroup00/LogVol01 是您要缩小的卷。

流程

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol01
  2. 将 LVM2 逻辑卷减少 512 MB:

    # lvreduce /dev/VolGroup00/LogVol01 -L -512M
  3. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol01
  4. 在逻辑卷中激活 swap:

    # swapon -v /dev/VolGroup00/LogVol01
  5. 要测试是否成功缩小 swap 逻辑卷,请检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.4.2. 为 swap 删除 LVM2 逻辑卷

这个步骤描述了如何为 swap 删除 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要删除的交换卷。

流程

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol02
  2. 删除 LVM2 逻辑卷:

    # lvremove /dev/VolGroup00/LogVol02
  3. /etc/fstab 文件中删除以下关联的条目:

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  5. 要测试是否成功删除了逻辑卷,请检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.4.3. 删除交换文件

这个步骤描述了如何删除交换文件。

流程

  1. 在 shell 提示下,执行以下命令禁用交换文件(其中 /swapfile 是交换文件):

    # swapoff -v /swapfile
  2. 相应地从 /etc/fstab 文件中删除其条目。
  3. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  4. 删除实际文件:

    # rm /swapfile