Ubuntu 添加 Swap 分区:完整操作指南(含创建与删除)
概述
Swap(交换分区 / 交换文件)是 Linux 系统中用于 “扩展内存” 的特殊磁盘空间 —— 当物理内存(RAM)不足时,系统会将部分暂时闲置的内存数据转移到 Swap 中,释放物理内存供当前活跃的程序使用;当闲置程序需要重新运行时,再从 Swap 恢复数据到内存。
简单来说,Swap 相当于系统的 “应急内存”,但因基于磁盘存储,读写速度远慢于物理内存,仅适合临时缓解内存压力,不能替代物理内存。
Swap 大小规划建议
Swap 空间并非越大越好,需结合物理内存容量合理分配,避免浪费磁盘资源或因空间不足导致系统错误:
物理内存(RAM) | 推荐 Swap 大小 | 适用场景 |
---|---|---|
≤ 2GB | 物理内存的 2 倍 | 内存较小的轻量服务器 / 桌面 |
2GB ~ 8GB | 与物理内存容量相等 | 常规开发 / 办公场景 |
8GB ~ 64GB | 4GB ~ 16GB | 高负载服务(如数据库) |
> 64GB | 根据实际需求调整(16GB+) | 超大内存服务器(非必需) |
一、创建并启用 Swap 分区(以 Swap 文件为例)
Ubuntu 支持 “Swap 分区” 和 “Swap 文件” 两种形式,Swap 文件无需重新分区磁盘,操作更灵活,适合大多数场景(以下以创建 8GB Swap 文件为例)。
步骤 1:检查当前系统内存与 Swap 状态
先确认物理内存使用情况及是否已存在 Swap,避免重复创建:
# 1. 查看内存与 Swap 整体使用情况(-m 表示以 MB 为单位)
free -m
# 2. 查看已启用的 Swap 详情(若输出为空,说明当前无 Swap)
swapon -s
# 或用更直观的命令:
cat /proc/swaps
步骤 2:创建 Swap 文件
使用 fallocate 命令快速分配指定大小的 Swap 文件(若系统无 fallocate,可改用 dd if=/dev/zero of=/swapfile bs=1G count=8,但速度较慢):
# 分配 8GB 空间到 /swapfile(路径固定为根目录,文件名可自定义)
sudo fallocate -l 8G /swapfile
# 验证文件是否创建成功(需显示文件大小约为 8.0G)
ls -lh /swapfile
# 正确输出示例:-rw-r--r-- 1 root root 8.0G Jul 4 10:00 /swapfile
步骤 3:设置 Swap 文件权限
为避免普通用户误操作,需将 Swap 文件权限限制为 “仅 root 可读写”:
sudo chmod 600 /swapfile
# 验证权限(需显示 -rw-------)
ls -lh /swapfile
步骤 4:格式化并启用 Swap 文件
将普通文件格式化为 Swap 格式,再启用 Swap 功能:
# 1. 格式化 /swapfile 为 Swap 格式(执行后会提示确认,输入 y 即可)
sudo mkswap /swapfile
# 成功提示示例:Setting up swapspace version 1, size = 8 GiB (8589934592 bytes)
# 2. 启用 Swap 文件(让系统立即识别并使用该 Swap)
sudo swapon /swapfile
# 3. 再次验证 Swap 是否生效(输出中需包含 /swapfile 条目)
swapon -s
# 或用 free -m 查看(Swap 列会显示 8192 MB 左右)
步骤 5:设置 Swap 开机自动挂载
默认情况下,手动创建的 Swap 文件重启后会失效,需将其添加到 /etc/fstab 配置文件,实现开机自动启用:
# 方式 1:用 tee 命令追加配置(推荐,避免权限问题)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 方式 2:用 bash 重定向追加(效果相同,任选其一)
sudo bash -c "echo '/swapfile none swap sw 0 0' >> /etc/fstab"
# 验证配置是否添加成功(需显示最后一行包含 /swapfile)
cat /etc/fstab
配置说明:/swapfile none swap sw 0 0 各字段含义
字段 | 说明 |
---|---|
/swapfile | Swap 文件路径 |
none | 挂载点(Swap 无需挂载点,固定为 none) |
swap | 文件系统类型(固定为 swap) |
sw | 挂载选项(Swap 专用选项,固定为 sw) |
0(第一个) | 是否 dump 备份(0 表示不备份) |
0(第二个) | 开机自检顺序(0 表示不自检) |
二、删除 Swap 文件(如需清理)
若后续不再需要 Swap,或需调整 Swap 大小,可按以下步骤安全删除:
# 步骤 1:先禁用当前 Swap 文件(避免数据损坏)
sudo swapoff /swapfile
# 步骤 2:删除 Swap 文件本身
sudo rm /swapfile
# 步骤 3:删除 /etc/fstab 中的自动挂载配置(避免开机报错)
sudo sed -i '/swapfile/d' /etc/fstab
# 步骤 4:验证删除结果(输出为空,说明 Swap 已完全移除)
swapon -s
三、常见问题与优化(可选)
1. 调整 Swap 优先级(swappiness)
swappiness 是系统使用 Swap 的倾向参数(取值 0~100):
数值越小:系统越倾向于使用物理内存,仅在内存严重不足时使用 Swap(推荐服务器场景,如设为 10)
数值越大:系统越容易使用 Swap(适合桌面场景,默认值通常为 60)
# 1. 查看当前 swappiness 值
cat /proc/sys/vm/swappiness
# 2. 临时调整(重启后失效,用于测试)
sudo sysctl vm.swappiness=10
# 3. 永久调整(添加到 /etc/sysctl.conf)
sudo echo 'vm.swappiness=10' >> /etc/sysctl.conf
# 生效配置
sudo sysctl -p
2. 报错:fallocate: 无法分配空间:不支持的操作
若执行 fallocate 时提示此错误,可能是文件系统不支持(如 XFS、ext3 旧版本),改用 dd 命令创建 Swap 文件:
# 分配 8GB Swap 文件(bs=1G 表示每次读写 1GB,count=8 表示共 8 次)
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
# 后续步骤(权限、格式化、挂载)与前文一致
3. 验证 Swap 是否正常工作
可通过模拟内存占用测试 Swap 是否生效:
# 安装内存测试工具(可选)
sudo apt install stress-ng
# 模拟占用 7GB 内存(假设物理内存为 8GB,会触发 Swap 使用)
stress-ng --vm 1 --vm-bytes 7G --vm-hang 60
# 另开一个终端,用 free -m 查看(Swap 会逐渐增加占用)
通过以上步骤,可在 Ubuntu 系统中安全、高效地创建或删除 Swap 空间,根据实际需求优化系统内存使用策略。