日常小腳本——腳本實現硬盤的自動掛載


先說業務場景吧,需要虛擬出一百多台機器,每個機器需要掛載數量不等的硬盤,然后輸出相關信息,並附帶輸出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,執行無誤,測試結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM