1、背景介紹 工作當中經常會遇到需要對新來的伺服器進行安裝系統,在安裝系統的時候需要對磁碟進行分區、格式化。往往伺服器磁碟都是2塊SSD+12塊SATA硬碟,在對如此之多的磁碟進行分區和格式化,真是個體力活。甚至還有許多伺服器的USB插口不夠用,滑鼠和鍵盤不能同時用,而且身邊又沒有一個USBhub, ...
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