- 论坛徽章:
- 6
|
对于公司的运维工作,我希望尽可能做到运维自动化,而部署系统作为日常工作的常见操作尤其需要自动化。
对于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
[vdisk0]
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 [OPTION]... HOST [PORT]
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/tec ... nagement-tools.aspx
DTK命令行参考手册
http://support.dell.com/support/ ... li/pdf/DTKCLIMR.pdf
参考文档:
https://www.aglt2.org/wiki/AGLT2/DellDeploymentToolkit
http://www.symantec.com/connect/ ... it-tools-automation |
|