• 日常小脚本——脚本实现硬盘的自动挂载


    先说业务场景吧,需要虚拟出一百多台机器,每个机器需要挂载数量不等的硬盘,然后输出相关信息,并附带输出mac地址方便查询,这一台一台的统计,不得看的人头晕眼花,果断ansible+脚本安排,人和动物最大的区别就是人懂得使用工具,这个小脚本需要解决三个问题:

    一、统计硬盘数量并根据硬盘数量创建对应规律的文件夹

    二、对硬盘实现格式化分区,建立相应的引导

    三、将相应的信息写入/etc/fstab文件中

    遇到的一个难题就是for循环似乎不能同时定义出两个变量并将其一一对应,也可能是在下才疏学浅,最后随便起了一个名称来填入,再用sed来逐个替换,解决了问题,哈哈,直着走不通可以弯着走嘛,脚本内容如下:

    #!/bin/bash
    #DATE:Fri Aug  9 07:12:30 EDT 2019 programmerqin
    mac=`ip a | grep ether | awk '{print $2}'`
    ping www.baidu.com -c1 &>/dev/null
    if [ $? -gt 0 ];then
            echo "---无法ping通公网请检查网络---"&& exit
            else
    fi
    if [ "$every" == " " ];then
            echo "---没有硬盘挂载在机器上,请检查机器配置---"&& exit
    num=`fdisk -l | grep Disk | grep /dev/sd | grep -v sda | awk '{print $2}' | awk -F "[/]" '{print $3}' | awk -F "[:]" '{print $1}' | wc -l`
    ping www.baidu.com -c1 &>/dev/null
    if [ $? -gt 0 ];then
            echo "---无法ping通公网请检查网络---"&& exit
            else
            echo "---正在安装基本工具软件包---"
            yum install -y parted net-tools wget sysstat &>/dev/null && echo "---基本工具软件包已经安装---"
    fi
    if [ "$every" == " " ];then
            echo "---没有硬盘挂载在机器上,请检查机器配置---"&& exit
            else
            echo "---有${num}块磁盘挂载在机器上,接下来进行挂载与格式化操作---"
            for i in $(seq 1 ${num})
            do
                    mkdir /data${i}
            done
            sleep 2
            echo "---挂载硬盘所需文件夹已经创建---"
    fi
    
    foldername=`ls /data* | sort | grep data | awk -F "[:]" '{print $1}' | grep -w -v data | awk -F "[/]" '{print $2}'`
    for i in $every;do
            parted -s /dev/$i mklabel gpt &>/dev/null || echo "${i}part01出现问题,请检查"
            parted -s /dev/$i mkpart Primary 1 `parted /dev/$i p|grep "^Disk"|cut -d ":" -f2` &>/dev/null || echo "${i}part02出现问题,请检查"
            mkfs -T largefile -t ext4  -b 4096 -m 2 /dev/${i}1 &>/dev/null || echo "${i}mkfs出现问题,请检查"
            echo "/dev/${i}1 /wwwdata1 ext4 defaults 0 0" >> /etc/fstab
            echo "-${i}磁盘格式化分区完成-" && sleep 2
    done
    for a in $foldername;do
            sed -i 0,/wwwdata1/s//${a}/ /etc/fstab && echo "-${a}文件夹已挂载磁盘-" && sleep 1 || echo "-${a}挂载失败-"
    done
                    sleep 1
    mount -a && echo "/etc/fstab重新加载" || echo "/etc/fstab加载失败,请检查"
    echo "------本机的MAC地址是:($mac)------"

     PS:测试的时候碰到两个问题,1.调用磁盘名称的时候,并不是按照sdb》sdc》sdd的顺序排列的,而后使用了sort进行排序解决了问题。2.sed命令在命令行执行可以,但是脚本中执行一直报错,最后明白,$i中将字符串换成了带/的字符串,修改了替换的内容,ok,执行无误,测试结果如下:

  • 相关阅读:
    25-[jQuery]-ajax
    25-[jQuery]-事件
    24-[jQuery]-属性操作,文档操作
    2016.8.16 JQuery学习记录
    移动端开发之图片上传与显示
    2016.8.16 HTML5重要标签及其属性学习
    2016.8.14 HTML5重要标签以及属性学习
    2016.8.14 HTML5重要标签及其属性学习
    HTML5 重要标签以及属性学习
    HTML5 重要标签及其属性学习
  • 原文地址:https://www.cnblogs.com/xiaoyuxixi/p/11377445.html
Copyright © 2020-2023  润新知