#!/bin/bash

# 检查是否为 root 用户
if [ "$(id -u)" != "0" ]; then
    echo "此脚本必须以 root 权限运行。"
    exit 1
fi

# 定义 Swap 文件路径和大小（1GB）
SWAP_FILE="/swapfile"
SWAP_SIZE=1G

# 检查是否已存在 Swap 文件
if [ -f "$SWAP_FILE" ]; then
    echo "检测到已存在的 Swap 文件：$SWAP_FILE"
    echo "请手动删除或处理该文件后再运行脚本。"
    exit 1
fi

# 创建指定大小的空文件（使用 fallocate 快速分配空间）
if ! fallocate -l $SWAP_SIZE $SWAP_FILE; then
    echo "fallocate 失败，尝试使用 dd 创建文件（较慢）..."
    dd if=/dev/zero of=$SWAP_FILE bs=1M count=1024 status=progress
fi

# 设置正确的权限（仅 root 可读写）
chmod 600 $SWAP_FILE

# 格式化文件为 Swap 格式
mkswap $SWAP_FILE

# 启用 Swap 文件
swapon $SWAP_FILE

# 验证 Swap 是否启用
echo "当前 Swap 状态："
swapon --show

# 配置系统启动时自动启用 Swap
if ! grep -q "$SWAP_FILE" /etc/fstab; then
    echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab
    echo "已添加到 /etc/fstab，系统启动时自动启用。"
fi

echo "Swap 文件创建并启用完成！"