26.6. swap 入门
使用交换空间为不活跃的进程和数据提供临时存储,并防止物理内存满时内存不足。交换空间充当物理内存的扩展,并允许系统在物理内存耗尽时继续平稳运行。请注意,在依赖 swap 空间前,使用 swap 空间可能会降低系统性能,因此优化物理内存的使用可能会更优先使用。
26.6.1. swap 空间概述
当物理内存(RAM)已满时,将使用 Linux 中的 交换空间。如果系统需要更多的内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。
交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换分区(推荐)、交换文件,或者交换分区和交换文件的组合。
过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的交换空间被视为系统内存工作负载的功能,而不是系统内存的功能。
- 添加 swap 空间
以下是添加 swap 空间的不同方法:
- 在 LVM2 逻辑卷中扩展 swap
- 为 swap 创建 LVM2 逻辑卷
- 创建交换文件
例如,您可以将系统中的 RAM 量从 1 GB 升级到 2 GB,但只有 2 GB 的交换空间。如果您执行内存密集型操作或运行需要大量内存的应用程序,则最好将交换空间大小增加到 4 GB。
- 删除 swap 空间
以下是删除 swap 空间的不同方法:
- 在 LVM2 逻辑卷中减少 swap
- 为 swap 删除 LVM2 逻辑卷
- 删除交换文件
例如:您将系统中的 RAM 大小从 1GB 降到 512MB,但仍分配了 2GB swap 空间。最好将交换空间大小减少到 1 GB,因为较大的 2 GB 可能会浪费磁盘空间。
26.6.2. 推荐的系统 swap 空间
推荐的 swap 分区的大小取决于系统中的 RAM 量,以及是否需要足够的内存供系统休眠。推荐的 swap 分区大小在安装过程中自动设置。但是,为了允许休眠,您需要在自定义分区阶段编辑交换空间。
以下建议对于内存不足的系统(如 1 GB 或更小)特别重要。无法在这些系统上分配足够的 swap 空间可能会导致问题,如不稳定,甚至导致安装的系统无法引导。
系统中的 RAM 量 | 推荐的 swap 空间 | 如果允许休眠则推荐使用 swap 空间 |
---|---|---|
⩽ 2 GB | RAM 量的 2 倍 | RAM 量的 3 倍 |
> 2 GB – 8 GB | 与 RAM 量相等 | RAM 量的 2 倍 |
> 8 GB – 64 GB | 至少 4 GB | RAM 量的 1.5 倍 |
> 64 GB | 至少 4 GB | 不推荐休眠 |
对于边界值,如 2 GB、8 GB 或 64 GB 系统 RAM,请根据您的需要或偏好选择 swap 大小。如果您的系统资源允许此操作,增加 swap 空间可提高性能。
请注意,将交换空间分布到多个存储设备也可以提高交换空间的性能,特别是在具有快速驱动器、控制器和接口的系统上。
在修改时,不应 使用分配被为交换空间的文件系统和 LVM2 卷。如果系统进程或内核正在使用交换空间,则任何修改交换的尝试都会失败。使用 free
和 cat /proc/swaps
命令验证交换的使用量以及位置。
调整 swap 空间大小需要临时将其从系统中删除。如果运行的应用程序依赖于额外的 swap 空间,且可能会遇到低内存情况,这可能会出现问题。最好从救援模式执行 swap 大小调整,请参阅 Debug 引导选项。当提示挂载文件系统时,请选择 。
26.6.3. 为 swap 创建 LVM2 逻辑卷
您可以为 swap 创建一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要添加的交换卷。
先决条件
- 您有足够的磁盘空间。
流程
创建大小为 2 GB 的 LVM2 逻辑卷:
# lvcreate VolGroup00 -n LogVol02 -L 2G
格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol02
在
/etc/fstab
文件中添加以下条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0
重新生成挂载单元以便您的系统注册新配置:
# systemctl daemon-reload
在逻辑卷中激活 swap:
# swapon -v /dev/VolGroup00/LogVol02
验证
要测试是否成功创建并激活 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:
# cat /proc/swaps total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22Gi
# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 17Gi 0B 17Gi
26.6.4. 创建交换文件
当系统内存不足时,您可以创建一个 swap 文件来在固态驱动器或硬盘上创建一个临时存储空间。
先决条件
- 您有足够的磁盘空间。
流程
- 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块的数量。例如: 64MB swap 文件的块大小为 65536。
创建一个空文件:
# dd if=/dev/zero of=/swapfile bs=1024 count=65536
将 65536 替换为等于所需块大小的值。
使用以下命令设定 swap 文件:
# mkswap /swapfile
更改交换文件的安全性,使其不可读。
# chmod 0600 /swapfile
使用以下条目编辑
/etc/fstab
文件,以在引导时启用交换文件:/swapfile none swap defaults 0 0
下次系统引导时,它会激活新的 swap 文件。
重新生成挂载单元,以便您的系统注册新的
/etc/fstab
配置:# systemctl daemon-reload
立即激活 swap 文件:
# swapon /swapfile
验证
要测试新 swap 文件是否已成功创建并激活,请使用以下命令检查活跃 swap 空间:
$ cat /proc/swaps $ free -h
26.6.5. 在 LVM2 逻辑卷中扩展 swap
您可以在现有 LVM2 逻辑卷上扩展 swap 空间。假设 /dev/VolGroup00/LogVol01 是您要将其扩展为 2 GB 的卷。
先决条件
- 您有足够的磁盘空间。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol01
将 LVM2 逻辑卷调整为 2 GB :
# lvresize /dev/VolGroup00/LogVol01 -L +2G
格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol01
启用扩展的逻辑卷:
# swapon -v /dev/VolGroup00/LogVol01
验证
要测试是否成功扩展并激活 swap 逻辑卷,请检查活跃 swap 空间:
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 16322556 0 -2 /dev/dm-4 partition 7340028 0 -3
# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22Gi
26.6.6. 在 LVM2 逻辑卷中减少 swap
您可以减少 LVM2 逻辑卷上的 swap。假设 /dev/VolGroup00/LogVol01 是您要缩小的卷。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol01
清理 swap 签名:
# wipefs -a /dev/VolGroup00/LogVol01
将 LVM2 逻辑卷减少 512 MB:
# lvreduce /dev/VolGroup00/LogVol01 -L -512M
格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol01
在逻辑卷中激活 swap:
# swapon -v /dev/VolGroup00/LogVol01
验证
要测试是否成功缩小 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:
$ cat /proc/swaps $ free -h
26.6.7. 为 swap 删除 LVM2 逻辑卷
您可以删除 swap 的一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要删除的交换卷。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol02
删除 LVM2 逻辑卷:
# lvremove /dev/VolGroup00/LogVol02
从
/etc/fstab
文件中删除以下关联的条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0
重新生成挂载单元以注册新配置:
# systemctl daemon-reload
验证
测试逻辑卷是否被成功删除,使用以下命令检查活跃的 swap 空间:
$ cat /proc/swaps $ free -h
26.6.8. 删除交换文件
您可以删除一个 swap 文件。
流程
禁用
/swapfile
swap 文件:# swapoff -v /swapfile
-
相应地从
/etc/fstab
文件中删除其条目。 重新生成挂载单元以便您的系统注册新配置:
# systemctl daemon-reload
删除实际的文件:
# rm /swapfile