大数据运维 fstab磁盘自动挂载脚本

脚本自写,可根据业务自行调整:脚本是将除去系统盘把所有的磁盘均挂载到/mnt/storage**下

 1.获取系统识别磁盘和已经挂载磁盘、mnt下挂载文件目录

2.遍历比较已经挂载的磁盘与fdisk获取的系统识别的磁盘、比较df -h已经挂载的mnt下的目录和ls -l 获取的mnt下目录,进而获取没有挂载的disk和未挂载的mnt下的目录

3.获取没有挂载的disk和未挂载的mnt下的目录,循环格盘挂盘

4.BigDataDev 方法为定制,不需要可以删除

#!/bin/bash
function checkDev(){
  echo "运行环境监测"
  needmkdirfile=(`lsblk -b | grep disk | sort -nk4 | awk '{print $1}'`)
  needmkdirfilesum=${#needmkdirfile[@]}
  for i in `seq -w 0 40`
    do
        if [[ 10#$i -lt $needmkdirfilesum-1 ]];
          then
          mkdir -p /mnt/storage$i > /dev/null 2>&1
              if [ $? -eq 1 ];
              then
                echo "磁盘挂载目录/mnt/storage$i异常"
                exit 0
              fi
          else
              break
        fi
  done
}

function BigDataDev(){
  HostName=`hostname`
  while [[ $HostName == *datanode* && ${needmountfile[i]} == storage00 ]]; do
      echo "创建yarn文件环境"
    mkdir -p /mnt/storage00/logs
    mkdir -p /mnt/storage00/datum
    mkdir -p /mnt/storage00/logs/yarn
    mkdir -p /mnt/storage00/yarn-nm-recovery/
    mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn
    chown -R yarn:hadoop /mnt/storage00/logs/ /mnt/storage00/datum/ /mnt/storage00/yarn-nm-recovery/ /sys/fs/cgroup/cpu/hadoop-yarn/
      break
  done
  while [[ $HostName == *datanode* && ${needmountfile[i]} != storage00 ]]; do
          echo "${needmountdisk[i]}磁盘挂载检查"
          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-datanode/hdfs-site.xml /tmp/
          echo "修改${needmountfile[i]}目录权限"
          chmod -R 775 /mnt/${needmountfile[i]} && chown -R hdfs:hadoop /mnt/${needmountfile[i]}
        mkdir -p /mnt/${needmountfile[i]}/logs
        chown -R yarn:hadoop /mnt/${needmountfile[i]}/logs
          echo "修改hdfs-site.xml配置文件"
          HDFSDir=`cat /etc/hadoop-datanode/hdfs-site.xml | grep -A2 -w "dfs.datanode.data.dir" | grep mnt | sed -e "s/storage[0-9][0-9]/${needmountfile[i]}/g"`
          ip=`cat /etc/network/interfaces | grep address | awk '{print $2}'`
          su - hdfs -c "kinit -kt /etc/security/keytabs/dn.service.keytab `klist -k /etc/security/keytabs/dn.service.keytab | uniq | grep @BILIBILI.CO |awk '{print $2}'`"
          if [[ ${needmountfile[i]} == storage01 ]];
          then
                  sed -i "/\/mnt\/storage02\/datum\/datanode,/i\\$HDFSDir" /etc/hadoop-datanode/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\\$HDFSDir" /etc/hadoop-datanode/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 "备份yarn-site.xml到/tmp/"
          rsync -azrL --delete --force /etc/hadoop-datanode/yarn-site.xml /tmp/
          needyarnfile=`cat /etc/hadoop-nodemanager/yarn-site.xml | grep -A 2 yarn.nodemanager.storage.type.local-dirs | grep -v value | grep mnt |sed -e "s/storage[0-9][0-9]/${needmountfile[i]}/g"`
          yarnfile=`cat /etc/hadoop-nodemanager/yarn-site.xml | grep -A 15 yarn.nodemanager.storage.type.local-dirs | grep ${needmountfile[i]}`
          if [[ ! -n $yarnfile ]];
          then
          echo "修改yarn-site.xml配置文件"
                  if [[ ${needmountfile[i]} == storage01 ]];
                  then
              sed -i "/\/mnt\/storage02\/logs\/yarn\/nm\/localdir,/i\\$needyarnfile" /etc/hadoop-nodemanager/yarn-site.xml
                  else
                      sed -i "/\/mnt\/$BeforeMountfile\/logs\/yarn\/nm\/localdir,/a\\$needyarnfile" /etc/hadoop-nodemanager/yarn-site.xml
                  fi
                  tiers=`cat /etc/hadoop-nodemanager/yarn-site.xml | grep -A 1 yarn.nodemanager.local-dirs-tiers | grep value | tr -cd 0-9`
                  sed -i "s/$tiers/011111111111111/g"  /etc/hadoop-nodemanager/yarn-site.xml
          #bash /data/script/hadoop-nodemanager/nodemanager-restart.sh
      else
             break
          fi
          break
  done
  while [[ $HostName == *kafka* ]]; do
          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]}
          break
  done
}

function getdiskfs(){
    fs=`mount | grep -w /dev | grep mnt | sort -k 3| awk '{print $5}' | awk 'END {print}'`
    if [[ $fs == xfs ]]; then
        echo "自动获取磁盘文件系统格式为:$fs"
        mkfs.xfs -f ${needmountdisk[i]} >> /dev/null 2<&1
        fs=xfs
    elif [[ $fs == ext4 ]]; then
        echo "自动获取磁盘文件系统格式为:$fs"
        mkfs.ext4  ${needmountdisk[i]} >> /dev/null 2<&1
        fs=ext4
    else
        echo “自动获取文件系统格式$fs不是xfs和ext4,强制格盘为xfs”
        mkfs.xfs -f ${needmountdisk[i]} >> /dev/null 2<&1
        fs=xfs
    fi
    echo "盘符${needmountdisk[i]}格式化完成"
}
function Startmount(){
    echo "备份/etc/fstab到/tmp"
    rsync -azrL --delete --force /etc/fstab /tmp/
    NEWUUID=`blkid | grep -w ${needmountdisk[i]} |awk '{print $2}' | awk -F '=' '{print $2}'`
    OLDUUID=`cat /etc/fstab | grep ${needmountfile[i]} | awk '{print $1}' | 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 "UUID="$NEWUUID"   /mnt/${needmountfile[i]}        $fs      defaults,nofail,noatime,nodiratime     0 0  #${needmountdisk[i]} "
      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
}
checkDev
systemdisk=`fdisk -l | grep -i Linux | awk '{print $1}'| head -n 1 | sed 's/.$//'`
alldisk=(`fdisk -l | grep -i disk | grep dev | sort -nk5 |  awk '{print $2}' | awk -F ":" '{print $1}'| grep -Ev "(docker|loop)" | grep -v -w $systemdisk`)
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
                echo "----------Begin----------"
                echo "磁盘${needmountdisk[i]}开始格式化"
                getdiskfs
                if [ $? -eq 0 ];
                then
                   Startmount
                   echo "/mnt/${needmountfile[i]}磁盘挂载检查"
                   if mountpoint -q /mnt/${needmountfile[i]}
                   then
                       BigDataDev
                       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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值