惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
罗磊的独立博客
量子位
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
M
MIT News - Artificial intelligence
月光博客
月光博客
IT之家
IT之家
D
DataBreaches.Net
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
D
Docker
The GitHub Blog
The GitHub Blog
B
Blog
V
Visual Studio Blog
博客园 - Franky
N
Netflix TechBlog - Medium
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
博客园 - 聂微东
U
Unit 42

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
Ubuntu Swap 简介与空间扩展
Yiwei Zhang · 2025-04-19 · via 又见苍岚

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/