#!/bin/bash
set -e

echo "=== 自动扩容根分区（LVM） ==="

# 找出根 LV 的设备路径
ROOT_LV=$(findmnt -no SOURCE /)
if [[ -z "$ROOT_LV" ]]; then
    echo "❌ 无法找到 root LV"
    exit 1
fi
echo "➡ Root LV: $ROOT_LV"

# 找出 root VG
VG_NAME=$(lvs --noheadings -o vg_name "$ROOT_LV" | awk '{print $1}')
echo "➡ VG: $VG_NAME"

# 已加入 LVM 的 PV 列表
EXIST_PVS=$(pvs --noheadings -o pv_name | awk '{print $1}')

echo "已存在的 PV:"
echo "$EXIST_PVS"
echo

# 自动检测未加入 LVM 的整块磁盘
NEW_DISK=$(lsblk -dpno NAME,TYPE | grep "disk" | awk '{print $1}' | while read disk; do
    skip=""
    for pv in $EXIST_PVS; do
        if [[ "$disk" == "$pv" || "$disk" == $(lsblk -no pkname "$pv" 2>/dev/null) ]]; then
            skip="1"
        fi
    done
    if [[ -z "$skip" ]]; then
        echo "$disk"
        break
    fi
done)

if [[ -z "$NEW_DISK" ]]; then
    echo "❌ 未找到可用的新磁盘（未加入 LVM 的 disk）"
    exit 1
fi

echo "➡ 检测到新磁盘: $NEW_DISK"
echo

# 自动创建分区
echo "➡ 开始分区..."
parted -s "$NEW_DISK" mklabel gpt
parted -s "$NEW_DISK" mkpart primary 0% 100%
sleep 2

# 找到新分区名
NEW_PART=$(lsblk -lno NAME "$NEW_DISK" | tail -n 1)
NEW_PART="/dev/$NEW_PART"

echo "➡ 新分区: $NEW_PART"
echo

# 创建 PV
echo "➡ pvcreate $NEW_PART"
pvcreate "$NEW_PART"

# 扩展 VG
echo "➡ vgextend $VG_NAME $NEW_PART"
vgextend "$VG_NAME" "$NEW_PART"

# 扩展 root LV
echo "➡ lvextend -l +100%FREE $ROOT_LV"
lvextend -l +100%FREE "$ROOT_LV"

# 检查文件系统格式
FS_TYPE=$(lsblk -no FSTYPE "$ROOT_LV")

echo "➡ 文件系统: $FS_TYPE"

if [[ "$FS_TYPE" == "ext4" ]]; then
    echo "➡ resize2fs $ROOT_LV"
    resize2fs "$ROOT_LV"
elif [[ "$FS_TYPE" == "xfs" ]]; then
    echo "➡ xfs_growfs /"
    xfs_growfs /
else
    echo "❌ 不支持的文件系统：$FS_TYPE"
    exit 1
fi

echo
echo "🎉 扩容完成！请查看：df -h"
df -h | grep -E 'Filesystem|mapper'
