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.haw...@nokia.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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users