#!/bin/bash
# 确保脚本以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "❌ 错误: 请使用 root 权限或 sudo 运行此脚本!"
exit 1
fi
SWAP_FILE="/swapfile"
FSTAB_ENTRY="$SWAP_FILE none swap sw 0 0"
# 获取当前内存和 Swap 状态
show_status() {
echo "========================================"
echo " 当前系统内存与 Swap 状态"
echo "========================================"
free -h
echo "========================================"
}
# 1. 安装/创建 Swap
install_swap() {
if [ -f "$SWAP_FILE" ]; then
echo "⚠️ 提示: 检测到已经存在 $SWAP_FILE。"
echo "如果你想改变大小,请在主菜单选择 [3] 调整大小。"
return
fi
read -p "请输入你想创建的 Swap 大小 (例如: 2G, 4G): " swap_size
# 转换为大写并去掉最后的 G
swap_size=$(echo "$swap_size" | tr 'a-z' 'A-Z' | sed 's/G//g')
if [[ ! "$swap_size" =~ ^[0-9]+$ ]]; then
echo "❌ 错误: 输入格式不正确,请输入类似 '2G' 或 '4G' 的数字。"
return
fi
echo "⏳ 正在分配 ${swap_size}G 空间,请稍候..."
fallocate -l "${swap_size}G" $SWAP_FILE 2>/dev/null
if [ $? -ne 0 ]; then
# 如果 fallocate 失败,则使用 dd
dd if=/dev/zero of=$SWAP_FILE bs=1M count=$((swap_size * 1024))
fi
echo "🔒 正在锁定文件权限 (chmod 600)..."
chmod 600 $SWAP_FILE
echo "⚙️ 正在格式化为 Swap..."
mkswap $SWAP_FILE
echo "🚀 正在激活 Swap..."
swapon $SWAP_FILE
# 写入开机自启
if ! grep -q "$SWAP_FILE" /etc/fstab; then
echo "$FSTAB_ENTRY" >> /etc/fstab
fi
# 优化 swappiness
sysctl vm.swappiness=10
if ! grep -q "vm.swappiness" /etc/sysctl.conf; then
echo "vm.swappiness=10" >> /etc/sysctl.conf
else
sed -i 's/vm.swappiness.*/vm.swappiness=10/g' /etc/sysctl.conf
fi
echo "✅ 恭喜!${swap_size}G Swap 安装并配置成功,swappiness 已优化为 10!"
}
# 2. 卸载 Swap
uninstall_swap() {
if [ ! -f "$SWAP_FILE" ]; then
echo "⚠️ 提示: 系统中未找到 $SWAP_FILE,无需卸载。"
return
fi
echo "⏳ 正在停用 Swap(这可能需要一点时间,系统正在将数据搬回物理内存)..."
swapoff $SWAP_FILE
echo "🧹 正在删除 Swap 文件..."
rm -f $SWAP_FILE
echo "📝 正在清理 /etc/fstab 开机挂载配置..."
sed -i "\|\#\? *${SWAP_FILE} *|d" /etc/fstab
echo "✅ Swap 卸载干净了!"
}
# 3. 调整 Swap 大小
resize_swap() {
if [ ! -f "$SWAP_FILE" ]; then
echo "⚠️ 提示: 当前未安装 Swap,将直接进入安装流程。"
install_swap
return
fi
echo "🔄 正在为您调整 Swap 大小..."
echo "💡 提示:调整大小会先安全停用旧的 Swap,然后创建新的。"
uninstall_swap
echo "----------------------------------------"
install_swap
}
# 主循环菜单
while true; do
clear
show_status
echo "欢迎使用 Ubuntu Swap 一键管理脚本"
echo "[1] 安装/创建 Swap"
echo "[2] 完全卸载 Swap"
echo "[3] 调整 Swap 大小"
echo "[4] 退出脚本"
echo "----------------------------------------"
read -p "请输入数字选择功能 [1-4]: " choice
case $choice in
1)
install_swap
read -p "按回车键继续..." dummy
;;
2)
uninstall_swap
read -p "按回车键继续..." dummy
;;
3)
resize_swap
read -p "按回车键继续..." dummy
;;
4)
echo "👋 再见!"
exit 0
;;
*)
echo "❌ 无效输入,请输入 1 到 4 之间的数字。"
sleep 1
;;
esac
done
🚀 如何在你的阿里云 VPS 上使用它?
你只需要把上面这段代码丢进你的 Ubuntu 终端:
新建文件:
nano swap_manager.sh(把上面的脚本内容复制进去,按
Ctrl+O保存,Ctrl+X退出)赋予执行权限:
chmod +x swap_manager.sh运行脚本(因为涉及虚拟内存调整,必须加
sudo):
sudo ./swap_manager.sh
💡 脚本亮点说明:
容错处理:在分配空间时,优先使用速度极快的
fallocate(瞬间完成),如果系统内核或文件系统不支持,脚本会自动无缝切换到兼容性最好的dd命令,确保在各种 Ubuntu 版本上都能成功。干净的卸载:很多人卸载 Swap 只是删了文件,忘了删
/etc/fstab,导致下次开机直接系统报错甚至进不去系统。这个脚本使用sed做了精准的行匹配删除,非常安全。
评论区