FreezeJ' Blog

数据盘初始化脚本

2026-08-06

#!/bin/sh
# 说明: 格式化数据盘
# 用法: bash parted.sh parted 10
set -e

# 定义颜色输出
function _color(){
    key=$1
    shift
    case $key in
    -g)
        echo -e "\033[32m$@\033[0m">&1
        ;;
    -r)
        echo -e "\033[31m$@\033[0m" 2>&1
        ;;
    -e)
        echo -e "\033[31m\033[5m$@\033[0m" 2>&1 && exit 1
        ;;
    -w)
        echo -e "\033[33m$@\033[0m">&1
        ;;
    *)
        echo "$@"
        ;;
    esac
}

# 格式化硬盘
function format_disk(){
    _color -w "++++++++++++++++++++开始磁盘初始化++++++++++++++++++++"

    #获取需要格式化的磁盘
    disk=$(fdisk -l|grep "/dev/[xv|v|s]d[b-z]"| tail -n 1 | tr ":" ":" | awk -F":" '{print $1}'|cut -d '/' -f3)
    if [ -z $disk ];then
        _color -e "未找到需要格式化的磁盘,请检查!"
    else
        _color -g "获取需要格式化的磁盘是: $disk"
    fi


    #判断磁盘大小
    if (locale | grep LANG | grep -qi zh_CN); then
        disk_size_bytes=$(fdisk -l | grep -E "^Disk|^磁盘" | grep $disk | grep -E "字节|bytes" | grep -o -E "[0-9]+.[0-9]+ 字节" | grep -o -E "[0-9]+.[0-9]+")
    else
        disk_size_bytes=$(fdisk -l | grep -E "^Disk|^磁盘" | grep $disk | grep bytes | grep -o -E "[0-9]+.[0-9]+ bytes" | grep -o -E "[0-9]+.[0-9]+")
    fi
    disk_size_gb=$(expr "$disk_size_bytes" / 1000000000)
    if [ "$disk_size_gb" -gt "$check_disk_size" ];then
        _color -g "$disk 磁盘大小为 $disk_size_gb GB"
    else
        _color -e "$disk 磁盘大小小于 $check_disk_size GB,脚本退出"
    fi

    # 检查是否已有文件系统
    set +e
    blkid /dev/$disk >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        _color -e "/dev/$disk 已有文件系统,脚本退出!"
    fi
    set -e

    #判断获取的磁盘是否已经格式化  --script不阻塞进程
    disk_num=$(parted /dev/$disk print --script | awk '/^Number/{getline; print}' | wc -l)
    if [ "$disk_num" -eq 0 ];then
        _color -g "$disk 磁盘未格式化,脚本继续"
    else
        _color -e "$disk 磁盘已经格式化,脚本退出"
    fi

    df -Th | grep ${disk} | grep ext  && _color -e "$disk 磁盘已经ext格式化,脚本退出"  # 新增,确保磁盘没有被ext格式化

    #创建文件系统
    _color -w "格式化进行中......"
    mkfs.ext4 -v -F /dev/${disk} && _color -g "创建文件系统成功" || _color -e "创建文件系统失败"
    #挂载磁盘分区
    mount_path="/data"
    mkdir -p "${mount_path}"
    mount /dev/${disk} "${mount_path}" && _color -g "$mount_path 挂载成功" || _color -e "$mount_path 挂载失败"
    set +e
    #设置开机启动挂载硬盘
    cat /etc/fstab | grep /dev/${disk} | grep ${mount_path}
    if [ $? -eq 0 ];then
        _color -w "$mount_path fstab已经存在"
    else
        echo "/dev/${disk}        ${mount_path}        ext4       defaults              0 0" >> /etc/fstab
        _color -g "$mount_path fstab设置成功"
    fi
    set -e

    #检查磁盘是否已经挂载
    df -h | grep /dev/${disk} && _color -g "硬盘初始化成功" || _color -e "硬盘初始化失败"

    _color -g "++++++++++++++++++++磁盘初始化成功++++++++++++++++++++"
}

USAGE="USAGE: $0 parted check_disk_size
check_disk_size 类型为数字,单位为GB,用于检查磁盘大小是否大于该值"
if [ $# -lt 2 ];then
    _color -g "$USAGE"
   exit 1
else
    case $1 in
        parted)
            check_disk_size=`expr $2 + 0` || _color -e "check_disk_size请输入数字!"  # 判断磁盘最小容量GB
            which parted || _color -e "parted命令未安装,请先安装parted命令!"  # 判断parted命令是否存在
            format_disk
            ;;
        *)
            _color -g "$USAGE"
            exit 1
    esac
fi
标签: Linux
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