cobbler使用DTK自动化做RAID

转自:https://garywu520.github.io/blog/2017/04/12/cobbler%E4%BD%BF%E7%94%A8DTK%E8%87%AA%E5%8A%A8%E5%8C%96%E5%81%9ARAID/


Dell提供一个叫做DTK(dell openmanage deployment toolkit)的套件, 套件包含了 raidcfg 这个工具。dtk导入cobbler之后,就可以自动化的完成RAID卡的设置;以及自动化完成修改BIOS设置.

自动化配置RAID

下载DTK ISO镜像

下载: DTK_v5.3(最新版)

挂载iso并安装rpm基础包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mount -o loop dtk_5.3.0_1908_Linux64_A00.iso /mnt
cd /mnt/RPMs/rhel7/x86_64
ls

#注:以下包安装有前后顺序
yum install -y srvadmin*
yum install -y raidcfg-5.3.0-1908.9058.el7.x86_64.rpm
yum install -y syscfg-5.3.0-1908.9058.el7.x86_64.rpm
yum install -y dtk-scripts-5.3.0-1908.9058.el7.x86_64.rpm

命令软链
ln -sv /opt/dell/toolkit/bin/raidcfg /usr/sbin/raidcfg

注:我的cobbler部署在了CentOS7上,所以需要进入rhel7目录。
了解文件SA.1和SA.2
1
2
3
4
5
6
7
8
9
10
# ls -lh /mnt/isolinux/
......
-r--r--r-- 1 root root 4.0M Feb 15 2016 SA.1
-r--r--r-- 1 root root 158M Feb 15 2016 SA.2
......

# file /mnt/isolinux/SA.1
# file /mnt/isolinux/SA.2

上面可以看到有两个文件SA.1和SA.2, 这两个文件分别是kernel和initrd文件,稍后导入到cobbler的时候会用到它们。
手动添加dtk所需文件到cobbler启动菜单
1
2
3
4
5
6
7
8
9
10
11
12
拷贝SA.1和SA.2到/var/www/cobbler/ks_mirror/目录中
# mkdir /var/www/cobbler/ks_mirror/dtk5.3_raid5_n3x1/
# cp /mnt/isolinux/SA* /var/www/cobbler/ks_mirror/dtk5.3_raid5_n3x1

将dtk导入到cobbler
# cobbler distro add --name=dtk5.3_raid5_n3x1 --kernel=/var/www/cobbler/ks_mirror/dtk5.3_raid5_n3x1/SA.1 --initrd=/var/www/cobbler/ks_mirror/dtk5.3_raid5_n3x1/SA.2
# cobbler profile add --name=dtk5.3_raid5_n3x1 --distro=dtk5.3_raid5_n3x1
注: name名称定义为"dtk5.3_raid5_n3x1"原因是便于识别,即3块盘做1组RAID5。

查看确认
# cobbler profile list
# cobbler distro list
配置RAID自动化脚本并与distro进行关联
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
创建raid脚本文件存放目录
mkdir /var/lib/tftpboot/raidcfg/raid5_n3x1

接下来配置raid5.sh脚本
vim /var/lib/tftpboot/raidcfg/raid5_n3x1/raid5_n3x1.sh 内容如下:

##-----------脚本内容开始-------------------------
#!/bin/bash

cat >> /tmp/raid5.ini <<EOF
[vdisk0]
controllerid=0
raid=5
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1
EOF

echo "…………. reset all disks …………."
raidcfg -ctrl -c=0 -ac=rst
echo "………. 3 disks for raid5 ………."
raidcfg -i=/tmp/raid5.ini
echo "…………… fast init ……………"
raidcfg -vd -c=0 -vd=0 -ac=fi
echo "…………… RAID5 is created, this is server will be shutdown... ……………"
shutdown
##-------------脚本内容结束-----------------------

脚本含义:
首先使用raidcfg命令reset控制器,删除所有原有RAID配置,将磁盘置为"JBOD"模式。然后再次调用raidcfg,创建RAID5。创建好RAID之后,让系统重启(如果写shutdown则关机)

chmod 755 /var/lib/tftpboot/raidcfg/raid5_n3x1/raid5_n3x1.sh
注:cobbler服务器千万不要运行这个脚本,你懂得
1
2
3
4
把raid5脚本与distro进行关联
cobbler distro edit --name=dtk5.3_raid5_n3x1 --kopts="share_type=tftp share_location=/raidcfg/dtk5.3_raid5_n3x1 share_script=dtk5.3_raid5_n3x1.sh tftp_ip=x.x.x.x"

注: 这条命令修改的配置文件是/var/lib/tftpboot/pxelinux.cfg/default
最后执行cobbler sync命令
1
2
最后执行命令: cobbler sync
目的:保存配置

导入多个DTK满足不同RAID自动化需求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
例如:Dell R720,8块盘满配,4块一组RAID5,做两组。

