Spaw 空间可以理解为 Ubuntu 的虚拟内存,本文简要介绍并记录扩展方法。
简介
Ubuntu Swap 是内存管理的重要补充机制,可以将硬盘临时当作内存使用。
核心作用
-
扩展可用内存
当物理内存(RAM)不足时,系统会将非活跃数据临时转移至 Swap 空间,释放 RAM 供高优先级任务使用。
例如,当运行内存密集型应用(如视频渲染)时,系统可通过 Swap 避免进程崩溃。
-
提升系统稳定性
Swap 能防止因内存耗尽导致的系统冻结或程序无响应,尤其适用于多用户或多任务场景。通过平衡内存负载,Swap 可维持系统在资源紧张时的基本运行能力。
-
支持休眠功能
Ubuntu 的休眠(Hibernation)功能依赖 Swap 空间,系统会将当前内存状态完整保存到 Swap 中,并在唤醒时恢复。
实现形式
- Swap 分区
- 通过磁盘分区实现,具有固定容量和独立存储空间。
- 适用于长期稳定需求的场景,但调整容量需重新分区。
- Swap 文件
- 在现有文件系统中创建指定大小的文件作为虚拟内存,例如
/swapfile。
- 灵活性更高,支持动态调整容量(如
fallocate 或 dd 命令创建),管理成本更低。
工作机制
- 内存管理策略:通过
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 --show 和 free -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 -hecho -e "\n\033[32mSwap扩展成功!\033[0m"
|
文章链接:
https://www.zywvvd.com/notes/system/linux/extend-swap/extend-swap/