免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15086 | 回复: 1
打印 上一主题 下一主题

[其他] DELL服务器使用DTK+PXE全自动创建RAID [复制链接]

论坛徽章:
6
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29处女座
日期:2014-04-21 11:51:59辰龙
日期:2014-05-12 09:15:10NBA常规赛纪念章
日期:2015-05-04 22:32:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-30 21:52 |只看该作者 |倒序浏览
对于公司的运维工作,我希望尽可能做到运维自动化,而部署系统作为日常工作的常见操作尤其需要自动化。
对于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       

论坛徽章:
0
2 [报告]
发表于 2013-08-01 17:08 |只看该作者
多谢分享!:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP