Swap 大小一键调整脚本

Swap 大小一键调整脚本,这个脚本会自动完成检查权限、验证输入、关闭旧 Swap、创建新 Swap、设置永久生效 等所有步骤,新手也能直接使用。

第一步:创建并编辑脚本文件

  1. 打开终端,创建脚本文件(命名为 adjust_swap.sh):

    bash 复制代码
    nano adjust_swap.sh
  2. 将以下完整脚本复制粘贴到编辑器中:

bash 复制代码
#!/bin/bash
# Ubuntu Swap 大小一键调整脚本
# 使用说明:需以 root 权限运行,输入目标大小(如 4G、8G、2048M)

# 检查是否以 root 权限运行
if [ $EUID -ne 0 ]; then
    echo "错误:请使用 sudo 或以 root 用户运行此脚本!"
    exit 1
fi

# 提示用户输入目标 Swap 大小
read -p "请输入目标 Swap 大小(支持 G/M 单位,如 4G、2048M):" SWAP_SIZE

# 验证输入格式(必须包含数字+G/M)
if ! [[ $SWAP_SIZE =~ ^[0-9]+[GM]$ ]]; then
    echo "错误:输入格式无效!请按示例格式输入,如 4G、8G、2048M。"
    exit 1
fi

# 定义 Swap 文件路径(Ubuntu 默认路径)
SWAP_FILE="/swapfile"

# 第一步:查看当前 Swap 状态
echo -e "\n===== 当前 Swap 状态 ====="
swapon --show
free -h | grep -E "Swap|交换"

# 第二步:关闭当前 Swap 文件(如果存在)
echo -e "\n===== 关闭现有 Swap 文件 ====="
if swapon --show | grep -q "$SWAP_FILE"; then
    swapoff "$SWAP_FILE"
    if [ $? -eq 0 ]; then
        echo "成功关闭 $SWAP_FILE"
    else
        echo "错误:关闭 $SWAP_FILE 失败!"
        exit 1
    fi
else
    echo "未检测到正在使用的 $SWAP_FILE,跳过关闭步骤"
fi

# 第三步:删除旧的 Swap 文件(如果存在)
echo -e "\n===== 删除旧 Swap 文件 ====="
if [ -f "$SWAP_FILE" ]; then
    rm -f "$SWAP_FILE"
    echo "成功删除旧的 $SWAP_FILE"
else
    echo "未检测到旧的 $SWAP_FILE,跳过删除步骤"
fi

# 第四步:创建新的 Swap 文件(优先用 fallocate,失败则用 dd)
echo -e "\n===== 创建 $SWAP_SIZE 大小的 Swap 文件 ====="
if fallocate -l "$SWAP_SIZE" "$SWAP_FILE"; then
    echo "使用 fallocate 成功创建 $SWAP_SIZE 的 Swap 文件"
else
    echo "fallocate 失败,改用 dd 命令创建..."
    # 转换单位为 MB(dd 更适配 MB 单位)
    SIZE_NUM=$(echo "$SWAP_SIZE" | sed 's/[GM]//g')
    SIZE_UNIT=$(echo "$SWAP_SIZE" | sed 's/[0-9]//g')
    if [ "$SIZE_UNIT" = "G" ]; then
        SIZE_MB=$((SIZE_NUM * 1024))
    else
        SIZE_MB=$SIZE_NUM
    fi
    dd if=/dev/zero of="$SWAP_FILE" bs=1M count="$SIZE_MB"
    if [ $? -eq 0 ]; then
        echo "使用 dd 成功创建 $SWAP_SIZE 的 Swap 文件"
    else
        echo "错误:创建 Swap 文件失败!"
        exit 1
    fi
fi

# 第五步:设置 Swap 文件权限(必须为 600,否则系统拒绝使用)
echo -e "\n===== 设置 Swap 文件权限 ====="
chmod 600 "$SWAP_FILE"
if [ $? -eq 0 ]; then
    echo "成功设置 $SWAP_FILE 权限为 600"
else
    echo "错误:设置权限失败!"
    exit 1
fi

# 第六步:格式化 Swap 文件
echo -e "\n===== 格式化 Swap 文件 ====="
mkswap "$SWAP_FILE"
if [ $? -eq 0 ]; then
    echo "成功格式化 $SWAP_FILE 为 Swap 格式"
else
    echo "错误:格式化 Swap 文件失败!"
    exit 1
fi

# 第七步:启用新的 Swap 文件
echo -e "\n===== 启用新 Swap 文件 ====="
swapon "$SWAP_FILE"
if [ $? -eq 0 ]; then
    echo "成功启用 $SWAP_FILE"
else
    echo "错误:启用 Swap 文件失败!"
    exit 1
fi

