Linux 系统在内存不足时使用 Swap 空间进行内存补充。本脚本可帮助你轻松创建、启用、禁用和删除 Swap 文件。
1. 脚本功能概览 #
- 创建并启用 swap 文件(默认 2G,支持指定大小)
- 自动写入
/etc/fstab
,重启后仍有效 - 可检测已有 swap,避免重复创建
- 支持禁用并删除 swap 文件
- 使用参数控制行为(
on
或off
)
2. 查看当前 Swap 状态 #
可以使用以下命令查看当前 swap 使用情况:
Bash
free -h
sudo swapon --show
free -h
会显示总内存和 swap 的使用量swapon --show
会列出所有启用的 swap 设备或文件。
3. 使用方法 #
Bash
sudo bash manage-swap.sh [on|off] [大小]
on
(默认) → 创建并启用 swap 文件(如未指定大小,则为 2G)off
→ 禁用并删除 swap 文件
示例 #
Bash
sudo bash manage-swap.sh # 创建默认 2GB swap
sudo bash manage-swap.sh on 1G # 创建 1GB swap 文件
sudo bash manage-swap.sh off # 删除 swap
4. 脚本内容 #
你可以将以下脚本保存为 manage-swap.sh
文件,并使用 sudo bash manage-swap.sh
来运行它:
Bash
#!/bin/bash
ACTION=${1:-on}
SWAP_SIZE=${2:-2G}
SWAP_FILE="/swapfile"
enable_swap() {
if swapon --show | grep -q "$SWAP_FILE"; then
echo "Swap 文件 $SWAP_FILE 已启用,跳过操作。"
exit 0
fi
if swapon --show | grep -q "^"; then
echo "系统已启用其他 swap,跳过创建。"
exit 0
fi
if [ -f "$SWAP_FILE" ]; then
echo "Swap 文件已存在但未启用,正在启用..."
chmod 600 "$SWAP_FILE"
mkswap "$SWAP_FILE"
swapon "$SWAP_FILE"
grep -q "$SWAP_FILE" /etc/fstab || echo "$SWAP_FILE none swap sw 0 0" | tee -a /etc/fstab
echo "Swap 文件启用成功。"
exit 0
fi
echo "创建 ${SWAP_SIZE} 的 swap 文件..."
fallocate -l "$SWAP_SIZE" "$SWAP_FILE"
chmod 600 "$SWAP_FILE"
mkswap "$SWAP_FILE"
swapon "$SWAP_FILE"
echo "$SWAP_FILE none swap sw 0 0" | tee -a /etc/fstab
echo "Swap 文件创建并启用成功。"
}
disable_swap() {
if swapon --show | grep -q "$SWAP_FILE"; then
echo "正在禁用 swap..."
swapoff "$SWAP_FILE"
else
echo "Swap 文件未启用,跳过 swapoff。"
fi
if grep -q "$SWAP_FILE" /etc/fstab; then
echo "从 /etc/fstab 中移除 swap 配置..."
sed -i "\|$SWAP_FILE|d" /etc/fstab
fi
if [ -f "$SWAP_FILE" ]; then
echo "删除 swap 文件..."
rm -f "$SWAP_FILE"
fi
echo "Swap 文件已禁用并删除。"
}
if [ "$ACTION" = "on" ]; then
enable_swap
elif [ "$ACTION" = "off" ]; then
disable_swap
else
echo "无效参数:$ACTION"
echo "用法: sudo bash $0 [on|off] [大小]"
exit 1
fi
5. 注意事项 #
- 请使用
sudo
权限执行脚本,否则创建或挂载将失败。 - 本脚本适用于大多数现代 Linux 发行版(如 Ubuntu、Debian、CentOS)。
- 如果你的系统已有挂载的 swap 分区,请谨慎使用。
- 建议通过
swapon --show
和free -h
检查当前 swap 状态。
6. Swap 使用建议 #
Swap 并非越大越好,设置前可参考以下建议:
- 内存小于 2GB 的服务器:建议设置 1~2GB 的 swap,用于缓解临时性内存压力。
- 内存 2~4GB 的服务器:如无特殊需求,可设置 1G 左右,避免频繁交换影响性能。
- 内存超过 8GB 的服务器:除非存在大编译、内存峰值或休眠等场景,可考虑不启用 swap,或设置较小值(如 512M)以提供安全缓冲。
详细信息可参考: