1、背景介紹
工作當中經常會遇到需要對新來的服務器進行安裝系統,在安裝系統的時候需要對磁盤進行分區、格式化。往往服務器磁盤都是2塊SSD+12塊SATA硬盤,在對如此之多的磁盤進行分區和格式化,真是個體力活。甚至還有許多服務器的USB插口不夠用,鼠標和鍵盤不能同時用,而且身邊又沒有一個USBhub,其操作難度可想而知。於是就有了以下的故事。最初的想法是在安裝操作系統的時候,只用對系統盤進行分區和格式化,剩余的磁盤待裝完操作系統之后再在后台手動進行分區和格式化,再后來就想着寫一個shell腳本進自動分區和格式化豈不是完美,說到做到,下面就開始嘗試
2、手動格式化和掛載
1)、統計磁盤信息
在后台執行lsblk -a命令既可以查看到所有的磁盤信息,下圖中sda為系統盤,已經存在sda1和sda2兩個分區,其他從sdb至sdi均未分區

2)、磁盤分區
執行命令parted -s /dev/sdb mklabel gpt mkpart primary ext4 0 100%對sdb磁盤進行分區,此處分區格式為gpt分區,容量為sdb磁盤的全部(這里只創建了一個分區),后面依次對sdc sdd等所有磁盤進行分區

3)、格式化分區
執行命令mkfs.ext4 -F /dev/sdb1即對磁盤sdb的第一個分區進行格式化為ext4格式,后面依次對剩下的磁盤進行格式化
4)、創建磁盤分區掛載目錄
我這里將所有的磁盤分區都掛載在/home目錄下的sdb、sdc、sdd....,所有我們需要在/home目錄下新建目錄sdb、sdc、sdd....
cd /home
mkdir sdb sdc sdd ...
5)、掛載分區
首先通過blkid命令查看所有分區的UUID

然后編輯/etc/fstab文件,將sdb1至sdi1所有分區添加進去,如下圖

最后重啟系統即可
3、編寫shell腳本自動化
有了以上的實踐,就想着寫一個shell腳本能自動進行磁盤的分區和掛載,以下貼上代碼
1 #!/usr/bin/bash 2 DISK=`lsblk -a |grep disk|grep -v sda|awk '{print $1}'` 3 4 function partedDisk 5 { 6 for disk in $DISK 7 do 8 echo -e "\033[33m Starting parted Disk $disk \033[0m" 9 parted -s /dev/${disk} mklabel gpt 10 parted -s /dev/${disk} mkpart primary ext4 0 100% 11 done 12 echo -e "\033[47;32m All disk parted Done! \033[0m" 13 sleep 1s 14 } 15 16 function formatPartition 17 { 18 for disk in $DISK 19 do 20 echo -e "\033[33m Starting format partition /dev/${disk}1 \033[0m" 21 mkfs.ext4 -F /dev/${disk}1 22 sleep 0.5s 23 done 24 echo -e "\033[47;32m All partition format Done!!! \033[0m" 25 sleep 1s 26 } 27 28 function makeDir 29 { 30 echo -e "\033[33m Starting make the mount diretory \033[0m" 31 for disk in $DISK 32 do 33 mkdir /home/${disk} 34 done 35 echo -e "\033[31m The mount diretories are: \033[0m" 36 for disk in $DISK 37 do 38 echo /home/${disk} 39 done 40 echo -e "\033[47;32m Make mount diretories Done!! \033[0m" 41 sleep 1s 42 } 43 44 function mountDisk 45 { 46 for disk in $DISK 47 do 48 uuid=`blkid /dev/${disk}1|awk '{print $2}'|awk -F "\"" '{print $2}'` 49 cat <<EOF >>uuid.txt 50 UUID=$uuid /home/${disk} ext4 defaults 1 2 51 EOF 52 done 53 cat uuid.txt>>/etc/fstab 54 echo -e "\033[31m The file /etc/fstab is: \033[0m" 55 cat /etc/fstab 56 echo -e "\033[31m Please comfirm it and reboot your system!!! \033[0m" 57 } 58 59 formatDisk 60 partedDisk 61 makeDir 62 mountDisk
