Hi Richard,
>
> Anyone else running this library I can compare notes with?
>
Not anymore :) Used to use an SAS LTO3 based MSL2024 on a project I worked at
a while back. TBH it *just worked* and worked well too. Would recommend one to
anyone that needed an autochanger of this size. Was quick and worked. What more
do you need :)
Have attached the salient directives from my notes below, hope they're of use.
Was using a relatively old Bacula version back then (not sure which maybe 1.38
or early v2), but the important bits haven't changed much, so should be valid.
Have also added the mtx-changer I was using. Can't recall if I changed this
from the default shipped one either, but...
If the configs get munged, send me an email and I'll send you an attachment,
not sure this list server allows them.
HTH
Dan
--
Dan Hawker
Linux Consultant
ext-daniel.hawker AT nokia DOT com
+44 (0)7827 352612
--
######################
# Director Directives
######################
# New HP MSL2024 Tape Drive
Storage {
Name = MSL2024
Address = charon
SDPort = 9103
Password = "zFLQDHxxxxxxxxxxxxxxxxxxxxOZ8zmf94NDvTdE1"
Device = MSL2024-Autoloader
Media Type = LTO3
Autochanger = yes
#close storage
}
################
# SD Directives
################
# Our HP MSL2024 Autoloader...
Autochanger {
Name = MSL2024-Autoloader
Device = MSL2024-Drive
Changer Device = /dev/changer
Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"
# close Autoloader
}
# The Drive itself...
Device {
Name = MSL2024-Drive
Drive Index = 0
Media Type = LTO3
Archive Device = /dev/nst0
AutoChanger = yes
AutomaticMount = yes; # when device opened, read it
AlwaysOpen = yes;
RandomAccess = no
RemovableMedia = yes
LabelMedia = yes
Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
# If you have smartctl, enable this, it has more info than tapeinfo
# Alert Command = "sh -c 'smartctl -H -l error %c'"
#close device
}
##################
# MTX-Changer
##################
#!/bin/sh
#
# Bacula interface to mtx autoloader
#
# $Id: mtx-changer.in 5360 2007-08-16 13:01:19Z pbuschman $
#
# If you set in your Device resource
#
# Changer Command = "path-to-this-script/mtx-changer %c %o %S %a %d"
# you will have the following input to this script:
#
# So Bacula will always call with all the following arguments, even though
# in come cases, not all are used.
#
# mtx-changer "changer-device" "command" "slot" "archive-device" "drive-index"
# $1 $2 $3 $4 $5
#
# for example:
#
# mtx-changer /dev/sg0 load 1 /dev/nst0 0 (on a Linux system)
#
# will request to load the first cartidge into drive 0, where
# the SCSI control channel is /dev/sg0, and the read/write device
# is /dev/nst0.
#
# The commands are:
# Command Function
# unload unload a given slot
# load load a given slot
# loaded which slot is loaded?
# list list Volume names (requires barcode reader)
# slots how many slots total?
#
# Slots are numbered from 1 ...
# Drives are numbered from 0 ...
#
#
# If you need to an offline, refer to the drive as $4
# e.g. mt -f $4 offline
#
# Many changers need an offline after the unload. Also many
# changers need a sleep 60 after the mtx load.
#
# N.B. If you change the script, take care to return either
# the mtx exit code or a 0. If the script exits with a non-zero
# exit code, Bacula will assume the request failed.
#
MTX=mtx
# mt status output
# SunOS No Additional Sense
# FreeBSD Current Driver State: at rest.
# Linux ONLINE
OS=`uname`
case ${OS} in
SunOS)
ready="No Additional Sense"
;;
FreeBSD)
ready="Current Driver State: at rest."
;;
*)
ready="ONLINE"
;;
esac
#
# log whats done
#
# to turn on logging, uncomment the following line
#touch /var/lib/bacula/mtx.log
#
dbgfile="/var/lib/bacula/mtx.log"
debug() {
if test -f $dbgfile; then
echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile
fi
}
#
# Create a temporary file
#
make_temp_file() {
TMPFILE=`mktemp /var/lib/bacula/mtx.XXXXXXXXXX`
if test x${TMPFILE} = x; then
TMPFILE="/var/lib/bacula/mtx.$$"
if test -f ${TMPFILE}; then
echo "Temp file security problem on: ${TMPFILE}"
exit 1
fi
fi
}
#
# The purpose of this function to wait a maximum
# time for the drive. It will
# return as soon as the drive is ready, or after
# waiting a maximum of 300 seconds.
# Note, this is very system dependent, so if you are
# not running on Linux, you will probably need to
# re-write it, or at least change the grep target.
# We've attempted to get the appropriate OS grep targets
# in the code at the top of this script.
#
wait_for_drive() {
i=0
while [ $i -le 300 ]; do # Wait max 300 seconds
if mt -f $1 status | grep "${ready}" >/dev/null 2>&1; then
break
fi
debug "Device $1 - not ready, retrying..."
sleep 1
i=`expr $i + 1`
done
}
# check parameter count on commandline
#
check_parm_count() {
pCount=$1
pCountNeed=$2
if test $pCount -lt $pCountNeed; then
echo "usage: mtx-changer ctl-device command [slot archive-device
drive-index]"
echo " Insufficient number of arguments given."
if test $pCount -lt 2; then
echo " Mimimum usage is first two arguments ..."
else
echo " Command expected $pCountNeed arguments"
fi
exit 1
fi
}
# Check for special cases where only 2 arguments are needed,
# all others are a minimum of 5
#
case $2 in
list)
check_parm_count $# 2
;;
slots)
check_parm_count $# 2
;;
*)
check_parm_count $# 5
;;
esac
# Setup arguments
ctl=$1
cmd="$2"
slot=$3
device=$4
drive=$5
debug "Parms: $ctl $cmd $slot $device $drive"
case $cmd in
unload)
debug "Doing mtx -f $ctl unload $slot $drive"
#
# enable the following line if you need to eject the cartridge
# mt -f $device offline
# sleep 10
${MTX} -f $ctl unload $slot $drive
;;
load)
debug "Doing mtx -f $ctl load $slot $drive"
${MTX} -f $ctl load $slot $drive
rtn=$?
#
# Increase the sleep time if you have a slow device
# or remove the sleep and add the following:
# sleep 15
wait_for_drive $device
exit $rtn
;;
list)
debug "Doing mtx -f $ctl -- to list volumes"
make_temp_file
# Enable the following if you are using barcodes and need an inventory
# ${MTX} -f $ctl inventory
${MTX} -f $ctl status >${TMPFILE}
rtn=$?
cat ${TMPFILE} | grep " Storage Element [0-9]*:.*Full" | awk "{print \$3
\$4}" | sed "s/Full *\(:VolumeTag=\)*//"
#
# If you have a VXA PacketLoader and the above does not work, try
# turning it off and enabling the following line.
# cat ${TMPFILE} | grep " *Storage Element [0-9]*:.*Full" | sed "s/ Storage
Element //" | sed "s/Full :VolumeTag=//"
#
cat ${TMPFILE} | grep "^Data Transfer Element [0-9]*:Full (Storage
Element [0-9]" | awk '{printf "%s:%s\n",$7,$10}'
rm -f ${TMPFILE} >/dev/null 2>&1
exit $rtn
;;
loaded)
debug "Doing mtx -f $ctl $drive -- to find what is loaded"
make_temp_file
${MTX} -f $ctl status >${TMPFILE}
rtn=$?
cat ${TMPFILE} | grep "^Data Transfer Element $drive:Full" | awk "{print
\$7}"
cat ${TMPFILE} | grep "^Data Transfer Element $drive:Empty" | awk "{print
0}"
rm -f ${TMPFILE} >/dev/null 2>&1
exit $rtn
;;
slots)
debug "Doing mtx -f $ctl -- to get count of slots"
${MTX} -f $ctl status | grep " *Storage Changer" | awk "{print \$5}"
;;
esac
####################
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Bacula-users mailing list
Bacula-users AT lists.sourceforge DOT net
https://lists.sourceforge.net/lists/listinfo/bacula-users
|