解決PXE批量網絡安裝Linux系統時kickstart自動識別硬盤名稱的問題的方案

  在使用PXE結合kickstart文件可實現網絡全自動安裝Linux系統,按照kickstart語法須要在ks.cfg文件中指定操作系統安裝的位置(指定硬盤)如hda、sda或硬盤的UUID等唯一標識,分區信息以及建立mbr的位置。

wKiom1bZu9_whoNOAAAp7Xjxnfc005.png

  如果硬盤命名指定有誤,或與實際硬盤命名不符,則無法找到對應的設備等那麼anaconda會直接ks.cfg文件報錯而導致安裝失敗;如果在ks.cfg文件中不指定硬盤信息,那麼在進行到分區步驟時,anaconda會在此停下來等待人工選擇後繼續,這就導致批量安裝系統時嚴重降低部署效率。


  1. 正常情況下CentOS、RHEL、SUSE、Ubuntu等Linux系統按照SAS/SATA接口硬盤默認爲/dev/sda、/dev/sdb、/dev/sdc....,但也有特殊情況,比如HP服務器主板加裝P410陣列卡配置RAID後在CentOS/RHEL平臺下默認以/dev/cciss/c0d0、/dev/cciss/c0來命名的;不同的虛擬化平臺所虛擬化磁盤在Linux平臺默認命令也可能不一樣,Xen虛擬化磁盤默認以/dev/xvda、/dev/xvde命令;Kvm虛擬化磁盤默認以/dev/vda、/dev/vdb來命令等等。

  2. 如果主板直接接SAS/SATA硬盤或通過RAID控制器管理的本地硬盤通過PXE安裝系統,會順利將系統與mbr安裝到本地硬盤上;如果主板通過光纖HBA卡映射的SAN存儲,通過Linux內核優先掃描到,則被命令爲/dev/sda等情況,那麼默認可能會出現將操作系統安裝到本地硬盤,而mbr安裝到了SAN存儲,導致安裝完成後系統無法正常啓動。


  那麼可否讓anaconda可否根據磁盤大小或類型來自動識別磁盤的命名,並確定我們想要安裝系統的位置呢?

  這個問題是可以解決的,在kickstart語法中有pre預安裝環境這一部分,在執行安裝之前可做一些操作。在載入內核使用腳本判斷出我們所需要安裝硬盤的命名,再指定給kickstart文件調用即可。

  這裏我們使用容量大小爲32GB的磁盤來安裝操作系統與mbr,可從/proc/partitions文件內容判斷第一塊容量大小爲32GB*1024*1024=3355442KB磁盤即可。

wKioL1bZwwaA9iVUAAAVO_VJjng095.png

預安裝腳本部分(注意%pre最後要以%end來結束標識):

disk=$(while read line;do awk 'BEGIN{} {if ($3 == "33554432" && $2 == "0") print $4} END{}';done < /proc/partitions)

cat > /tmp/part-include << EOF

# Disk partitioning information

part / --asprimary --fstype="ext4" --ondisk=$disk --size=24576

part swap --fstype="swap" --ondisk=$disk --size=8191

EOF

  將判斷識別後的磁盤名稱按照kickstart語法寫入臨時文件/tmp/part-include,再將kickstart文件中分區參數的部分修改爲調用/tmp/part-include文件中的內容

%include /tmp/part-include

完整部分如下圖:

wKiom1b3gezSk2idAACHTj3GzXw145.png


  就這樣不論磁盤默認何種方式命名,僅依據容量條件來靈活性地判定系統安裝的存儲位置,提高批量部署效率!這只是一種解決思路,方法並不唯一,有更多方法的朋友歡迎跟帖討論。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章