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

摘要:
-gt0];thenecho"---无法ping通公网请检查网络---"&&exitelsefiif["$every"==""];thenecho"---没有硬盘挂载在机器上,请检查机器配置---"&&exitnum=`fdisk-l|grepDisk|grep/dev/sd|grep-vsda|awk'{print$2}'|awk-F"[/]"'{print$3}'|awk-F"[:]"'{print$1}'|wc-l`pingwww.baidu.com-c1&˃/dev/nullif[$?

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

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

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

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

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

#!/bin/bash
#DATE:Fri Aug  9 07:12:30 EDT 2019programmerqin
mac=`ip a | grep ether | awk '{print $2}'`
ping www.baidu.com -c1 &>/dev/null
if [ $? -gt 0];then
        echo "---无法ping通公网请检查网络---"&&exit
        elsefi
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
        elseecho "---正在安装基本工具软件包---"yum install -y parted net-tools wget sysstat &>/dev/null && echo "---基本工具软件包已经安装---"fi
if [ "$every" == " "];then
        echo "---没有硬盘挂载在机器上,请检查机器配置---"&&exit
        elseecho "---有${num}块磁盘挂载在机器上,接下来进行挂载与格式化操作---"
        for i in $(seq 1${num})
        domkdir /data${i}
        done
        sleep 2echo "---挂载硬盘所需文件夹已经创建---"fi

foldername=`ls /data* | sort | grep data | awk -F "[:]" '{print $1}' | grep -w -v data | awk -F "[/]" '{print $2}'`
for i in $every;doparted -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 2done
for a in $foldername;dosed -i 0,/wwwdata1/s//${a}/ /etc/fstab && echo "-${a}文件夹已挂载磁盘-" && sleep 1 || echo "-${a}挂载失败-"
done
                sleep 1mount -a && echo "/etc/fstab重新加载" || echo "/etc/fstab加载失败,请检查"echo "------本机的MAC地址是:($mac)------"

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

日常小脚本——脚本实现硬盘的自动挂载第1张

免责声明:文章转载自《日常小脚本——脚本实现硬盘的自动挂载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇高效 告别996,开启java高效编程之门 2-3实战:硬编码业务逻辑C++随机崩溃捕捉处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Raid 技术简介

独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列,简称硬盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理...

FrameBuffer系列 之 简单编程

一、Linux的帧缓冲设备         帧缓冲(framebuffer)是 Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。帧缓冲驱动的应用广泛,在 lin...

阿里云服务器CentOS7怎么分区格式化/挂载硬盘

一、在阿里云上购买了服务器的硬盘后就可以操作了,先看看硬盘情况: 硬盘vda是系统盘;vdb是在阿里云后台购买的另一块硬盘。 第一次使用要分区:fdisk /dev/vdb1 在提示符下依次输入:n+回车/p+回车/1+回车/w+回车  二、格式化分区(mkfs.ext3 /dev/vdb1) 三、把分区挂载到根目录下(可以在根目录下新建立一个文件夹...

ceph部署

一、部署准备: 准备5台虚拟机(linux系统为centos7.6版本) 1台部署节点(配一块硬盘,运行ceph-depoly) 3台ceph节点(每台配置两块硬盘,第一块为系统盘并运行mon,第二块作为osd数据盘) 1台客户端(可以使用ceph提供的文件系统,块存储,对象存储) (1)所有ceph集群节点(包括客户端)设置静态域名解析; 127.0.0...

BLDC开发笔记4.转速的计算

以下结合自己的理解,如有错误请帮忙及时指正。 转速公式 转速的计算我现在是通过一定时间内,霍尔信号的边沿数量来计算的。这里每隔50ms在滴答定时器中断服务函数里面计算一次。霍尔信号每变化一次,就产生一次霍尔触发中断。因为我的电机是2对极,所以在一圈内有12个霍尔状态,即电机转动一圈会触发12次中断。假设在50ms内,霍尔触发了 n 次中断,我们可以得到转速...

dev 的NavBarControl动态菜单

private void InitMunu() { navBarControl.Items.Clear(); navBarControl.Groups.Clear(); navBarControl.SmallImages = this.imageTool;//dev...