# 第八步:设置开机自动挂载(确保永久生效)
echo -e "\n===== 设置开机自动挂载 ====="
FSTAB_ENTRY="$SWAP_FILE none swap sw 0 0"
if grep -qxF "$FSTAB_ENTRY" /etc/fstab; then
    echo "/etc/fstab 中已存在 Swap 挂载条目,无需重复添加"
else
    echo "$FSTAB_ENTRY" >> /etc/fstab
    if [ $? -eq 0 ]; then
        echo "成功将 Swap 挂载条目添加到 /etc/fstab"
    else
        echo "警告:添加到 /etc/fstab 失败!重启后 Swap 可能失效,请手动检查。"
    fi
fi

# 第九步:验证最终结果
echo -e "\n===== 调整完成!最终 Swap 状态 ====="
swapon --show
free -h | grep -E "Swap|交换"

echo -e "\n✅ Swap 大小已成功调整为 $SWAP_SIZE,重启后依然生效!"
  1. 保存并退出编辑器:按 Ctrl+O 保存,按 Ctrl+X 退出。

第二步:运行脚本

  1. 给脚本添加执行权限:

    bash 复制代码
    chmod +x adjust_swap.sh
  2. 以 root 权限运行脚本(必须用 sudo):

    bash 复制代码
    sudo ./adjust_swap.sh
  3. 按照提示输入目标 Swap 大小(例如 4G8G2048M),回车后脚本会自动完成所有步骤。

关键说明

  1. 输入格式要求 :仅支持 数字+G数字+M,例如 4G(4GB)、2048M(2GB),不支持纯数字或其他单位。
  2. 权限要求 :必须用 sudo 运行,否则无法修改 Swap 文件和 /etc/fstab
  3. 兼容性:适配 Ubuntu 18.04/20.04/22.04 等主流版本(默认使用 Swap 文件的版本)。
  4. 安全提示:脚本会自动备份/删除旧 Swap 文件,不会影响系统数据,但建议运行前关闭大型软件。

示例运行效果

复制代码
请输入目标 Swap 大小(支持 G/M 单位,如 4G、2048M):8G

===== 当前 Swap 状态 =====
NAME      TYPE SIZE USED PRIO
/swapfile file 4G   1.2G -2
Swap:      4.0Gi   1.2Gi   2.8Gi

===== 关闭现有 Swap 文件 =====
成功关闭 /swapfile

===== 删除旧 Swap 文件 =====
成功删除旧的 /swapfile

===== 创建 8G 大小的 Swap 文件 =====
使用 fallocate 成功创建 8G 的 Swap 文件

===== 设置 Swap 文件权限 =====
成功设置 /swapfile 权限为 600

===== 格式化 Swap 文件 =====
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
成功格式化 /swapfile 为 Swap 格式

===== 启用新 Swap 文件 =====
成功启用 /swapfile

===== 设置开机自动挂载 =====
/etc/fstab 中已存在 Swap 挂载条目,无需重复添加

===== 调整完成!最终 Swap 状态 =====
NAME      TYPE SIZE USED PRIO
/swapfile file 8G   0B   -2
Swap:      8.0Gi   0.0Gi   8.0Gi

✅ Swap 大小已成功调整为 8G,重启后依然生效!

总结

  1. 脚本核心功能:自动完成关闭旧 Swap → 删除旧文件 → 创建新文件 → 权限/格式化 → 启用 → 永久挂载 全流程,无需手动分步操作。
  2. 输入规范:必须是 数字+G/M 格式(如 4G、8G),避免格式错误导致脚本失败。
  3. 验证方法:运行完成后可通过 swapon --showfree -h 确认 Swap 大小是否生效,重启系统后再次检查可验证是否永久生效。
相关推荐
夏幻灵2 小时前
Java中的this关键字解析与应用
java·开发语言·python
Light602 小时前
智能融合,赋能未来:业财一体化与RPA的深度交响
人工智能·数字化转型·业财一体化·流程再造·机器人流程自动化·智能财务
kicikng2 小时前
智能体来了(西南总部):AI Agent 指挥官与 AI 调度官如何重塑企业智能体体系
人工智能·大模型·智能调度·智能体体系·应用层架构
老陈聊架构2 小时前
『AI工具』AIShort部署实战:一键部署专属AI提示词管理与共享平台
人工智能·开源·提示词·aishort
小龙报2 小时前
【SOLIDWORKS 练习题】草图专题:2.GAME BOY
人工智能·驱动开发·硬件架构·硬件工程·pcb工艺·材料工程·精益工程
亿坊电商2 小时前
如何选择合适的AI数字人开发框架?
人工智能
DS随心转APP2 小时前
怎么导出豆包聊天记录
人工智能·ai·豆包·deepseek·ds随心转
Java后端的Ai之路2 小时前
【AI应用开发工程师】-RAG知识切片(chunk)策略解读
人工智能·chunk·切片·rag·ai应用开发工程师
x新观点2 小时前
2026年亚马逊广告AI工具推荐:AI驱动优化成卖家新宠
大数据·人工智能