目录

linux-Swap-分区

linux Swap 分区

Swap 分区(交换分区)相当于虚拟内存,在物理内存(RAM)不够用时,系统会将一部分磁盘空间作为虚拟内存使用。主要作用如下:

  • 缓解内存不足 :当物理内存耗尽时,系统会将部分进程数据临时存放在 Swap 以防止系统崩溃。
  • 休眠(Hibernate)支持 :部分 Linux 发行版支持系统休眠(suspend-to-disk),需要足够的 Swap 来存储 RAM 中的数据。
  • 缓存和后台进程管理 :当某些进程长时间未被访问,内核可能会将其数据移入 Swap,以释放 RAM 给更活跃的任务。

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 分区,可以手动创建:

# 查看当前分区信息
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

如果磁盘已经分区完成,但需要增加 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

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  # 使修改生效

命令作用
swapon -s查看当前 Swap 使用情况
free -m显示内存和 Swap 使用情况
swapoff /dev/sdX关闭某个 Swap 分区
swapoff -a关闭所有 Swap
swapon -a启用所有 Swap
`cat /proc/meminfogrep Swap`

  • 桌面系统 :如果 RAM 大于 16GB,Swap 可以设小一些(4GB~8GB)。
  • 服务器 :建议至少 1 倍 RAM,尤其是数据库和虚拟机环境。
  • 休眠功能 :Swap 需大于或等于 RAM 大小。
  • 调整 swappiness 以优化性能,避免不必要的磁盘 I/O。

增加 Swap 分区的方式主要有两种:

  1. 扩展现有的 Swap 分区 (如果有未使用的磁盘空间)。
  2. 创建新的 Swap 文件 (适用于无法调整分区的情况)。

如果你当前的 Swap 是一个独立分区,并且磁盘有剩余空间,可以按照以下步骤进行扩展。

先检查 Swap 设备:

swapon --show

然后关闭当前 Swap:

sudo swapoff -a

查看磁盘信息:

sudo fdisk -l

如果你有未分配的磁盘空间,可以使用 fdiskparted 进行扩展:

sudo fdisk /dev/sdX  # 选择你的 Swap 分区所在磁盘

删除现有的 Swap 分区并重新创建一个更大的分区(数据会丢失,谨慎操作)。

使用 resize2fs (对于某些文件系统,如 ext4)或 parted 命令进行调整。

sudo mkswap /dev/sdXn  # 重新格式化 Swap 分区(例如 /dev/sda3)
sudo swapon /dev/sdXn  # 重新启用 Swap

编辑 /etc/fstab ,确保 Swap 分区挂载信息正确:

/dev/sdXn swap swap defaults 0 0

然后执行:

sudo mount -a

如果你不想修改已有的 Swap 分区,可以直接增加 Swap 文件,这种方法不会影响系统现有分区布局。

free -m
swapon --show

假设你想增加 4GB Swap ,执行:

sudo fallocate -l 4G /swapfile  # 创建 4GB 空间的 Swap 文件

(如果 fallocate 命令不可用,可以使用 dd 命令)

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096  # 创建 4GB 文件

确保只有 root 用户能访问:

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

编辑 /etc/fstab ,添加以下内容:

/swapfile swap swap defaults 0 0

然后执行:

sudo mount -a

检查当前 swappiness 值:

cat /proc/sys/vm/swappiness

如果值较高(如 60),可以降低它(推荐 10~30,减少对 Swap 的依赖):

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

如果需要进一步增加 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

free -m   # 显示 Swap 总大小
swapon --show  # 显示 Swap 设备信息
cat /proc/swaps  # 查看 Swap 详细信息

修改分区(方法 1)

  • 适用于已有 Swap 分区并且有多余磁盘空间。
  • 需要重建分区,风险较高,适合安装系统时操作。

增加 Swap 文件(方法 2,推荐)

  • 适用于任何情况,尤其是磁盘分区已满时。
  • 操作简单、安全,不影响现有分区。