使用 DTK 自动批量建立 RAID

一直想能否通过自动化的方式完成 RAID 的配置以及 BIOS 的升级,g 一下发现果真有一个叫 DTK(dell openmanage deployment toolkit) 的套件。他包含了 raidcfg 这个工具,使用他就可以自动化的完成 RAID 卡的设置,以及 syscfg 这个用来修改 BIOS 的工具。
之前我们几百台机器上的 raid 全部是人肉操作,一台机器从启动到配置完成关机最少 10min,非常的耗时低效。自从用了 dtk 之后,效率大大的提升。raidcfg 可以对机器上的磁盘的 raid 做增删,非常方便,适合大规模的机器部署,减少人肉操作出错的概率。
这里主要谈的是 RAID 卡的建立,因此主要涉及 raidcfg 的使用。要安装 dell 附带的这个工具有很多方式,最简单的是去 dell.com 下载。这里我们同步了 dell 的整个 deb, yum 源,因此直接通过包管理器安装 raidcfg 就可以了,包括前面说的 racadm 等都可以通过这个源安装。

接着是要去下载 dtk 这个 iso,解压:
# mount -o loop dtk_4.2_new_320_Linux.iso /mnt

在 isolinux/ 目录下会发现有 SA.1, SA.2 两个文件,file 一看分别是 kernel 和 initrd 文件,后来也证实这其实是 CentOS 6.2 定制的一个 busybox。在添加到 cobbler 的时候,使用 import 会出问题,索性直接手动添加,将 iso 的内容直接复制到 cobbler/ks_mirror/dtk_4.2-x86_64 下,然后再添加 distro 等:
# cp /mnt/* cobbler/ks_mirror/dtk_4.2-x86_64
# cobbler distro add –name=dtk_4.2 –kernel=cobbler/ks_mirror/dtk_4.2-x86_64/isolinux/SA.1 –initrd=cobbler/ks_mirror/dtk_4.2-x86_64/isolinux/SA.2
# cobbler profile add –name=dtk_4.2 –distro=dtk_4.2

到上面为止都比较顺利,接下来添加 system 需要做一些改进,跟之前一样,–name, –profile, –mac-address 等这些肯定是要添加的,–hostname, –dns-name 可以选择性的添加。最重要的是要在 –kopts 后面添加上 tftp 的相关脚本,否则需要做 raid 的机器获取不到配置文件:
# cobbler system edit –name=jaseywang –kopts="share_type=tftp share_location=/raidcfg share_script=raid10_6.sh tftp_ip=192.168.1.1"

接下来在 /vat/lib/tftpboot/raidcfg 里面加上类似 raid10_6.sh 的脚本就可以了:

# cat /var/lib/tftpboot/raidcfg/raid10_6.sh
cat > /tmp/raid10_6 <<EOF
[vdisk0]
controllerid=1
raid=10
readpolicy=ara
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1,0:3:1,0:4:1,0:5:1
EOF

echo "…………. rst all disks …………."
raidcfg -ctrl -c=1 -ac=rst
echo "………. 6 disks for raid10  ………."
raidcfg -i=/tmp/raid10_6
echo "…………… fast init ……………"
raidcfg -vd -c=1 -vd=0 -ac=fi
shutdown

raid10_6 这个文件里面的指令是怎么来的了?直接输入 raidcfg 就可以看到所有的 help 选项了,看上去很多,其实整理一下非常的简单,熟悉几个常见缩写就知道是干嘛的了:
controller -> -ctrl
action -> -ac
controllerid -> -c
adisk, pdisk -> -ad, -pd
raid -> -r
size -> -sz
stripsize -> -ssz
cachepolicy -> -cp
writepolicy -> -wp
readpolicy -rp
vdisk -> -vd

其他的直接看 help 好了。

上面的全部操作完,cobbler sync 重启。

除了通过 tftp 的方式获取到脚本之外,应该还可以通过 nfs, http 等方式获取到,不过这个这个我没实践。

最后谈下 BIOS 升级的方式,跟前面的类似,依然通过 tftp 完成:
# mkdir /var/lib/tftpboot/bios
# cp BIOS_28CG8_LN_1.6.0.BIN /var/lib/tftpboo/bios
# cat /var/lib/tftpboot/r620_bios_upgrade.sh
#!/bin/bash
tftp -g -r /bios/BIOS_28CG8_LN_1.6.0.BIN -l bios.sh 192.168.1.1
sh bios.sh -q
sleep 3600
reboot

修改 system 或者新建一个 system:
# cobbler system edit –name=jaseywang –kopts="share_type=tftp share_location=/bios share_script=r620_bios_upgrade.sh tftp_ip=192.168.1.1"

sync 一遍结束。
需要注意的是,如果不加上 -q(untended) 参数,则表示以交互式的方式进行,这明显不是我们希望的,另外,如果需要降级,在 sh 后面需要加上 -f(force) 参数,同时要配合 -q 使用。不过最后不加 reboot 命令,可以使用 -r,表示同样的意思。

ref:
https://www.aglt2.org/wiki/AGLT2/DellDeploymentToolkit