需要做这么一个事情:每5分钟检测一次Raid和disk状态,把结果写入到指定的文件中去。
首先,要去找管理软件。不同的服务器生产不同的Raid卡控制器会有不同的管理软件
IBM机器的情况
本次使用的是IBM机器LSI的Raid卡,可以使用MegaRAID Storage Manager Application for Linux 的图形化界面来管理,但它没办法实现要求。有一个叫做MegaCli的命令行软件可以进行无人管理。
需要安装这个软件并写一个脚本提取有效的信息写入到指定的文件中。
软件可以到IBM的网站上下载(https://www-933.ibm.com/support/fixcentral/),在这个网页中可以根据机器类型、OS类型等来选择合适的软件,对运维来说是个很有用的网站。
1、如果你不知道使用的Raid卡是什么型号的,可以先确认:
# dmesg | grep -i raid
scsi0 : LSI SAS based MegaRAID driver
Vendor: IBM Model: ServeRAID-MR10k Rev: 1.12
62 [RAIDarray.mpp]Device 0x2f187800 is not an array
62 [RAIDarray.mpp]Device 0x2f187800 is not an array
md: Autodetecting RAID arrays.
一般在第一行就可以看出是什么型号和厂商的内容。确认好型号信息之后在去选择下载合适的管理软件。
2、下载好了之后,直接安装就可以了,当然安装之前可以测试一下:
#unzip ibm_utl_sraidmr_megacli-8.04.10_linux_32-64.zip
# rpm -ivh --test Lib_Utils-1.00-09.noarch.rpm MegaCli-8.04.10-1.noarch.rpm
# rpm -ivh Lib_Utils-1.00-09.noarch.rpm MegaCli-8.04.10-1.noarch.rpm
安装成功之后,先测试是否能够查看到Raid信息
# /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL //如果是32为系统,则变为:# /opt/MegaRAID/MegaCli/MegaCli -PDList -aALL
有结果出来则可以拿到信息。
3、下面开始写脚本,内容大致如下:
#vi /root/disk_check_shell.sh
-------------------start-----------------------
#!/bin/bash
#check raid disk status.
suffix=$(date +"%Y-%m-%d %H:%M:%S")
#logical status
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL|grep 'Adapter'|tr '\n' ' '|sed 's/^/'"$suffix"' /g' >> /var/log/disk_check.txt
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL|grep 'State'|sed 's/[ ][ ]*/ /g' >> /var/log/disk_check.txt
#physical status
physicaldisknum=`/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL|grep -c 'Slot Number'`
#echo $physicaldisknum
let "a=$physicaldisknum -1"
for i in $(seq 0 $a):
do
#echo $i
s="Slot Number: "$i
#echo $s
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL|grep "$s"|tr '\n' ' '|sed 's/^/'"$suffix"' /g' >> /var/log/disk_check.txt
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL|grep -A 20 "$s"|grep 'Firmware state' >> /var/log/disk_check.txt
done
-------------------finish---------------------
我只需要逻辑盘信息和物理盘信息即可。关于该软件还有许多其他的用法,可以在百度中搜索到。
以上脚本的结果大概显示如下
#chmod 755 /root/disk_check_shell.sh
#/root/disk_check_shell.sh
---------start------------
2013-11-18 15:35:01 Adapter 0 -- Virtual Drive Information: State : Optimal
2013-11-18 15:35:01 Slot Number: 0 Firmware state: Online, Spun Up
2013-11-18 15:35:01 Slot Number: 1 Firmware state: Online, Spun Up
---------finish----------
4、需要把脚本放到crontab中,每5分钟执行一次
#crontab -e
*/5 * * * * /root/disk_check_shell.sh > /dev/null 2>&1
保存退出,这样就实现了前面的要求了。
5、最后还需要做一个事情,就是logrotate,否则/var/log/disk_check.txt将会变得很大很大,还可能会造成其他一些问题。
这里的策略就跟syslog设置一样(在syslog策略中添加/var/log/disk_check.txt即可),当然也可以配置独立的策略。
#vi /etc/logrotate.d/syslog
----------------start-----------------
/var/log/messages /var/log/disk_check.txt {
。。。。。。。。。。。。。。。。。。。
}
----------------finish----------------
然后重启syslog服务即可。
#service syslog restart
这样,前面的要求就实现了。打开/var/log/disk_check.txt,应该可以看到每5分钟都有一个结果出来。
IBM机器AdaptecRaid卡
如果是Adaptec的话,则使用的是arcconf来进行配置
这个软件也是可以在官网上下载的(http://www.adaptec.com/en-us/downloads/)
# dmesg | grep -i raid
Adaptec aacraid driver 1.1-5[2453]
scsi0 : ServeRAID
md: Autodetecting RAID arrays.
安装软件
#rpm -ivh --test asm_linux_x64_v6_40_18530.rpm
#rpm -ivh asm_linux_x64_v6_40_18530.rpm
写脚本,脚本的内容大致如下
------------start--------------------
#!/bin/bash
#check raid disk status.
suffix=$(date +"%Y-%m-%d %H:%M:%S")
/usr/StorMan/arcconf GETCONFIG 1 AD|grep 'Controller Status'|sed 's/[ ][ ]*/ /g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/StorMan/arcconf GETCONFIG 1 LD|grep 'Status of logical device'|sed 's/[ ][ ]*/ /g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/StorMan/arcconf GETCONFIG 1 PD|grep -B 2 'State'|tr '\n' ','|sed 's/[ ][ ]*/ /g'|sed 's/$/\n/g'|sed 's/--,/\n/g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/StorMan/arcconf GETCONFIG 1 PD|grep -B 1 'Device is an Enclosure'|tr '\n' ','|sed 's/[ ][ ]*/ /g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/StorMan/arcconf GETCONFIG 1 PD|grep -A 1 'Status of Enclosure'|tr '\n' ','|sed 's/[ ][ ]*/ /g'|sed 's/$/\n/g' >> /var/log/disk_check.txt
------------finish------------------
脚本执行结果如下
---------------start---------------
2013-11-18 17:10:01 Controller Status : Optimal
2013-11-18 17:10:01 Status of logical device : Optimal
2013-11-18 17:10:01 Device #0, Device is a Hard drive, State : Online,
2013-11-18 17:10:01 Device #1, Device is a Hard drive, State : Online,
2013-11-18 17:10:01 Device #2, Device is an Enclosure services device, Status of Enclosure services device, Temperature : Normal,
--------------finish---------------
其他的设定和前面一样。
HP机器的情况
如果是HP的机器,则使用的是hpacucli。
这个软件可以在HP的支持网站上下载(http://www8.hp.com/cn/zh/support.html)
同样也是下载之后安装
#rpm -qa | grep hpacucli //确认原来没有安装过hpacucli
#rpm -ivh --test /media/hpacucli-9.40-12.0.x86_64.rpm
#rpm -ivh /media/hpacucli-9.40-12.0.x86_64.rpm
写脚本,脚本的内容大致如下
------------start--------------------
#!/bin/bash
#check raid disk status.
suffix=$(date +"%Y-%m-%d %H:%M:%S")
/usr/sbin/hpacucli ctrl all show status|sed 's/[ ][ ]*/ /g'|sed /^$/d|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/sbin/hpacucli ctrl slot=0 logicaldrive all show|grep 'logicaldrive'|sed 's/[ ][ ]*/ /g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
/usr/sbin/hpacucli ctrl slot=0 physicaldrive all show|grep 'physicaldrive'|sed 's/[ ][ ]*/ /g'|sed 's/^/'"$suffix"'/g' >> /var/log/disk_check.txt
------------finish------------------
脚本执行结果如下
---------------start---------------
2013-11-18 17:00:01Smart Array P410i in Slot 0 (Embedded)
2013-11-18 17:00:01 Controller Status: OK
2013-11-18 17:00:01 Cache Status: OK
2013-11-18 17:00:01 Battery/Capacitor Status: OK
2013-11-18 17:00:01 logicaldrive 1 (136.7 GB, RAID 1, OK)
2013-11-18 17:00:01 physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 146 GB, OK)
2013-11-18 17:00:01 physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 146 GB, OK)
--------------finish---------------
其他的设定和前面一样。