Swap 大小一键调整脚本,这个脚本会自动完成检查权限、验证输入、关闭旧 Swap、创建新 Swap、设置永久生效 等所有步骤,新手也能直接使用。
第一步:创建并编辑脚本文件
-
打开终端,创建脚本文件(命名为
adjust_swap.sh):bashnano adjust_swap.sh -
将以下完整脚本复制粘贴到编辑器中:
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,重启后依然生效!"
- 保存并退出编辑器:按
Ctrl+O保存,按Ctrl+X退出。
第二步:运行脚本
-
给脚本添加执行权限:
bashchmod +x adjust_swap.sh -
以 root 权限运行脚本(必须用 sudo):
bashsudo ./adjust_swap.sh -
按照提示输入目标 Swap 大小(例如
4G、8G、2048M),回车后脚本会自动完成所有步骤。
关键说明
- 输入格式要求 :仅支持
数字+G或数字+M,例如4G(4GB)、2048M(2GB),不支持纯数字或其他单位。 - 权限要求 :必须用
sudo运行,否则无法修改 Swap 文件和/etc/fstab。 - 兼容性:适配 Ubuntu 18.04/20.04/22.04 等主流版本(默认使用 Swap 文件的版本)。
- 安全提示:脚本会自动备份/删除旧 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,重启后依然生效!
总结
- 脚本核心功能:自动完成关闭旧 Swap → 删除旧文件 → 创建新文件 → 权限/格式化 → 启用 → 永久挂载 全流程,无需手动分步操作。
- 输入规范:必须是
数字+G/M格式(如 4G、8G),避免格式错误导致脚本失败。 - 验证方法:运行完成后可通过
swapon --show或free -h确认 Swap 大小是否生效,重启系统后再次检查可验证是否永久生效。