Linux swapon 命令
注意:swapon用于启用Linux系统中的交换空间(swap space)。交换空间可以是磁盘分区、文件或逻辑卷,当物理内存不足时,系统会将不常用的内存页移动到交换空间以释放物理内存。
命令简介
swapon是Linux系统中用于启用和配置交换空间的命令。它可以将预先初始化的交换分区、交换文件或逻辑卷激活为可用的交换空间,并可以设置交换空间的优先级、查看交换空间状态等。
命令语法
swapon [选项] [设备]
常用选项
| 选项 |
说明 |
-a, --all |
启用/etc/fstab中标记的所有交换设备 |
-d, --discard |
启用TRIM支持(仅SSD) |
-e, --ifexists |
静默跳过不存在的设备 |
-f, --fixpgsz |
重新初始化交换空间(如果页面大小不匹配) |
-L 标签 |
按标签启用交换设备 |
-p, --priority 优先级 |
设置交换空间的优先级 |
-s, --summary |
显示交换空间摘要信息 |
-v, --verbose |
详细输出模式 |
-U UUID |
按UUID启用交换设备 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
--show[=字段] |
以表格形式显示交换空间信息 |
交换空间优先级
交换空间优先级(0-32767)决定了系统使用交换空间的顺序:
| 优先级 |
说明 |
| 32767 |
最高优先级,系统优先使用 |
| 100-1000 |
高优先级,推荐用于高速存储 |
| 0-100 |
中等优先级 |
| -1 |
最低优先级,最后使用 |
使用示例
1. 启用交换分区
# 启用交换分区
sudo swapon /dev/sdb1
# 启用并设置优先级
sudo swapon -p 100 /dev/sdb1 # 高优先级
# 启用多个交换分区
sudo swapon /dev/sdb1 /dev/sdc1
2. 启用交换文件
# 启用交换文件
sudo swapon /swapfile
# 启用并设置标签(如果已设置)
sudo swapon -L "system_swap" /swapfile
# 启用并设置UUID
sudo swapon -U "12345678-1234-1234-1234-123456789012"
3. 启用所有配置的交换空间
# 启用/etc/fstab中定义的所有交换设备
sudo swapon -a
# 启用并显示详细信息
sudo swapon -av
# 启用时跳过不存在的设备
sudo swapon -ae
4. 查看交换空间状态
# 查看交换空间摘要信息
swapon -s
# 以表格形式显示详细信息
swapon --show
# 显示特定字段
swapon --show=NAME,TYPE,SIZE,USED,PRIO
# 查看所有可用信息
swapon --show=all
5. 设置交换空间优先级
# 为高速SSD上的交换空间设置高优先级
sudo swapon -p 1000 /dev/nvme0n1p3
# 为慢速HDD上的交换空间设置低优先级
sudo swapon -p 10 /dev/sda3
# 多个交换空间不同优先级
sudo swapon -p 1000 /dev/nvme0n1p3
sudo swapon -p 100 /dev/sdb1
sudo swapon -p 10 /dev/sdc1
6. 启用TRIM支持(SSD优化)
# 启用交换空间的TRIM支持(仅适用于SSD)
sudo swapon -d /dev/sdb1
# 同时启用TRIM和设置优先级
sudo swapon -d -p 100 /dev/sdb1
7. 完整交换空间管理脚本
#!/bin/bash
# 交换空间管理脚本
HIGH_SPEED_SWAP="/dev/nvme0n1p3"
LOW_SPEED_SWAP="/dev/sda3"
SWAP_FILE="/swapfile"
echo "=== 交换空间管理脚本 ==="
# 显示当前交换空间状态
echo "当前交换空间状态:"
swapon --show
# 禁用所有交换空间(如果需要重新配置)
echo "禁用所有交换空间..."
sudo swapoff -a
# 启用高速交换分区(高优先级)
echo "启用高速交换分区..."
if [ -b "$HIGH_SPEED_SWAP" ]; then
sudo swapon -d -p 1000 "$HIGH_SPEED_SWAP"
echo "✓ 高速交换分区已启用 (优先级: 1000)"
else
echo "✗ 高速交换分区不存在: $HIGH_SPEED_SWAP"
fi
# 启用低速交换分区(低优先级)
echo "启用低速交换分区..."
if [ -b "$LOW_SPEED_SWAP" ]; then
sudo swapon -p 10 "$LOW_SPEED_SWAP"
echo "✓ 低速交换分区已启用 (优先级: 10)"
else
echo "✗ 低速交换分区不存在: $LOW_SPEED_SWAP"
fi
# 启用交换文件(中等优先级)
echo "启用交换文件..."
if [ -f "$SWAP_FILE" ]; then
sudo swapon -p 100 "$SWAP_FILE"
echo "✓ 交换文件已启用 (优先级: 100)"
else
echo "✗ 交换文件不存在: $SWAP_FILE"
fi
# 验证最终状态
echo "最终交换空间状态:"
swapon --show=NAME,TYPE,SIZE,USED,PRIO
# 显示内存和交换使用情况
echo "内存和交换使用情况:"
free -h
8. 系统启动时自动启用交换空间
# 编辑/etc/fstab配置自动启用
# 格式:设备 挂载点 类型 选项 转储 检查
# 示例配置:
# 使用设备名
/dev/sdb1 none swap sw 0 0
# 使用UUID(推荐)
UUID=12345678-1234-1234-1234-123456789012 none swap sw,pri=100 0 0
# 使用标签
LABEL=swap_partition none swap sw,pri=1000 0 0
# 使用交换文件
/swapfile none swap sw,pri=50 0 0
# 启用TRIM支持(仅SSD)
/dev/nvme0n1p3 none swap sw,discard,pri=1000 0 0
# 启动后测试配置
sudo swapon -a # 启用所有配置的交换空间
swapon --show # 验证是否成功
交换空间性能监控
1. 实时监控交换使用情况
# 使用vmstat监控交换活动
vmstat 1 # 每秒刷新一次
# 使用sar监控交换统计
sar -W 1 # 每秒监控页面交换
# 使用top或htop
top
htop
# 专门查看交换信息
cat /proc/swaps
cat /proc/meminfo | grep -i swap
2. 监控脚本示例
#!/bin/bash
# 交换空间监控脚本
INTERVAL=5 # 监控间隔(秒)
COUNT=12 # 监控次数
echo "交换空间监控 - 每${INTERVAL}秒刷新"
echo "时间戳 总交换 使用中 百分比 优先级"
for ((i=0; i
常见问题解决
1. "设备忙"或"资源忙"错误
# 错误:swapon: /dev/sdb1: Device or resource busy
# 解决方案:检查设备是否已被启用
swapon --show | grep sdb1
# 如果已启用,先禁用再启用
sudo swapoff /dev/sdb1
sudo swapon /dev/sdb1
# 检查是否有其他进程使用
sudo lsof | grep /dev/sdb1
2. "权限被拒绝"错误
# 错误:swapon: /swapfile: Permission denied
# 解决方案:
# 1. 使用sudo
sudo swapon /swapfile
# 2. 检查文件权限
sudo chmod 600 /swapfile
sudo chown root:root /swapfile
# 3. 检查SELinux上下文(如果启用SELinux)
sudo restorecon /swapfile
3. 交换空间无法启用
# 检查交换空间是否已正确初始化
sudo mkswap /dev/sdb1 # 重新初始化(会丢失数据)
# 检查文件系统是否支持
# 对于交换文件,确保文件系统支持(ext4, xfs等)
# 检查内核是否支持交换文件
grep CONFIG_SWAP /boot/config-$(uname -r)
# 检查dmesg日志
dmesg | tail -20
4. 优先级设置不生效
# 检查当前优先级设置
swapon --show=NAME,PRIO
# 重新启用并设置优先级
sudo swapoff /dev/sdb1
sudo swapon -p 100 /dev/sdb1
# 检查/etc/fstab中的优先级设置
# 确保格式正确:sw,pri=100
性能优化技巧
1. 使用多个交换空间并设置优先级
# 配置多级交换空间
# 高速SSD交换分区 - 最高优先级
sudo swapon -d -p 1000 /dev/nvme0n1p3
# 快速SATA SSD交换分区 - 中等优先级
sudo swapon -p 500 /dev/sdb1
# 慢速HDD交换分区 - 低优先级
sudo swapon -p 10 /dev/sdc1
# 系统会优先使用高优先级的交换空间
2. 优化交换性参数
# 查看当前交换性设置
cat /proc/sys/vm/swappiness
# 临时调整(值越小,系统越少使用交换)
sudo sysctl vm.swappiness=10
# 永久调整
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 建议值:
# 桌面系统:10-30
# 服务器:1-10
# 数据库服务器:1
3. 启用压缩交换(zswap)
# zswap是内存中的压缩交换缓存
# 检查是否已启用
cat /sys/module/zswap/parameters/enabled
# 启用zswap(需要内核支持)
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
# 设置zswap参数
echo lz4 | sudo tee /sys/module/zswap/parameters/compressor
echo 20 | sudo tee /sys/module/zswap/parameters/max_pool_percent
4. 使用交换文件替代交换分区
# 交换文件更灵活,易于调整大小
# 创建交换文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
# 启用交换文件
sudo swapon /swapfile
# 调整交换文件大小
sudo swapoff /swapfile
sudo fallocate -l 8G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
高级配置
1. 加密交换空间
# 使用dm-crypt创建加密交换空间
# 1. 创建加密设备
sudo cryptsetup luksFormat /dev/sdb1
# 2. 打开加密设备
sudo cryptsetup luksOpen /dev/sdb1 cryptswap
# 3. 创建交换空间
sudo mkswap /dev/mapper/cryptswap
# 4. 启用加密交换空间
sudo swapon /dev/mapper/cryptswap
# 5. 配置/etc/crypttab和/etc/fstab实现自动启用
2. 使用LVM逻辑卷作为交换空间
# 1. 创建逻辑卷
sudo lvcreate -L 8G -n swap_lv vg_system
# 2. 创建交换空间
sudo mkswap /dev/vg_system/swap_lv
# 3. 启用交换空间
sudo swapon /dev/vg_system/swap_lv
# 4. 动态调整逻辑卷大小
# 增加交换空间大小
sudo swapoff /dev/vg_system/swap_lv
sudo lvextend -L +4G /dev/vg_system/swap_lv
sudo mkswap /dev/vg_system/swap_lv
sudo swapon /dev/vg_system/swap_lv
重要注意事项
- 性能影响:频繁使用交换空间会显著降低系统性能
- SSD寿命:在SSD上使用交换空间可能影响其使用寿命
- 数据安全:交换空间可能包含敏感信息,考虑使用加密交换
- 休眠支持:如需休眠功能,交换空间总大小应≥内存大小
- 监控必要:定期监控交换空间使用情况,避免交换抖动
- 适当大小:根据系统内存使用情况合理设置交换空间大小
- 优先级设置:合理设置优先级可优化多存储设备的性能
相关命令对比
| 命令 |
功能 |
与swapon的关系 |
swapoff |
禁用交换空间 |
与swapon功能相反 |
mkswap |
初始化交换空间 |
先使用mkswap初始化,再使用swapon启用 |
free |
显示内存和交换使用情况 |
用于查看swapon启用的交换空间使用情况 |
sysctl |
调整内核参数 |
可调整vm.swappiness影响交换行为 |
fallocate |
创建交换文件 |
为swapon准备交换文件 |
fstab |
系统启动配置 |
配置swapon -a自动启用的交换设备 |
安装相关工具
# swapon通常已包含在util-linux包中
# 检查是否安装
which swapon
# 如果需要安装(很少需要)
# Debian/Ubuntu
sudo apt-get install util-linux
# CentOS/RHEL
sudo yum install util-linux
# 安装监控工具
sudo apt-get install procps # 包含free, vmstat等
sudo apt-get install sysstat # 包含sar
sudo apt-get install htop # 更友好的进程查看器
# 安装LVM工具(如果需要使用逻辑卷)
sudo apt-get install lvm2
相关命令
swapoff - 禁用交换空间
mkswap - 初始化交换空间
free - 显示内存和交换使用情况
vmstat - 监控系统资源使用情况
sysctl - 调整内核参数
fallocate/dd - 创建交换文件
fstab - 系统启动配置文件
sar - 系统活动报告工具
cryptsetup - 加密交换空间
lvcreate/lvextend - LVM逻辑卷管理