fstab磁盤批量掛載腳本

#!/bin/bash
#HAdoop函數
function hadoop(){
    echo "${needmountdisk[0]}磁盤掛載檢查"
    #獲取掛載文件夾前一個文件夾
    file=${needmountfile[i]}
    filenum=`echo ${file#*e}`
    BeforeMountfilenum=`printf "%02d" $((10#$filenum-1))`
    BeforeMountfile=storage$BeforeMountfilenum
    if mountpoint -q /mnt/${needmountfile[i]}
    then
        echo "修改${needmountfile[i]}目錄權限"
        chmod -R 770 /mnt/${needmountfile[i]} && chown -R hdfs:hadoop /mnt/${needmountfile[i]}
        echo "備份hdfs-site.xml到/tmp/"
        rsync -azrL --delete --force /etc/hadoop/hdfs-site.xml /tmp/
        echo "修改hdfs-site.xml配置文件"
        ip=`ifconfig -a | grep -A 1 "bond0" | grep inet | awk '{print $2}' | awk -F ":" '{print $2}'`
        if [[ ${needmountfile[i]} == storage01 ]];
        then
            #mkdir -p /run/hadoop && chown hdfs:hadoop /run/hadoop && su - hdfs -c 'hadoop-daemon.sh start datanode' && supervisorctl start all
            #掛載磁盤爲storage01,將插入到/mnt/storage02/datum/datanode上面
            sed -i '/\/mnt\/storage02\/datum\/datanode,/i\\      /mnt/storage01/datum/datanode,' /etc/hadoop/hdfs-site.xml
            su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 start"
            su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 status"
        else
            #掛載文件夾插入到前一文件夾後面
            #mkdir -p /run/hadoop && chown hdfs:hadoop /run/hadoop && su - hdfs -c 'hadoop-daemon.sh start datanode' && supervisorctl start all
            sed -i "/\/mnt\/$BeforeMountfile\/datum\/datanode,/a\\      /mnt\/${needmountfile[i]}\/datum\/datanode," /etc/hadoop/hdfs-site.xml
            sed -i "/\/mnt\/$BeforeMountfile\/datum\/datanode,/a\\      /mnt\/${needmountfile[i]}\/datum\/datanode," /etc/hadoop/hdfs-site.xml
            su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 start"
            su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 status"
        fi
        echo "----------End----------"
        break
    else
        echo "${needmountfile[i]}掛載失敗"
        echo "/etc/fatab備份還原"
        rsync -azrL --delete --force /tmp/fstab /etc/
        echo "----------End----------"
        exit 0
    fi
}
#kafka函數
function kafka(){
    echo "${needmountdisk[0]}磁盤掛載檢查"
    if mountpoint -q /mnt/${needmountfile[i]}
    then
        echo "創建kafka文件環境"
        mkdir -p /mnt/${needmountfile[i]}/datum
        mkdir -p /mnt/${needmountfile[i]}/datum/kafka_data/
        chmod -R 770 /mnt/${needmountfile[i]} && chown -R kafka:hadoop /mnt/${needmountfile[i]}
        echo "----------End----------"
        break
    else
        echo "${needmountfile[i]}掛載失敗"
        echo "/etc/fatab備份還原"
        rsync -azrL --delete --force /tmp/fstab /etc/
        echo "----------End----------"
        exit 0
    fi
}
#yarn函數
function yarn(){
    echo "/mnt/storage00磁盤掛載檢查"
    if mountpoint -q /mnt/storage00
    then
        echo "創建yarn文件環境"
        mkdir -p /mnt/storage00/logs
        mkdir -p /mnt/storage00/logs/yarn
        chown -R yarn:hadoop /mnt/storage00/logs/
        echo "----------End----------"
        break
    else
        echo "${needmountfile[i]}掛載失敗"
        echo "/etc/fatab備份還原"
        rsync -azrL --delete --force /tmp/fstab /etc/
        echo "----------End----------"
        exit 0
    fi
}
#系統盤
systemdisk=`fdisk -l | grep -i Linux | awk '{print $1}'| head -n 1 | sed 's/.$//'`
#獲取所有磁盤盤符
alldisk=(`fdisk -l | grep -i disk | grep dev | sort -k 4 |  awk '{print $2}' | awk -F ":" '{print $1}'| grep -v $systemdisk`)
#獲取所有磁盤盤符數量
alldisksum=${#alldisk[@]}
#創建文件夾
for i in `seq -w 0 40`
do
    if [[ 10#$i -lt $alldisksum ]];
    then
        mkdir -p /mnt/storage$i
    fi
done
#獲取已掛載磁盤盤符
fsdisk=(`df -h  | grep mnt | awk '{print $1}'`)
#獲取mnt下文件夾數量
allfilesum=`ls /mnt/ | grep storage| wc -l`
#獲取已經mount文件夾數量
mountfilesum=`df -h | grep mnt | wc -l`
#獲取mnt下所有文件夾
allfile=(`ls /mnt/ | grep storage`)
#獲取已掛載文件夾
mountfile=(`df -h | grep mnt | awk '{print $6}'`)
#遍歷獲取未掛載文件夾
declare -a needmountfile
t=0
flag=0
for nomountfile in "${allfile[@]}"
do
    for file in "${mountfile[@]}"
    do
        if [[ "/mnt/${nomountfile}" == "${file}" ]]; then
            flag=1
            break
        fi
    done
    if [[ $flag -eq 0 ]]; then
        needmountfile[t]=$nomountfile
        t=$((t+1))
    else
        flag=0
    fi
done
#未掛載文件夾數量
needmountfilesum=${#needmountfile[@]}

#遍歷獲取未掛載盤符
declare -a needmountdisk
t=0
flag=0
for mountdisk in "${alldisk[@]}"
do
    for disk in "${fsdisk[@]}"
    do
        if [[ "${mountdisk}" == "${disk}" ]]; then
            flag=1
            break
        fi
    done
    if [[ $flag -eq 0 ]]; then
        needmountdisk[t]=$mountdisk
        t=$((t+1))
    else
        flag=0
    fi
done
#未掛載磁盤數量
mountdisknum=${#needmountdisk[@]}
if [[ $mountdisknum -ge 1 ]]; then
    #掛載磁盤
    for (( i = 0; i <= $mountdisknum-1 ; i++ )); do
        OLDUUID=`cat /etc/fstab | grep ${needmountfile[i]} | awk -F '"' '{print $2}'`
        fs=`blkid | awk -F '"' '{print $4}' | awk 'END {print}'`
        echo "----------Begin----------"
        echo "磁盤${needmountdisk[i]}開始格式化"
        mkfs.$fs ${needmountdisk[i]}
        if [ $? -eq 0 ];
        then
            PCIE=`fdisk -l | grep ${needmountdisk[i]} | awk '{print $3}'`
            disk=`fdisk -l | grep ${needmountdisk[i]} | awk '{print $3}'`
            #判斷磁盤是否爲PCIE
            if [[ ${needmountdisk[i]} == nvme* ]] && [[ `expr $PCIE "==" 1.8`  -eq 1 ]];
            then
                echo "盤符${needmountdisk[i]}格式化完成"
                rsync -azrL --delete --force /etc/fstab /tmp/
                NEWUUID=`blkid | grep ${needmountdisk[i]} | awk -F '"' '{print $2}'`
                if [ ! -n "$OLDUUID" ];
                then
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
                    echo "UUID="$NEWUUID"   /mnt/storage00       $fs     defaults,nofail,noatime,nodiratime     0 0  #${needmountdisk[i]}" >> /etc/fstab
                    #sed -i "$a\UUID="$NEWUUID"   /mnt/storage00       $fs     defaults,nofail,noatime,nodiratime     0 0  #${needmountdisk[i]}" /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    #yarn
                else
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/storage00"
                    sed -i "s/$OLDUUID/$NEWUUID/" /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    #yarn
                fi
                #unset needmountfile[storage00]
                continue
            #判斷磁盤大小是否爲960G
            elif [[ `expr $disk \> 890.0`  -eq 1 ]] && [[ `expr $disk \> 960.0`  -eq 0 ]];
            then
                echo "盤符${needmountdisk[i]}格式化完成"
                rsync -azrL --delete --force /etc/fstab /tmp/
                NEWUUID=`blkid | grep ${needmountdisk[i]} | awk -F '"' '{print $2}'`
                if [ ! -n "$OLDUUID" ];
                then
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/storage00"
                    echo "UUID="$NEWUUID"   /mnt/storage00       $fs     defaults,nofail,noatime,nodiratime     0 0  #${needmountdisk[i]}" >> /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    yarn
                else
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/storage00"
                    sed -i "s/$OLDUUID/$NEWUUID/" /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    yarn
                fi
                unset needmountfile[storage00]
                continue
            else
                echo "盤符${needmountdisk[i]}格式化完成"
                rsync -azrL --delete --force /etc/fstab /tmp/
                NEWUUID=`blkid | grep ${needmountdisk[i]} | awk -F '"' '{print $2}'`
                if [ ! -n "$OLDUUID" ];
                then
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
                    echo "UUID="$NEWUUID"   /mnt/${needmountfile[i]}       $fs     defaults,nofail,noatime,nodiratime     0 0  #${needmountdisk[i]}" >> /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    #yarn

                    rm -rf /tmp/hdfs-site.xml
                else
                    echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
                    sed -i "s/$OLDUUID/$NEWUUID/" /etc/fstab
                    echo "磁盤掛載到${needmountfile[i]}文件夾"
                    mount -a
                    #hadoop
                    #kafka
                    #yarn

                    rm -rf /tmp/hdfs-site.xml
                fi
            fi
        else
            echo "${needmountdisk[i]}磁盤格式化失敗"
            break
        fi
    done
else
    #沒有可以掛載的磁盤
    echo “磁盤均已掛載”
    echo “請檢查硬盤是否被系統識別”
    exit 0
fi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章