Raid 5 Monitoring on Dell Power Edge 2650 with afacli

  • HOME
  • >
  • LINUX
  • >
  • Raid 5 Monitoring on Dell Power Edge 2650 with afacli
Last Updated: 

I had to monitor the Raid 5 status of two PE 2650 with a PERC3/Di running with 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.

[me@host ~]$ wget http://linux.dell.com/files/aacraid/afaapps-2.6-0.tar.gz
[me@host ~]$ 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 :

#!/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"
Related linux posts that you may like...
The Complete How To Guide of Bash Functions
Learn how to write shell scripts with bash functions. This guide includes examples and best practices on how to define, call, and debug functions in bash.
How To Create Simple Menu with the Shell Select Loop?
The select loop is not a regular shell loop. It can be used in Bash to generate a simple menu from which a user can select numbered options.
What is the Right Way to do Bash Loops?
Looping over a list of numbers or words is a building block in shell scripts. Learn how to write Bash loops, including for loop, while loop, and until loop.
What is the Best Way to Count Files in a Directory?
Learn how to count the number of files in a directory using the Linux command line ls, find, and a native bash shell solution with globs and arrays.