Linux Swap空间不足时的扩容方法
当Linux系统物理内存不足,且Swap空间不足以支撑系统运行时,可通过以下三种方式扩容Swap空间。其中,扩展现有逻辑卷(LVM)中的Swap分区是最推荐的方法(尤其适用于使用LVM的系统),因其灵活性高、对系统影响小;新建Swap文件操作简单,适合临时或无LVM的环境;新建Swap分区适用于未使用LVM且有未分配磁盘空间的场景。
若系统使用LVM管理磁盘,且Swap分区位于逻辑卷(LV)中,此方法可直接扩展逻辑卷的Swap空间,无需重新创建分区或文件。
关闭现有Swap分区
禁用当前Swap分区,释放其占用的磁盘空间:
sudo swapoff -v /dev/mapper/centos-swap # 替换为实际的Swap逻辑卷路径(可通过`lsblk`或`fdisk -l`查看)
扩展逻辑卷大小
使用lvresize命令增加逻辑卷的容量(示例中扩展2GB,可根据需求调整+2G为所需大小):
sudo lvresize /dev/mapper/centos-swap -L +2G # 增加2GB
# 或指定绝对大小(如扩展到8GB):sudo lvresize /dev/mapper/centos-swap -L 8G
重新格式化为Swap空间
扩展后的逻辑卷需重新格式化为Swap格式:
sudo mkswap /dev/mapper/centos-swap
启用扩展后的Swap分区
启用新的Swap空间:
sudo swapon -va # 启用所有Swap空间并验证
持久化配置(可选)
若原Swap分区已在/etc/fstab中配置(通常为/dev/mapper/centos-swap swap swap defaults 0 0),无需修改,重启后会自动启用。若未配置,需添加对应条目。
若系统未使用LVM或需要快速扩容,可通过创建Swap文件实现。此方法无需修改磁盘分区表,适合临时增加Swap空间。
创建空文件
使用dd命令创建指定大小的空文件(示例中创建2GB Swap文件,bs=1G表示块大小为1GB,count=2表示2个块):
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 # 替换`/swapfile`为目标路径(如`/data/swapfile`)
设置文件权限
为Swap文件设置严格的权限(仅root可读写),防止安全风险:
sudo chmod 600 /swapfile
格式化为Swap空间
将文件转换为Swap格式:
sudo mkswap /swapfile
启用Swap文件
立即启用新创建的Swap文件:
sudo swapon /swapfile
持久化配置
编辑/etc/fstab文件,添加以下行,确保系统重启后自动启用Swap文件:
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
验证结果
使用free -h或swapon --show命令查看Swap空间是否增加:
free -h
若系统未使用LVM且有未分配的磁盘空间,可通过新建磁盘分区并将其格式化为Swap分区实现扩容。
创建新分区
使用fdisk或parted工具在未分配的磁盘上创建新分区(示例中使用fdisk操作/dev/sdb磁盘):
sudo fdisk /dev/sdb
n创建新分区,选择分区类型(主分区/逻辑分区),设置分区大小;t修改分区类型,将其设置为82(Linux Swap类型);w将分区表写入磁盘(此操作会重启分区表,需谨慎)。格式化分区为Swap空间
使用mkswap命令格式化新分区(假设新分区为/dev/sdb2,可通过lsblk查看):
sudo mkswap /dev/sdb2
启用新Swap分区
启用新创建的Swap分区:
sudo swapon /dev/sdb2
持久化配置
编辑/etc/fstab文件,添加以下行,确保系统重启后自动启用新Swap分区:
echo '/dev/sdb2 swap swap defaults 0 0' | sudo tee -a /etc/fstab
验证结果
使用free -h或swapon --show命令确认Swap空间已增加。
vm.swappiness(范围0-100)控制系统使用Swap的积极性(0表示尽量不用Swap,100表示积极使用)。临时修改:sudo sysctl vm.swappiness=60;永久修改:编辑/etc/sysctl.conf,添加vm.swappiness=60。