DELL伺服器使用DTK+PXE全自動創建RAID
對於公司的運維工作,我希望儘可能做到運維自動化,而部署系統作為日常工作的常見操作尤其需要自動化。
對於PXE安裝,Kickstart等技術之前也有寫過文章,但那些都是要在系統做好了RAID,配置好了BIOS參數之後再做的工作。
今天,來聊聊如何把做RAID,配置BIOS也自動化。
因為我公司里用的伺服器DELL的占絕大多數,因此就說說DELL的伺服器。
Dell提供了一個工具叫Dell Deployment Toolkit,也就是隨伺服器帶來的那個光碟。
這個光碟中包含了Dell的各種驅動和syscfg、raidcfg工具。這些工具可以用腳本執行。
用這個光碟引導系統,可以直接進行BIOS配置和創建RAID等操作。
下面說說如何把DTK整合進PXE環境中。
1.從ftp://ftp.us.dell.com/sysman/下載最新版的DTK Linux ISO。
2.掛載DTK Linux ISO,複製isolinux/SA.1和isolinux/SA.2 到TFTP目錄中。
其實SA.1就是Linux kernel,而SA.2則是initrd文件。
假設我們把SA.1和SA.2複製到/tftpboot/pxelinux/dtk目錄中
3.編輯pxelinux.cfg文件,增加如下條目:
default dtk
prompt 0
label dtk
kernel dtk/SA.1
append initrd=dtk/SA.2 ramdisk_size=65536
DTK Linux環境會自動使用eth0,並使用DHCP獲取地址,然後開啟一個沒有root密碼的sshd server.
我們可以直接ssh到這個系統中,執行一些操作,當然更重要的是可以寫腳本。
4.自動創建RAID
我們可以使用TFTP,NFS等方式共享一個自動化腳本,例如:
我們在/tftpboot/pxelinux/dtk創建raid0.sh,內容如下:
#!/bin/bash
cat > /tmp/raid0.ini <<EOF
controllerid=0
;size=278784
raid=0
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=
adisk=0:0:1,0:1:1
EOF
raidcfg -ctrl -c=0 -ac=rst
raidcfg -i=/tmp/raid0.ini
shutdown
上邊腳本首先使用raidcfg命令reset控制器,刪除所有原有RAID配置,將磁碟置為"JBOD"模式。
然後再次調用raidcfg,在2塊磁碟上創建RAID0。(以上腳本在R610上通過測試,RAID卡為板載的SAS6i)
創建好RAID之後,我們讓系統關機(如果寫reboot則重啟)。
然後我們需要修改pxelinux.cfg中的配置,改為如下:
default dtk
prompt 0
label dtk
kernel dtk/SA.1
append initrd=dtk/SA.2 ramdisk_size=65536 share_type=tftp share_location=dtk share_script=raid0.sh tftp_ip=10.10.128.12
5.自動升級BIOS
創建/tftpboot/pxelinux/dtk/files/目錄,將R610最新的BIOS文件複製到這個目錄中,創建一個名為r610.bios的鏈接文件。
創建/tftpboot/pxelinux/dtk/r610bios.sh,腳本內容如下:
#!/bin/bash
tftp -g -r dtk/files/r610.bios -l bios.sh 10.10.128.15
sh bios.sh -q
sleep 3600
reboot
然後修改pxelinux.cfg,內容如下:
default dtk
prompt 0
label dtk
kernel dtk/SA.1
append initrd=dtk/SA.2 ramdisk_size=65536 share_type=tftp share_location=dtk share_script=r610bios.sh tftp_ip=10.10.128.12
需要注意的是,這個tftp其實是busybox,所以和我們常用的tftp參數稍有不同,busybox裡面的解釋如下:
Usage: tftp ... HOST
Transfer a file from/to tftp server using "octet" mode
Options:
-l FILE Local FILE
-r FILE Remote FILE
-g Get file
-p Put file
-b SIZE Transfer blocks of SIZE octets
附錄:
raidcfg命令可分為以下幾類:
1.輸出當前信息類
#列出所有RAID控制器信息
raidcfg <-ctrl>
#列出指定ID的RAID控制器信息
raidcfg <-ctrl> [-c=ID]
#顯示指定控制器上的所有物理磁碟信息
raidcfg <-ad -pd=""> <-c id="">
#顯示指定控制器指定vdisk上的所有物理磁碟信息
raidcfg <-ad -pd=""> <-c id=""> [-vd=ID]
#顯示具體某塊物理磁碟的信息
raidcfg <-ad -pd=""> <-c id=""> [-ad=ch:targ[:encl],ch:targ[:encl],...]
#顯示所有控制器上的所有vdisk信息
raidcfg <-vd>
#顯示指定控制器上的所有vdisk信息
raidcfg <-vd> [-c=ID]
#顯示指定控制器上的指定vdisk信息
raidcfg <-vd> <-c id=""> [-vd=ID]
#將系統函數調用的返回值賦予用戶指定的環境變數
raidcfg <-se> <-envn string=""> <-envc function=""> [-f=filename]
Function Calls: getcontrollerslots.
#將系統函數調用的返回值賦予用戶指定的環境變數
raidcfg <-se> <-envn string=""> <-envc function=""> <-c id=""> [-f=filename]
Function Calls:getfirmware,getcontrollertype,getadisks,getadiskcount,getfreeadisks, getfreeadiskcount,getfreeadisksize,gethotspares.
2.vdisk操作類
#創建vdisk
raidcfg <-ctrl> <-ac cvd=""> <-c id=""> <-ad -pd="ch:targ[:encl],ch:targ[:encl],">
[-r=n] [-sz=n] [-ssz=n] [-cp=d | e]
[-rp=ra | ara | nra | rc | nrc] [-wp=wb | wt | fwb | wc | nwc]
[-fd=ch:targ,ch:targ,...] [-str=number] [-sp=number]
#刪除指定控制器上的所有vdisk
raidcfg <-vd> <-ac dvd=""> <-c id="">
#刪除指定控制器上的指定vdisk
raidcfg <-vd> <-ac dvd=""> <-c id=""> [-vd=ID]
#對指定控制器上的vdisk執行快速初始化
raidcfg <-vd> <-c id=""> <-vd id=""> <-ac fi="">
#對指定控制器上的vdisk執行完全(慢速)初始化
raidcfg <-vd> <-c id=""> <-vd id=""> <-ac sli="">
#取消指定vdisk的完全(慢速)初始化
raidcfg <-vd> <-c id=""> <-vd id=""> <-ac ci="">
3.hotspare類
#分配全局hotspare磁碟
raidcfg <-ctrl> <-ac sghs=""> <-c id=""> <-ad -pd="ch:targ[:encl]">
#取消分配全局hotspare磁碟
raidcfg <-ctrl> <-ac rghs=""> <-c id=""> <-ad -pd="ch:targ[:encl]">
#在指定控制器上啟用Controller Persistent Hot Spare
raidcfg <-ctrl> <-c id=""> <-ac ephs="">
#在指定控制器上禁用Controller Persistent Hot Spare
raidcfg <-ctrl> <-c id=""> <-ac dphs="">
4.RAID控制器類
#reset指定控制器
raidcfg <-ctrl> <-c id=""> <-ac rst="">
#讀取所有控制器上的RAID配置信息,輸出到指定的ini文件
raidcfg <-o filename="">
#讀取指定的ini文件,在配置文件指定的制器上創建RAID
raidcfg <-i filename="">
#在指定控制器上導入外部RAID配置信息
raidcfg <-ctrl> <-c id=""> <-ac fgnimp="">
#在指定控制器上清除外部RAID配置信息
raidcfg <-ctrl> <-c id=""> <-ac fgnclr="">
#在指定控制器上恢復外部RAID配置信息
raidcfg <-ctrl> <-c id=""> <-ac fgnrvr="">
5.通用參數,除了[-ver]之外,可以應用於上邊任何命令中:
[-ver] -- 顯示RAIDCFG版本
[-l=logfilename] -- 將輸出寫入到log文件中
[-si] -- 靜默,抑制console輸出
應用舉例:
假設系統總共有8塊硬碟,前兩塊146G做RAID1,后5塊900G做RAID5,最後一塊做全局hotspare
raidcfg -ctrl -ac=cvd -c=0 -ad=0:0:0,0:1:0 -r=1
raidcfg -ctrl -ac=cvd -c=0 -ad=0:2:0,0:3:0,0:4:0,0:5:0,0:6:0 -r=5
raidcfg -ctrl -ac=sghs -c=0 -ad=0:7:0
資源:
Dell OpenManage Systems Management Tools 主頁
http://en.community.dell.com/techcenter/systems-management/w/wiki/1757.dell-openmanage-systems-management-tools.aspx
DTK命令行參考手冊
http://support.dell.com/support/edocs/software/dtk/4_1/cli/pdf/DTKCLIMR.pdf
參考文檔:
https://www.aglt2.org/wiki/AGLT2/DellDeploymentToolkit
http://www.symantec.com/connect/articles/how-manually-run-deployment-toolkit-tools-automation
《解決方案》
多謝分享!:)