mount -o loop dtk_5.3.0_1908_Linux64_A00.iso /mnt
cd /var/www/cobbler/ks_mirror/
mkdir dtk5.3_raid5_n4x2
cp /mnt/isolinux/SA* dtk5.3_raid5_n4x2/
cd dtk5.3_raid5_n4x2/ && ls

cobbler distro add --name=dtk5.3_raid5_n4x2 --kernel=/var/www/cobbler/ks_mirror/dtk5.3_raid5_n4x2/SA.1 --initrd=/var/www/cobbler/ks_mirror/dtk5.3_raid5_n4x2/SA.2

cobbler profile add --name=dtk5.3_raid5_n4x2 --distro=dtk5.3_raid5_n4x2
cobbler profile list
cobbler distro list

cd /var/lib/tftpboot/raidcfg/
mkdir raid5_n4x2

接下来配置raid5_n4x2.sh脚本
vim /var/lib/tftpboot/raidcfg/raid5/raid5_n4x2.sh
(略)
chmod 755 /var/lib/tftpboot/raidcfg/raid5/raid5_n4x2.sh

cobbler distro edit --name=dtk5.3_raid5_n4x2 --kopts="share_type=tftp share_location=/raidcfg/raid5_n4x2 share_script=raid5_n4x2.sh tftp_ip=x.x.x.x"

cobbler sync

常用RAID脚本

raid5-3块盘/组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat >> /tmp/raid5.ini <<EOF
[vdisk0]
controllerid=0
raid=5
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1
EOF

echo "…………. reset Other Raid …………."
raidcfg -ctrl -c=0 -ac=fgnclr
echo "…………. reset all disks …………."
raidcfg -ctrl -c=0 -ac=rst
echo "………. 3 disks for raid5 ………."
raidcfg -i=/tmp/raid5.ini
echo "…………… fast init ……………"
raidcfg -vd -c=0 -vd=0 -ac=fi
echo "…………… RAID5 is created, this is server will be shutdown... ……………"
shutdown

2组raid5-4块盘/组(Dell R720)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash

cat >> /tmp/raid5_n4x2.ini <<EOF
[vdisk0]
controllerid=0
raid=5
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1,0:3:1

[vdisk1]
controllerid=0
raid=5
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:4:1,0:5:1,0:6:1,0:7:1

EOF

echo "………….reset Other Raid …………."
raidcfg -ctrl -c=0 -ac=fgnclr
echo "…………. reset all disks …………."
raidcfg -ctrl -c=0 -ac=rst
echo "………. 4 disks for raid5 ………."
raidcfg -i=/tmp/raid5_n4x2.ini
echo "…………… fast init ……………"
raidcfg -vd -c=0 -vd=0 -ac=fi
raidcfg -vd -c=0 -vd=1 -ac=fi
echo "…………… This is server will be shutdown... ……………"
shutdown

注:
1.多组Raid下,controllerid都配置为0,因为共属于一个控制器,而vdisk可以有多个,如[vdisk=0]、[vdisk=1]
2.多组Raid与硬盘容量无关,只需保证每组RAID容量一致即可。
3.若原硬盘已有RAID信息, 这条指令可以清除:raidcfg -ctrl -c=0 -ac=fgnclr

raid5_n3x1+raid0_n1x1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

cat >> /tmp/raid5_n3x1+raid0_n1x1.ini <<EOF
[vdisk0]
controllerid=0
raid=5
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1

[vdisk1]
controllerid=0
raid=0
readpolicy=nra
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:3:1

EOF

echo "………….reset Other Raid …………."
raidcfg -ctrl -c=0 -ac=fgnclr
echo "…………. reset all disks …………."
raidcfg -ctrl -c=0 -ac=rst
echo "………. raid5 + raid0 ………."
raidcfg -i=/tmp/raid5_n3x1+raid0_n1x1.ini
echo "…………… fast init ……………"
raidcfg -vd -c=0 -vd=0 -ac=fi
raidcfg -vd -c=0 -vd=1 -ac=fi
echo "…………… RAID is created, this is server will be shutdown... ……………"
shutdown

附录:RAID参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
上面这些指令从哪儿来?
raidcfg -h 帮助都有使用方法,常用的如下:

controller 简写为 -ctrl
action 简写为 -ac
controllerid 简写为 -c
adisk, pdisk 简写为 -ad, -pd
raid 简写为 -r
size 简写为 -sz
stripsize 简写为 -ssz
cachepolicy 简写为 -cp
writepolicy 简写为 -wp
readpolicy 简写为 -rp
vdisk 简写为 -vd

RAIDCFG命令分类

信息输出类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#列出所有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.
vdisk操作类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#创建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>
hotspare类
1
2
3
4
5
6
7
8
9
10
11
#分配全局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>
raid控制类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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>
通用参数
1
2
3
4
5
6
7
8
9
10
11
除了[-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

参考:官方参数说明

原文地址:https://www.cnblogs.com/yueminghai/p/13517479.html