大数据运维 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

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