I had to monitor the Raid 5 status of two PE 2650 with a PERC3/Di and running under a GNU Debian. You can get the CLI tool afacli from dell website. Originally it was only available for windows or red-hat and it was necessary to tweak this stuff using Alien software for converting rpm to deb packages.

1
2
3
4
5
nicolas@grimm:~$ wget http://linux.dell.com/files/aacraid/afaapps-2.6-0.tar.gz
nicolas@grimm:~$ sudo tar -Pvzxf afaapps-2.6-0.tar.gz
# Normally you should have a device afa0 created. If not, check that devicename = "aac" in the file /dev/MAKEDEV.afa then do the following step :
cd /dev
./MAKEDEV.afa afa0

More information is available on the Dell website.

Now that we have a running AFACLI we can do a little script for checking hourly our raid status. Main thing to know with afacli - as lot of other CLI tool - is the HELP command. First you will have to open your device with the command open afa0 then you could check your container list, disk list etc. Due to network constraint I could only use an SSH connection, so for schedule this script I use a special user named xfertuser on each box for doing an SSH KEY AUTH. When my user is logon the remote box, I execute some command on AFACLI and use a simple diff on last afacli log file and the new afacli log file. Then in last step Icheck the messages log for AACRAID error messages.

Here is a sample script to use in a hourly crontab :

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/sh
SSH_CMD=/usr/bin/ssh
SSH_USER=xfertuser
**# We get the remote host from the first argument of this script**
REMOTE_HOST=$1
function doCmd()
{
$SSH_CMD $SSH_OPTIONS $SSH_USER@$REMOTE_HOST "$@";
}

LOG_FILE="raid.current.log"
LAST_LOG="raid.last.log"

AFACLI=/usr/sbin/afacli
LOG_DIR=~/.raid-check
CMD_FILE=afacli.commands
SYS_LOG=/var/log/messages

**# AFACLI commands to execute for log Raid 5 status**

CMD_LIST="
open afa0
logfile start ${LOG_FILE}
container list
disk list
enclosure show status
logfile end
exit
"

**# Here we execute all our check on the remote box**

doCmd test -d ${LOG_DIR} || doCmd mkdir ${LOG_DIR}
doCmd "echo -e \"$CMD_LIST\" > $LOG_DIR/$CMD_FILE"
doCmd test -f ${LOG_DIR}/${LOG_FILE} || doCmd "sh -c \"cd ${LOG_DIR}; export TERM=xterm; sudo ${AFACLI} < ${CMD_FILE} > console.return\""
doCmd "sudo mv $LOG_DIR/$LOG_FILE $LOG_DIR/$LAST_LOG"
doCmd "sh -c \"cd ${LOG_DIR}; export TERM=xterm; sudo ${AFACLI} < ${CMD_FILE} > console.return\""
doCmd "sh -c \"cd ${LOG_DIR}; sudo /usr/bin/diff $LOG_FILE $LAST_LOG\""
doCmd "sudo /bin/grep -e \"(AAC|aacraid):\" $SYS_LOG"

Comments