#!/bin/bash

# 格式化为 ext4 并挂载的函数
disk_format_and_mount() {
    disk="$1"

    # 检查是否是以 sd 开头的设备
    if [[ ! "$disk" =~ ^/dev/sd ]]; then
        echo "$disk  不是有效的 sd 设备"
        return
    fi

    # 检查设备是否被格式化为 ext4 或者没有标签
    if ! blkid -s LABEL | grep "$disk" | grep -E "data|kuaicdn|virtio" &>/dev/null; then
        echo "$disk  format start"
        lsof -t "$disk" | xargs -I @ kill -9 @ &>/dev/null
        sleep 0.5
        lsof -t "$disk" | xargs -I @ kill -9 @ &>/dev/null
        umount -f "$disk" &>/dev/null
        
        # 格式化为 ext4
        mkfs.ext4 -F "$disk" &>/dev/null
        e2label "$disk" data &>/dev/null
        echo "$disk  format end"
    fi

    # 挂载设备
    mount_info="$(blkid -s LABEL -s UUID -s TYPE | grep "$disk" | awk -F' |"|-' '{print$5$6"-"$7"-"$8"-"$9"-"$10$11,"/disk/"$6,$13,"defaults,nofail,noatime,nodiratime 0 0"}')"
    mount_dir="$(echo "$mount_info" | awk '{print $2}')"
    
    # 检查是否已挂载
    if df | grep "$mount_dir" &>/dev/null; then
        echo "$disk  mount skip"
        return
    fi
    
    # 从 fstab 中删除旧的挂载信息
    sed -i "\@$mount_dir@d" /etc/fstab
    
    # 创建挂载目录
    mkdir -p "$mount_dir" &>/dev/null
    
    # 挂载设备
    echo "$mount_info" | awk '{print "mount -t ext4 -o",$4,$1,$2}' | bash &>/dev/null
    if df | grep "$mount_dir" &>/dev/null; then
        echo "$mount_info" >>/etc/fstab
        echo "$disk  mount success"
    else
        echo "$disk  mount failed"
    fi
}

# 主程序
for disk in /dev/sd[a-z][1-9]*; do
    disk_format_and_mount "$disk"
done