交换分区的配置
# 什么是交换分区
交换分区 (Swap Partition) 是硬盘上的一块区域,被操作系统用作虚拟内存。 它在 RAM (物理内存) 不足时,用于临时存放不常用的数据。 可以把它理解为 RAM 的一个“备用空间”。
- RAM 的作用: RAM 是计算机中用于快速存储和访问数据的内存。 应用程序和操作系统使用 RAM 来存储正在运行的程序、打开的文件和其他数据。 RAM 的优点是读写速度非常快,但缺点是价格昂贵且容量有限。
- 交换分区的目的: 当 RAM 不足以容纳所有正在运行的程序和数据时,操作系统会将一些不常用的数据从 RAM 移动到交换分区。 这样可以释放 RAM,让更重要的程序或数据可以继续运行。
虚拟内存
虚拟内存是一种内存管理技术,允许操作系统为每个运行的程序提供一个独立的、看似连续的内存空间。它通过将物理内存(RAM)和磁盘存储结合起来,让程序感觉自己拥有比实际物理内存更多的可用内存。
优点: 程序可以运行在比物理内存更大的空间中、提供内存隔离,防止进程之间相互干扰、提高多任务处理的效率。
警告
使用 swap 空间可能会降低系统性能,因此在依赖 swap 空间前,优化物理内存的使用可能会更有利。
# 交换分区工作流程
内存不足时触发:当物理内存使用量接近饱和,操作系统会根据内存管理算法(比如LRU,即“最近最少使用”算法)选择哪些页面需要被移出内存。
数据写入交换分区:被选中的内存页面会被写入交换分区。这通常涉及将数据从RAM复制到硬盘上的交换空间。
释放内存:一旦数据被成功写入交换分区,相应的内存空间就会被释放,供其他活跃进程使用。
换回内存:当某个进程需要访问被换出的数据时,操作系统会将这些数据从交换分区“换回”(swapped in)内存。如果此时内存仍然不足,可能会再次换出其他页面。
# 交换分区类型
交换分区(Swap Partition)的类型主要取决于操作系统的实现方式以及用户的需求配置。在不同的系统中,交换空间的表现形式和使用方式可能有所不同。以下是交换分区的常见类型及其特点:
专用交换分区(Dedicated Swap Partition)
描述:在硬盘上预先分配一个独立的磁盘分区专门用于交换空间。
特点:
需要在安装操作系统时或通过分区工具(如fdisk或gparted)手动创建。
通常格式化为“swap”类型(例如Linux下的mkswap命令)。
大小固定,除非重新分区调整。
优点:
性能较稳定,因为它是连续的磁盘空间。
与文件系统分离,不受文件系统碎片影响。
缺点:
- 不够灵活,调整大小需要重新分区。
适用场景:Linux系统常用这种方式,尤其在服务器或需要高稳定性的环境中。
交换文件(Swap File)
描述:在现有文件系统(如ext4、NTFS等)中创建一个普通文件作为交换空间。
特点:
不需要独立分区,可以直接在已有分区上创建。
大小可以动态调整(通过创建新文件或扩展现有文件)。
在Linux中可用dd命令创建并用mkswap激活,例如:
dd if=/dev/zero of=/swapfile bs=1M count=1024 mkswap /swapfile swapon /swapfile
1
2
3
优点:
- 灵活性高,无需重新分区即可启用或调整。
- 适合磁盘分区已满或临时需要增加交换空间的场景。
缺点:
- 性能可能略低于专用分区,因为受文件系统开销和碎片化的影响。
适用场景:现代Linux发行版(如Ubuntu)默认支持,Windows的页面文件(pagefile.sys)也属于此类。
动态交换空间(Dynamic Swap Space)
描述:某些操作系统支持根据内存需求动态分配交换空间,而不是固定大小的分区或文件。
特点:
- 交换空间大小可以随系统负载自动扩展或收缩。
- 实现上可能是多个交换文件或分区组合。
优点:
- 更高效地利用磁盘空间。
- 适应性强,适合内存使用模式变化大的系统。
缺点:
- 管理复杂,可能需要额外配置。
- 动态扩展可能导致性能不稳定。
适用场景:某些嵌入式系统或特殊配置的高级服务器。
其他还有:混合交换(Hybrid Swap)、基于设备的交换(Device-based Swap)等等
# 优缺点
优点
- 扩展可用内存
- 描述:当物理内存(RAM)不足时,交换分区允许系统继续运行程序,避免因内存耗尽导致的崩溃。
- 意义:对于内存较小的设备(如老旧PC或低配服务器),交换分区是经济实惠的解决方案。
- 稳定性保障
- 描述:通过将不活跃的内存页面换出,交换分区为关键进程(如系统内核或高优先级应用)腾出空间。
- 意义:在高负载场景下(如多任务处理或内存泄漏),系统仍能保持基本功能。
- 专用空间的高效性
- 描述:交换分区是硬盘上预分配的连续区域,不受文件系统碎片化的影响。
- 意义:相比交换文件,专用分区的读写性能更稳定,尤其在机械硬盘(HDD)上。
- 支持休眠功能
- 描述:在支持休眠(hibernation)的系统中,交换分区可以存储内存中的全部数据,以便关机后恢复。
- 意义:对于笔记本电脑等设备,交换分区的大小通常需大于等于物理内存以支持此功能。
- 配置简单
- 描述:在安装操作系统时可以一次性设置好(如Linux分区),无需频繁调整。
- 意义:适合长期稳定运行的系统,如服务器。
缺点
- 性能瓶颈
- 描述:硬盘(包括SSD)的读写速度远低于RAM,频繁使用交换分区会导致系统变慢。
- 影响:当系统过度依赖交换(出现“交换抖动”),响应速度显著下降,用户体验变差。
- 空间浪费
- 描述:交换分区是固定分配的,即使不使用也会占用磁盘空间。
- 影响:在内存充足的系统中,交换分区可能长期闲置,浪费存储资源。
- 调整不灵活
- 描述:专用交换分区的大小在创建后难以动态调整,需重新分区或格式化。
- 影响:相比交换文件,扩展或缩减交换空间的操作更复杂,可能会中断系统运行。
- 对硬件寿命的影响
- 描述:频繁的读写操作会增加硬盘的损耗,尤其是对SSD(固态硬盘)的寿命有潜在影响。
- 影响:在高负载场景下,SSD的写入次数可能迅速累积,导致耐久性下降。
- 不适合所有场景
- 描述:在内存充足的高性能系统中,交换分区可能完全无用,甚至可能因误用降低性能。
- 影响:现代系统(如配备大容量RAM的工作站)可能更倾向于禁用交换或使用动态交换文件。
# swap 分区大小选择
推荐的 swap 分区的大小取决于系统中的 RAM 量,以及是否需要足够的内存供系统休眠。推荐的 swap 分区大小在安装过程中自动设置。但是,为了允许休眠,您需要在自定义分区阶段编辑交换空间。
以下建议对于内存不足的系统(如 1 GB 或更小)特别重要。无法在这些系统上分配足够的 swap 空间可能会导致问题,如不稳定,甚至导致安装的系统无法引导。
根据 Red Hat Enterprise Linux (opens new window) 推荐:
系统中的 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 空间可提高性能。
请注意,将交换空间分布到多个存储设备也可以提高交换空间的性能,特别是在具有快速驱动器、控制器和接口的系统上。
# 设置交换分区
# 方法一:专用交换分区
这种方法需要使用磁盘分区工具分配一个独立的交换分区,通常在系统安装时或有未分配磁盘空间时使用。
检查当前交换分区状态
swapon -s free -h
1
2分区磁盘
使用分区工具(如
fdisk
或gparted
)分配交换分区。以
fdisk
为例:sudo fdisk /dev/sdX # 替换 sdX 为你的磁盘(如 /dev/sdb)
1- 输入n创建新分区。
- 选择分区类型为primary(主分区)或根据需要。
- 设置大小(例如+4G表示4GB)。
- 输入t更改分区类型,选择82(Linux swap)。
- 输入w保存并退出。
格式化为交换分区
对新分区进行格式化:
sudo mkswap /dev/sdX1 # 替换 sdX1 为新分区(如 /dev/sdb1)
1输出类似:
Setting up swapspace version 1, size = 4 GiB
1启用交换分区
激活新建的交换分区:
sudo swapon /dev/sdX1
1验证是否有效:
swapon --show
1永久启用
sudo vim /etc/fstab
1添加一行(替换/dev/sdX1为你的分区):
/dev/sdX1 none swap sw 0 0
1sudo swapoff -a && sudo swapon -a
1
# 方法二:交换文件
如果不想重新分区,可以在现有文件系统上创建交换文件,操作更灵活。
检查当前交换分区状态
swapon -s free -h
1
2创建交换文件
使用
fallocate
(推荐,速度快)或dd
创建文件:sudo fallocate -l 4G /swapfile # 创建4GB交换文件 # 或者 sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 # 4GB
1
2
3
4设置文件权限(防止非root访问):
sudo chmod 600 /swapfile
1格式化为交换空间
sudo mkswap /swapfile
1输出类似:
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes) no label, UUID=c7ecd599-d301-4075-b106-1b3b56808815
1
2启用交换文件
激活交换文件
sudo swapon /swapfile
1验证一下:
swapon --show
1永久启用
sudo vim /etc/fstab
1添加一行:
/swapfile none swap sw 0 0
1测试:
sudo swapoff -a && sudo swapon -a
1
# 调整swap优先级
如果系统中存在多个交换分区或文件,可以设置优先级:
swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2113532 0 -2
/swapfile file 4194300 0 -3
2
3
4
编辑/etc/fstab
,添加pri参数(值越高优先级越高,范围-1到32767):
/dev/mapper/rl-swap none swap sw,pri=3 0 0
/swapfile none swap sw,pri=5 0 0
2
生效:
[root@ ~]# sudo swapoff -a && sudo swapon -a
[root@ ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2113532 0 3
/swapfile file 4194300 0 5
2
3
4
5
# 调整Swappiness参数
swappiness控制系统使用交换分区的倾向(0-100,默认通常为60):
查看当前值:
cat /proc/sys/vm/swappiness
1临时调整(例如设为10,减少交换使用):
sudo sysctl vm.swappiness=10
1永久调整:
编辑
/etc/sysctl.conf
添加或修改:vm.swappiness=10
1应用:
sudo sysctl -p
1
# 删除或禁用swap
临时禁用:
sudo swapoff /dev/sdX1 # 或 /swapfile
永久删除:
- 从
/etc/fstab
中删除对应行。 - 如果是分区,可用fdisk删除并重新分配空间。
# 总结
交换分区是硬盘上的虚拟内存,用于在RAM不足时存储数据,扩展内存并维持系统稳定。其类型包括专用分区、交换文件和动态空间,优点是增加内存和支持休眠,缺点是性能下降和空间浪费。大小根据RAM量调整,如RAM≤2GB时建议2倍RAM。可通过分区或文件设置,并优化优先级与swappiness参数,但在高性能系统可能无需使用。
三个核心命令
- mkswap
- swapon
- swapoff