🔍搜索⌘K

Ubuntu 添加 Swap 分区:完整操作指南(含创建与删除)

概述

Swap(交换分区 / 交换文件)是 Linux 里专门用来“扩展内存”的一块特殊磁盘空间——物理内存(RAM)不够用时,系统会把一部分暂时用不上的内存数据挪到 Swap 里,腾出物理内存给正在跑的程序;等那些程序又要跑了,再把数据从 Swap 搬回内存。

简单讲,Swap 就像系统的“应急内存”,但它毕竟是磁盘,读写速度比物理内存慢得多,只能临时顶一顶内存压力,没法真正代替物理内存。

Swap 大小规划建议

Swap 不是越大越好,得按物理内存大小合理分,太大浪费磁盘、太小又顶不住,分不好系统还容易出毛病:

物理内存(RAM)推荐 Swap 大小适用场景
≤ 2GB物理内存的 2 倍内存较小的轻量服务器 / 桌面
2GB ~ 8GB与物理内存容量相等常规开发 / 办公场景
8GB ~ 64GB4GB ~ 16GB高负载服务(如数据库)
> 64GB根据实际需求调整(16GB+)超大内存服务器(非必需)

一、创建并启用 Swap 分区(以 Swap 文件为例)

Ubuntu 里 Swap 有“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 格式,再把它启用起来:

# 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 各字段含义

字段说明
/swapfileSwap 文件路径
none挂载点(Swap 无需挂载点,固定为 none)
swap文件系统类型(固定为 swap)
sw挂载选项(Swap 专用选项,固定为 sw)
0(第一个)是否 dump 备份(0 表示不备份)
0(第二个)开机自检顺序(0 表示不自检)

二、删除 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,按自己实际需要调一下内存使用策略就行。