首页 > 技术文章 > 如何快速格式化硬盘并挂载

ninejy 2021-05-10 20:51 原文

最近币圈真可谓是一片火热。相信很多人最近都听过狗狗币(Doge),奇亚币(Chia)。而挖这些币需要大量的存储。因此硬盘的价格也被带出了新高度。作为一个正经的运维工程师咱最关注的还是技术问题。所以下面请听题:

假如你的老板对你说:“小王,最近奇亚币这么火咱们也搞一哈”。于是,新买了几十台服务器每台服务器挂24块10T的硬盘。问题来了,这几百块硬盘一块一块的分区、格式化并挂载一个人的话要一天吧。可能一天也搞不完还会累得要死。第二天还会被老板问:“小王,开始挖矿了吗,你这也太慢了”。是的太慢了。不要说老板不能忍,作为一个老运维自己也是不能忍的。

 

不要慌,作为一个老运维怎么可能这么没效率呢。下面的脚本帮你快速格式化上百块硬盘。

# cat new_disk.sh
#!/bin/bash

# 硬盘分区的函数
function partition_disk() {
    fdisk /dev/sd${1} <<EOF
g
n



wq
EOF
}
# 硬盘分区并格式化分区
(fdisk -l | grep /dev/sda1) || (partition_disk 'a' && mkfs.xfs /dev/sda1)
(fdisk -l | grep /dev/sdb1) || (partition_disk 'b' && mkfs.xfs /dev/sdb1)
(fdisk -l | grep /dev/sdc1) || (partition_disk 'c' && mkfs.xfs /dev/sdc1)
(fdisk -l | grep /dev/sdd1) || (partition_disk 'd' && mkfs.xfs /dev/sdd1)
(fdisk -l | grep /dev/sde1) || (partition_disk 'e' && mkfs.xfs /dev/sde1)
(fdisk -l | grep /dev/sdf1) || (partition_disk 'f' && mkfs.xfs /dev/sdf1)
(fdisk -l | grep /dev/sdg1) || (partition_disk 'g' && mkfs.xfs /dev/sdg1)
(fdisk -l | grep /dev/sdh1) || (partition_disk 'h' && mkfs.xfs /dev/sdh1)
(fdisk -l | grep /dev/sdi1) || (partition_disk 'i' && mkfs.xfs /dev/sdi1)
(fdisk -l | grep /dev/sdj1) || (partition_disk 'j' && mkfs.xfs /dev/sdj1)
(fdisk -l | grep /dev/sdk1) || (partition_disk 'k' && mkfs.xfs /dev/sdk1)
(fdisk -l | grep /dev/sdl1) || (partition_disk 'l' && mkfs.xfs /dev/sdl1)
(fdisk -l | grep /dev/sdm1) || (partition_disk 'm' && mkfs.xfs /dev/sdm1)
(fdisk -l | grep /dev/sdn1) || (partition_disk 'n' && mkfs.xfs /dev/sdn1)
(fdisk -l | grep /dev/sdo1) || (partition_disk 'o' && mkfs.xfs /dev/sdo1)
(fdisk -l | grep /dev/sdp1) || (partition_disk 'p' && mkfs.xfs /dev/sdp1)
(fdisk -l | grep /dev/sdq1) || (partition_disk 'q' && mkfs.xfs /dev/sdq1)
(fdisk -l | grep /dev/sdr1) || (partition_disk 'r' && mkfs.xfs /dev/sdr1)
(fdisk -l | grep /dev/sds1) || (partition_disk 's' && mkfs.xfs /dev/sds1)
(fdisk -l | grep /dev/sdt1) || (partition_disk 't' && mkfs.xfs /dev/sdt1)
(fdisk -l | grep /dev/sdu1) || (partition_disk 'u' && mkfs.xfs /dev/sdu1)
(fdisk -l | grep /dev/sdv1) || (partition_disk 'v' && mkfs.xfs /dev/sdv1)
(fdisk -l | grep /dev/sdw1) || (partition_disk 'w' && mkfs.xfs /dev/sdw1)
(fdisk -l | grep /dev/sdx1) || (partition_disk 'x' && mkfs.xfs /dev/sdx1)

# 创建挂载点
for i in `seq 1 24`; do
mkdir -p /data$i
done

