Swap交换文件一键创建脚本,按用户要求完成Swap交换文件的创建,可以自定义Swap文件大小、Swappiness值以及Swap文件路径,在Debian 12下测试通过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash

# 交互式获取 Swap 大小
echo -n "请输入 Swap 大小 (单位 MB): "
read SWAP_SIZE

# 检查输入是否为正整数
if ! [[ "$SWAP_SIZE" =~ ^[0-9]+$ ]]; then
echo "无效输入,请输入一个正整数。"
exit 1
fi

# 交互式获取 Swappiness 值
echo -n "请输入 Swappiness 值 (1-100, 默认 60): "
read SWAPPINESS
SWAPPINESS=${SWAPPINESS:-60}

# 检查 Swappiness 是否在 1-100 之间
if ! [[ "$SWAPPINESS" =~ ^[0-9]+$ ]] || [ "$SWAPPINESS" -lt 1 ] || [ "$SWAPPINESS" -gt 100 ]; then
echo "无效输入,请输入 1 到 100 之间的整数。"
exit 1
fi

# 检查是否是 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 用户或 sudo 运行此脚本。"
exit 1
fi

# 查找现有的 Swap 文件
EXISTING_SWAP=$(swapon --show=NAME --noheadings)
if [ -n "$EXISTING_SWAP" ]; then
echo "检测到已有 Swap ($EXISTING_SWAP),正在删除..."
swapoff "$EXISTING_SWAP"
rm -f "$EXISTING_SWAP"
sed -i "\|$EXISTING_SWAP|d" /etc/fstab
echo "已删除现有 Swap。"
fi

# 交互式设置 Swap 文件路径
echo -n "请输入新的 Swap 文件路径 (默认: /swapfile): "
read SWAP_FILE
SWAP_FILE=${SWAP_FILE:-/swapfile}

# 创建新的 swap 文件
fallocate -l ${SWAP_SIZE}M "$SWAP_FILE" || dd if=/dev/zero of="$SWAP_FILE" bs=1M count=$SWAP_SIZE
chmod 600 "$SWAP_FILE"
mkswap "$SWAP_FILE"

# 启用 swap
swapon "$SWAP_FILE"

# 配置开机自动挂载
if ! grep -q "$SWAP_FILE" /etc/fstab; then
echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab
fi

# 设置 swappiness
if grep -q "vm.swappiness" /etc/sysctl.conf; then
sed -i "s/^vm.swappiness=.*/vm.swappiness=$SWAPPINESS/" /etc/sysctl.conf
else
echo "vm.swappiness=$SWAPPINESS" >> /etc/sysctl.conf
fi
sysctl -p

# 显示 swap 状态
swapon --show
echo "Swap 创建完成,已启用并配置为开机启动,Swappiness 设置为 $SWAPPINESS。"