View Categories

Linux Swap 管理脚本:快速启用、禁用与删除

阅读时间: 1 分钟

Linux 系统在内存不足时使用 Swap 空间进行内存补充。本脚本可帮助你轻松创建、启用、禁用和删除 Swap 文件。

1. 脚本功能概览 #

  • 创建并启用 swap 文件(默认 2G,支持指定大小)
  • 自动写入 /etc/fstab,重启后仍有效
  • 可检测已有 swap,避免重复创建
  • 支持禁用并删除 swap 文件
  • 使用参数控制行为(onoff

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 --showfree -h 检查当前 swap 状态。

6. Swap 使用建议 #

Swap 并非越大越好,设置前可参考以下建议:

  • 内存小于 2GB 的服务器:建议设置 1~2GB 的 swap,用于缓解临时性内存压力。
  • 内存 2~4GB 的服务器:如无特殊需求,可设置 1G 左右,避免频繁交换影响性能。
  • 内存超过 8GB 的服务器:除非存在大编译、内存峰值或休眠等场景,可考虑不启用 swap,或设置较小值(如 512M)以提供安全缓冲。

详细信息可参考:

更新 2025-05-04