大數據運維 fstab磁盤自動掛載腳本(有瑕疵)

腳本自寫,可根據業務自行調整

#!/bin/bash
function hadoop(){
    echo "${needmountdisk[0]}磁盤掛載檢查"
    file=${needmountfile[i]}
    filenum=`echo ${file#*e}`
    BeforeMountfilenum=`printf "%02d" $((10#$filenum-1))`
    BeforeMountfile=storage$BeforeMountfilenum
    echo "備份hdfs-site.xml到/tmp/"
    rsync -azrL --delete --force /etc/hadoop/hdfs-site.xml /tmp/
    echo "修改${needmountfile[i]}目錄權限"
    chmod -R 770 /mnt/${needmountfile[i]} && chown -R hdfs:hadoop /mnt/${needmountfile[i]}
    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
        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
        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
}
function kafka(){
    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]}
}
function yarn(){
    echo "創建yarn文件環境"
    mkdir -p /mnt/storage00/logs
    mkdir -p /mnt/storage00/logs/yarn
    chown -R yarn:hadoop /mnt/storage00/logs/
}
function Startmount(){
    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
    else
        echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
        sed -i "s/$OLDUUID/$NEWUUID/" /etc/fstab
        echo "磁盤掛載到${needmountfile[i]}文件夾"
        mount -a
    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
    else
        break
    fi
done
fsdisk=(`df -h  | grep mnt | awk '{print $1}'`)
allfilesum=`ls /mnt/ | grep storage| wc -l`
mountfilesum=`df -h | grep mnt | wc -l`
allfile=(`ls /mnt/ | grep storage`)
mountfile=(`df -h | grep mnt | awk '{print $6}' | sort -k 1`)
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
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
            echo "盤符${needmountdisk[i]}格式化完成"
            echo "備份/etc/fstab到/tmp/"
            rsync -azrL --delete --force /etc/fstab /tmp/
            NEWUUID=`blkid | grep ${needmountdisk[i]} | awk -F '"' '{print $2}'`
            Startmount
            echo "/mnt/${needmountfile[i]}磁盤掛載檢查"
            HostName=`hostname`
               if mountpoint -q /mnt/${needmountfile[i]}
               then
                       while [[ $HostName == *datanode* && ${needmountfile[i]} == storage00 ]]; do
                           yarn
                           break
                       done
                       while [[ $HostName == *datanode* && ${needmountfile[i]} != storage00 ]]; do
                           hadoop
                           break
                       done
                       while [[ $HostName == *kafka* ]]; do
                           kafka
                           break
                       done
                   echo "----------End----------"
               else
                   echo "${needmountfile[i]}掛載失敗"
                   echo "/etc/fatab備份還原"
                   rsync -azrL --delete --force /tmp/fstab /etc/
                   echo "----------End----------"
                   exit 0
               fi
        else
            echo "${needmountdisk[i]}磁盤格式化失敗"
            break
        fi
    done
else
    echo “磁盤均已掛載”
    echo “請檢查硬盤是否被系統識別”
    exit 0
fi

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