-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetswap.sh
More file actions
66 lines (53 loc) · 2.2 KB
/
setswap.sh
File metadata and controls
66 lines (53 loc) · 2.2 KB
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
#!/bin/bash
# 检查 root 权限
if [ "$(id -u)" -ne 0 ]; then
echo "错误:请使用 root 用户或通过 sudo 运行此脚本。"
exit 1
fi
# 旧的一键命令(已注释,避免重复执行)
# SWAP_SIZE_GB=2 && SWAPFILE=/swapfile && echo "[+] 创建 $SWAP_SIZE_GB GB 的 Swap 文件..." && (fallocate -l ${SWAP_SIZE_GB}G $SWAPFILE 2>/dev/null || dd if=/dev/zero of=$SWAPFILE bs=1M count=$(($SWAP_SIZE_GB * 1024))) && chmod 600 $SWAPFILE && mkswap $SWAPFILE && swapon $SWAPFILE && grep -q "$SWAPFILE" /etc/fstab || echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab && sysctl -w vm.swappiness=10 && grep -q "vm.swappiness" /etc/sysctl.conf || echo "vm.swappiness=10" >> /etc/sysctl.conf && echo "[✓] Swap 设置完成:" && swapon --show && free -h
# 设置 Swap 大小(单位 GB)
SWAP_SIZE_GB=2
SWAPFILE=/swapfile
# 检查是否已存在 Swap 文件
if [ -f "$SWAPFILE" ]; then
echo "发现已存在 $SWAPFILE"
if grep -q "$SWAPFILE" /proc/swaps; then
echo "警告:Swap 文件 $SWAPFILE 已在运行中。"
swapon --show
exit 0
else
echo "警告:文件存在但未挂载,将覆盖重建..."
swapoff $SWAPFILE 2>/dev/null
rm -f $SWAPFILE
fi
fi
echo "[+] 创建 $SWAP_SIZE_GB GB 的 Swap 文件..."
# 针对 Btrfs 文件系统的特殊处理 (需要 No_COW 属性)
# 适用于 Fedora, OpenSUSE, Arch 等
FILE_SYS=$(df -T $(dirname "$SWAPFILE") | tail -1 | awk '{print $2}')
if [[ "$FILE_SYS" == "btrfs" ]]; then
echo "检测到 Btrfs 文件系统,正在设置 No_COW 属性..."
touch "$SWAPFILE"
chattr +C "$SWAPFILE"
fi
# 创建 Swap 文件
fallocate -l ${SWAP_SIZE_GB}G $SWAPFILE 2>/dev/null || dd if=/dev/zero of=$SWAPFILE bs=1M count=$(($SWAP_SIZE_GB * 1024))
# 设置权限
chmod 600 $SWAPFILE
# 格式化为 swap
mkswap $SWAPFILE
# 启用 swap
swapon $SWAPFILE
# 写入 /etc/fstab 以便开机自动挂载(避免重复写入)
if ! grep -q "$SWAPFILE" /etc/fstab; then
echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi
# 设置 swappiness
sysctl -w vm.swappiness=10
if ! grep -q "vm.swappiness" /etc/sysctl.conf; then
echo "vm.swappiness=10" >> /etc/sysctl.conf
fi
echo "[✓] Swap 设置完成:"
swapon --show
free -h