本文最后更新于:2025年4月19日 晚上

Spaw 空间可以理解为 Ubuntu 的虚拟内存,本文简要介绍并记录扩展方法。

简介

Ubuntu Swap 是内存管理的重要补充机制,可以将硬盘临时当作内存使用。

核心作用

  1. 扩展可用内存
    当物理内存(RAM)不足时,系统会将非活跃数据临时转移至 Swap 空间,释放 RAM 供高优先级任务使用‌。

    例如,当运行内存密集型应用(如视频渲染)时,系统可通过 Swap 避免进程崩溃。

  2. 提升系统稳定性
    Swap 能防止因内存耗尽导致的系统冻结或程序无响应,尤其适用于多用户或多任务场景‌。通过平衡内存负载,Swap 可维持系统在资源紧张时的基本运行能力‌。

  3. 支持休眠功能
    Ubuntu 的休眠(Hibernation)功能依赖 Swap 空间,系统会将当前内存状态完整保存到 Swap 中,并在唤醒时恢复‌。

实现形式

  1. Swap 分区
    • 通过磁盘分区实现,具有固定容量和独立存储空间‌。
    • 适用于长期稳定需求的场景,但调整容量需重新分区‌。
  2. Swap 文件
    • 在现有文件系统中创建指定大小的文件作为虚拟内存,例如 /swapfile‌。
    • 灵活性更高,支持动态调整容量(如 fallocatedd 命令创建),管理成本更低‌。

工作机制

  • 内存管理策略‌:通过 swappiness 参数(默认值 60)控制系统使用 Swap 的倾向性。数值越高,系统越早启用 Swap‌。
  • 数据交换流程‌:内核将长时间未使用的内存页标记为“非活跃”,逐步迁移至 Swap 空间,并通过 LRU(最近最少使用)算法优化数据保留优先级‌。

局限性

  • 性能差异‌:Swap 本质是磁盘存储,访问速度远低于物理内存(HDD 延迟约 5ms,SSD 约 0.1ms,RAM 仅约 0.1μs)‌。
  • 配置原则‌:Swap 不能替代物理内存,仅作为临时扩展手段。建议根据工作负载配置 RAM 与 Swap 的合理比例(如开发环境推荐 Swap ≥ 物理内存的 50%)‌。

扩展 Swap

通过 ‌创建 Swap 文件‌ 扩展 Ubuntu 系统的虚拟内存,核心流程如下:


1. 权限验证

  • 检查是否以 root 执行,避免权限不足导致关键操作失败(如修改系统配置)。

2. 关闭现有 Swap

  • 使用 swapoff -a 关闭所有活动的 Swap 分区/文件,确保后续操作不会与现有 Swap 冲突。

3. 创建 Swap 文件

  • 路径管理‌:默认创建 /swapfile,若已存在则删除旧文件。
  • 空间分配‌:优先用 fallocate 快速分配 32GB 空间(速度快),失败时改用 dd 逐字节写入(兼容性高但耗时)。

4. 格式化为 Swap 空间

  • 通过 mkswap 将文件格式化为 Swap 专用格式,标记为系统可识别的虚拟内存区域。

5. 启用 Swap 并持久化

  • 即时生效‌:swapon 命令激活新 Swap 文件。
  • 持久配置‌:修改 /etc/fstab 文件,确保系统重启后自动加载该 Swap。

6. 验证与反馈

  • 最终通过 swapon --showfree -h 输出 Swap 状态,确认操作成功。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash

# Ubuntu Swap 扩展脚本 (扩展至32GB)
# 执行前请确保有足够的磁盘空间(建议预留至少34GB)
# 需要 root 权限执行

# 检查是否以root运行
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 sudo 或 root 权限运行此脚本"
exit 1
fi

# 当前Swap信息
echo -e "\n\033[34m当前Swap配置:\033[0m"
swapon --show

# 关闭现有Swap
echo -e "\n\033[34m正在关闭Swap...\033[0m"
swapoff -a

# 创建32GB Swap文件(默认路径为/swapfile)
SWAP_FILE="/swapfile"
echo -e "\n\033[34m创建32GB Swap文件 ($SWAP_FILE)...\033[0m"

# 检查已有交换文件
if [ -f "$SWAP_FILE" ]; then
rm -f "$SWAP_FILE"
fi

# 使用fallocate快速创建(若失败则用dd
if ! fallocate -l 32G "$SWAP_FILE"; then
echo -e "\033[33mfallocate 失败,改用dd创建(耗时较长)...\033[0m"
dd if=/dev/zero of="$SWAP_FILE" bs=1G count=32 status=progress
fi

# 设置权限
chmod 600 "$SWAP_FILE"

# 格式化Swap
echo -e "\n\033[34m格式化Swap文件...\033[0m"
mkswap "$SWAP_FILE"

# 启用Swap
echo -e "\n\033[34m启用新Swap...\033[0m"
swapon "$SWAP_FILE"

# 更新fstab配置
echo -e "\n\033[34m更新/etc/fstab配置...\033[0m"
if ! grep -q "$SWAP_FILE" /etc/fstab; then
echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab
else
sed -i "s|^$SWAP_FILE.*|$SWAP_FILE none swap sw 0 0|" /etc/fstab
fi

# 验证结果
echo -e "\n\033[34m最终Swap配置:\033[0m"
swapon --show
free -h

echo -e "\n\033[32mSwap扩展成功!\033[0m"


文章链接:
https://www.zywvvd.com/notes/system/linux/extend-swap/extend-swap/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Ubuntu Swap 简介与空间扩展
https://www.zywvvd.com/notes/system/linux/extend-swap/extend-swap/
作者
Yiwei Zhang
发布于
2025年4月19日
许可协议