# 挂载
(df -h | grep /data1) || (mount /dev/sda1 /data1)
(df -h | grep /data2) || (mount /dev/sdb1 /data2)
(df -h | grep /data3) || (mount /dev/sdc1 /data3)
(df -h | grep /data4) || (mount /dev/sdd1 /data4)
(df -h | grep /data5) || (mount /dev/sde1 /data5)
(df -h | grep /data6) || (mount /dev/sdf1 /data6)
(df -h | grep /data7) || (mount /dev/sdg1 /data7)
(df -h | grep /data8) || (mount /dev/sdh1 /data8)
(df -h | grep /data9) || (mount /dev/sdi1 /data9)
(df -h | grep /data10) || (mount /dev/sdj1 /data10)
(df -h | grep /data11) || (mount /dev/sdk1 /data11)
(df -h | grep /data12) || (mount /dev/sdl1 /data12)
(df -h | grep /data13) || (mount /dev/sdm1 /data13)
(df -h | grep /data14) || (mount /dev/sdn1 /data14)
(df -h | grep /data15) || (mount /dev/sdo1 /data15)
(df -h | grep /data16) || (mount /dev/sdp1 /data16)
(df -h | grep /data17) || (mount /dev/sdq1 /data17)
(df -h | grep /data18) || (mount /dev/sdr1 /data18)
(df -h | grep /data19) || (mount /dev/sds1 /data19)
(df -h | grep /data20) || (mount /dev/sdt1 /data20)
(df -h | grep /data21) || (mount /dev/sdu1 /data21)
(df -h | grep /data22) || (mount /dev/sdv1 /data22)
(df -h | grep /data23) || (mount /dev/sdw1 /data23)
(df -h | grep /data24) || (mount /dev/sdx1 /data24)

# 加入开机自动挂载
(grep /data1 /etc/fstab) || (echo "/dev/sda1 /data1 xfs defaults 0 0" >> /etc/fstab)
(grep /data2 /etc/fstab) || (echo "/dev/sdb1 /data2 xfs defaults 0 0" >> /etc/fstab)
(grep /data3 /etc/fstab) || (echo "/dev/sdc1 /data3 xfs defaults 0 0" >> /etc/fstab)
(grep /data4 /etc/fstab) || (echo "/dev/sdd1 /data4 xfs defaults 0 0" >> /etc/fstab)
(grep /data5 /etc/fstab) || (echo "/dev/sde1 /data5 xfs defaults 0 0" >> /etc/fstab)
(grep /data6 /etc/fstab) || (echo "/dev/sdf1 /data6 xfs defaults 0 0" >> /etc/fstab)
(grep /data7 /etc/fstab) || (echo "/dev/sdg1 /data7 xfs defaults 0 0" >> /etc/fstab)
(grep /data8 /etc/fstab) || (echo "/dev/sdh1 /data8 xfs defaults 0 0" >> /etc/fstab)
(grep /data9 /etc/fstab) || (echo "/dev/sdi1 /data9 xfs defaults 0 0" >> /etc/fstab)
(grep /data10 /etc/fstab) || (echo "/dev/sdj1 /data10 xfs defaults 0 0" >> /etc/fstab)
(grep /data11 /etc/fstab) || (echo "/dev/sdk1 /data11 xfs defaults 0 0" >> /etc/fstab)
(grep /data12 /etc/fstab) || (echo "/dev/sdl1 /data12 xfs defaults 0 0" >> /etc/fstab)
(grep /data13 /etc/fstab) || (echo "/dev/sdm1 /data13 xfs defaults 0 0" >> /etc/fstab)
(grep /data14 /etc/fstab) || (echo "/dev/sdn1 /data14 xfs defaults 0 0" >> /etc/fstab)
(grep /data15 /etc/fstab) || (echo "/dev/sdo1 /data15 xfs defaults 0 0" >> /etc/fstab)
(grep /data16 /etc/fstab) || (echo "/dev/sdp1 /data16 xfs defaults 0 0" >> /etc/fstab)
(grep /data17 /etc/fstab) || (echo "/dev/sdq1 /data17 xfs defaults 0 0" >> /etc/fstab)
(grep /data19 /etc/fstab) || (echo "/dev/sdr1 /data18 xfs defaults 0 0" >> /etc/fstab)
(grep /data19 /etc/fstab) || (echo "/dev/sds1 /data19 xfs defaults 0 0" >> /etc/fstab)
(grep /data20 /etc/fstab) || (echo "/dev/sdt1 /data20 xfs defaults 0 0" >> /etc/fstab)
(grep /data21 /etc/fstab) || (echo "/dev/sdu1 /data21 xfs defaults 0 0" >> /etc/fstab)
(grep /data22 /etc/fstab) || (echo "/dev/sdv1 /data22 xfs defaults 0 0" >> /etc/fstab)
(grep /data23 /etc/fstab) || (echo "/dev/sdw1 /data23 xfs defaults 0 0" >> /etc/fstab)
(grep /data24 /etc/fstab) || (echo "/dev/sdx1 /data24 xfs defaults 0 0" >> /etc/fstab)

echo -e "\n==================="
df -h
echo -e "===================\n"

 

使用ansible把上面的脚本分发到目标服务器上(ansible的使用这里不细说)

ansible -i hosts all -m copy -a "src=new_disk.sh dest=/root/new_disk.sh mode=0755"

 

使用ansible批量执行脚本

ansible -i hosts all -m shell -a "bash /root/new_disk.sh"

 

大概5~10分钟就会执行好了(当然也要看服务器的数量多少,总之比一块一块的搞快多了吧)。

 

推荐阅读