Swap 分区在 Linux 系统中的作用
Swap 分区(交换分区)相当于虚拟内存,在物理内存(RAM)不够用时,系统会将一部分磁盘空间作为虚拟内存使用。主要作用如下:
- 缓解内存不足:当物理内存耗尽时,系统会将部分进程数据临时存放在 Swap 以防止系统崩溃。
- 休眠(Hibernate)支持:部分 Linux 发行版支持系统休眠(suspend-to-disk),需要足够的 Swap 来存储 RAM 中的数据。
- 缓存和后台进程管理:当某些进程长时间未被访问,内核可能会将其数据移入 Swap,以释放 RAM 给更活跃的任务。
Swap 分区的大小建议
Swap 分区的大小通常与系统 RAM 相关,推荐配置如下:
物理内存(RAM) | Swap 推荐大小(桌面系统) | Swap 推荐大小(服务器) |
---|---|---|
小于 2GB | 物理内存的 2 倍 | 物理内存的 2 倍 |
2GB - 8GB | 物理内存的 1.5 倍 | 物理内存的 1~2 倍 |
8GB - 16GB | 物理内存的 1 倍 | 物理内存的 1~2 倍 |
16GB 以上 | 4GB~8GB | 物理内存的 0.5~1 倍 |
休眠模式 | 至少等于 RAM 大小 | 至少等于 RAM 大小 |
如果服务器是高性能数据库或高 I/O 负载应用(如 NoSQL),尽量减少 Swap,以避免磁盘 I/O 影响性能。
如何创建和管理 Swap
1. 创建 Swap 分区(传统方式)
如果系统安装时没有创建 Swap 分区,可以手动创建:
# 查看当前分区信息
lsblk
fdisk -l# 创建新的 Swap 分区(假设 /dev/sdb1 为空闲分区)
mkswap /dev/sdb1 # 格式化为 swap
swapon /dev/sdb1 # 启用 swap# 持久化配置(编辑 /etc/fstab)
echo '/dev/sdb1 swap swap defaults 0 0' >> /etc/fstab
2. 使用 Swap 文件代替 Swap 分区
如果磁盘已经分区完成,但需要增加 Swap,可以使用 Swap 文件:
# 创建 2GB 的 Swap 文件
sudo fallocate -l 2G /swapfile # 也可以用 dd 命令: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile # 确保安全性
sudo mkswap /swapfile # 创建 Swap 文件
sudo swapon /swapfile # 启用 Swap# 持久化配置(编辑 /etc/fstab)
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
3. 调整 Swap 交换策略
Linux 通过 swappiness 参数控制 Swap 交换策略,值范围是 0~100:
- swappiness=0:尽量避免使用 Swap(适用于大内存服务器)。
- swappiness=10-30:适用于普通桌面或服务器(默认通常是 60)。
- swappiness=60+:系统更积极地使用 Swap(适用于低内存设备)。
查看当前 swappiness 值:
cat /proc/sys/vm/swappiness
临时修改(重启后失效):
sudo sysctl vm.swappiness=10
永久修改(重启后生效):
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # 使修改生效
Swap 相关命令
命令 | 作用 |
---|---|
swapon -s | 查看当前 Swap 使用情况 |
free -m | 显示内存和 Swap 使用情况 |
swapoff /dev/sdX | 关闭某个 Swap 分区 |
swapoff -a | 关闭所有 Swap |
swapon -a | 启用所有 Swap |
`cat /proc/meminfo | grep Swap` |
总结
- 桌面系统:如果 RAM 大于 16GB,Swap 可以设小一些(4GB~8GB)。
- 服务器:建议至少 1 倍 RAM,尤其是数据库和虚拟机环境。
- 休眠功能:Swap 需大于或等于 RAM 大小。
- 调整 swappiness 以优化性能,避免不必要的磁盘 I/O。
增加 Swap分区
增加 Swap 分区的方式主要有两种:
- 扩展现有的 Swap 分区(如果有未使用的磁盘空间)。
- 创建新的 Swap 文件(适用于无法调整分区的情况)。
方法 1:扩展 Swap 分区(适用于已有 Swap 分区)
如果你当前的 Swap 是一个独立分区,并且磁盘有剩余空间,可以按照以下步骤进行扩展。
步骤 1:关闭当前 Swap
先检查 Swap 设备:
swapon --show
然后关闭当前 Swap:
sudo swapoff -a
步骤 2:调整 Swap 分区
查看磁盘信息:
sudo fdisk -l
如果你有未分配的磁盘空间,可以使用 fdisk
或 parted
进行扩展:
sudo fdisk /dev/sdX # 选择你的 Swap 分区所在磁盘
删除现有的 Swap 分区并重新创建一个更大的分区(数据会丢失,谨慎操作)。
使用 resize2fs
(对于某些文件系统,如 ext4)或 parted
命令进行调整。
步骤 3:格式化新的 Swap 分区
sudo mkswap /dev/sdXn # 重新格式化 Swap 分区(例如 /dev/sda3)
sudo swapon /dev/sdXn # 重新启用 Swap
步骤 4:更新 /etc/fstab
编辑 /etc/fstab
,确保 Swap 分区挂载信息正确:
/dev/sdXn swap swap defaults 0 0
然后执行:
sudo mount -a
方法 2:使用 Swap 文件增加 Swap(推荐,安全、不影响分区)
如果你不想修改已有的 Swap 分区,可以直接增加 Swap 文件,这种方法不会影响系统现有分区布局。
步骤 1:检查当前 Swap
free -m
swapon --show
步骤 2:创建 Swap 文件
假设你想增加 4GB Swap,执行:
sudo fallocate -l 4G /swapfile # 创建 4GB 空间的 Swap 文件
(如果 fallocate
命令不可用,可以使用 dd
命令)
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 # 创建 4GB 文件
步骤 3:设置权限
确保只有 root 用户能访问:
sudo chmod 600 /swapfile
步骤 4:格式化 Swap 文件
sudo mkswap /swapfile
步骤 5:启用 Swap 文件
sudo swapon /swapfile
步骤 6:永久生效
编辑 /etc/fstab
,添加以下内容:
/swapfile swap swap defaults 0 0
然后执行:
sudo mount -a
步骤 7:调整 Swap 策略(可选)
检查当前 swappiness
值:
cat /proc/sys/vm/swappiness
如果值较高(如 60),可以降低它(推荐 10~30,减少对 Swap 的依赖):
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
方法 3:增加多个 Swap 文件
如果需要进一步增加 Swap,可以创建多个 Swap 文件:
sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2
并添加到 /etc/fstab
:
/swapfile2 swap swap defaults 0 0
如何验证 Swap 是否增加成功?
free -m # 显示 Swap 总大小
swapon --show # 显示 Swap 设备信息
cat /proc/swaps # 查看 Swap 详细信息
总结
✅ 修改分区(方法 1)
- 适用于已有 Swap 分区并且有多余磁盘空间。
- 需要重建分区,风险较高,适合安装系统时操作。
✅ 增加 Swap 文件(方法 2,推荐)
- 适用于任何情况,尤其是磁盘分区已满时。
- 操作简单、安全,不影响现有分区。