X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fscripts%2Fmtx-changer.in;h=ca5c5481ff1c71504e869c2e49e58a1587459a07;hb=e0f00700385d49cba5eb7fafc890de4f0a8e29c7;hp=0b475a672dff6f769c16203169aed6fdeec7609a;hpb=c1bd474834890e0062206937c88374956d5ad334;p=bacula%2Fbacula diff --git a/bacula/scripts/mtx-changer.in b/bacula/scripts/mtx-changer.in index 0b475a672d..ca5c5481ff 100644 --- a/bacula/scripts/mtx-changer.in +++ b/bacula/scripts/mtx-changer.in @@ -2,8 +2,6 @@ # # Bacula interface to mtx autoloader # -# $Id$ -# # If you set in your Device resource # # Changer Command = "path-to-this-script/mtx-changer %c %o %S %a %d" @@ -30,6 +28,8 @@ # loaded which slot is loaded? # list list Volume names (requires barcode reader) # slots how many slots total? +# listall list all info +# transfer # # Slots are numbered from 1 ... # Drives are numbered from 0 ... @@ -46,32 +46,20 @@ # exit code, Bacula will assume the request failed. # -MTX=@MTX@ +# source our conf file +if test ! -f @scriptdir@/mtx-changer.conf ; then + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "ERROR: @scriptdir@/mtx-changer.conf file not found!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + exit 1 +fi +. @scriptdir@/mtx-changer.conf -# 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 +MTX=@MTX@ -# -# log whats done -# -# to turn on logging, uncomment the following line -#touch @working_dir@/mtx.log -# +if test ${debug_log} -ne 0 ; then + touch @working_dir@/mtx.log +fi dbgfile="@working_dir@/mtx.log" debug() { if test -f $dbgfile; then @@ -88,7 +76,7 @@ make_temp_file() { if test x${TMPFILE} = x; then TMPFILE="@working_dir@/mtx.$$" if test -f ${TMPFILE}; then - echo "Temp file security problem on: ${TMPFILE}" + echo "ERROR: Temp file security problem on: ${TMPFILE}" exit 1 fi fi @@ -108,7 +96,7 @@ make_temp_file() { 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 + if mt -f $1 status 2>&1 | grep "${ready}" >/dev/null 2>&1; then break fi debug "Device $1 - not ready, retrying..." @@ -123,7 +111,7 @@ 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 "ERROR: 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 ..." @@ -138,12 +126,15 @@ check_parm_count() { # all others are a minimum of 5 # case $2 in - list) + list|listall) check_parm_count $# 2 ;; slots) check_parm_count $# 2 ;; + transfer) + check_parm_count $# 4 + ;; *) check_parm_count $# 5 ;; @@ -162,10 +153,13 @@ 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 + + if test ${offline} -eq 1 ; then + mt -f $device offline + fi + if test ${offline_sleep} -ne 0 ; then + sleep ${offline_sleep} + fi ${MTX} -f $ctl unload $slot $drive ;; @@ -173,10 +167,9 @@ case $cmd in 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 + if test ${load_sleep} -ne 0 ; then + sleep ${load_sleep} + fi wait_for_drive $device exit $rtn ;; @@ -184,21 +177,69 @@ case $cmd in 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 + if test ${inventory} -ne 0 ; then + ${MTX} -f $ctl inventory + fi ${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=//" -# + if test ${vxa_packetloader} -ne 0 ; then + cat ${TMPFILE} | grep " *Storage Element [0-9]*:.*Full" | sed "s/ Storage Element //" | sed "s/Full :VolumeTag=//" + else + cat ${TMPFILE} | grep " Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//" + fi 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 ;; + listall) +# Drive content: D:Drive num:F:Slot loaded:Volume Name +# D:0:F:2:vol2 or D:Drive num:E +# D:1:F:42:vol42 +# D:3:E +# +# Slot content: +# S:1:F:vol1 S:Slot num:F:Volume Name +# S:2:E or S:Slot num:E +# S:3:F:vol4 +# +# Import/Export tray slots: +# I:10:F:vol10 I:Slot num:F:Volume Name +# I:11:E or I:Slot num:E +# I:12:F:vol40 + + debug "Doing mtx -f $ctl -- to list all" + make_temp_file + if test ${inventory} -ne 0 ; then + ${MTX} -f $ctl inventory + fi + ${MTX} -f $ctl status >${TMPFILE} + rtn=$? + # can be converted to awk+sed+cut, see below + perl -ne ' +/Data Transfer Element (\d+):Empty/ && print "D:$1:E\n"; +/Data Transfer Element (\d+):Full \(Storage Element (\d+) Loaded\)(:VolumeTag =\s*(.+))?/ && print "D:$1:F:$2:$4\n"; +/Storage Element (\d+):Empty/ && print "S:$1:E\n"; +/Storage Element (\d+):Full( :VolumeTag=(.+))?/ && print "S:$1:F:$3\n"; +/Storage Element (\d+) IMPORT.EXPORT:Empty/ && print "I:$1:E\n"; +/Storage Element (\d+) IMPORT.EXPORT:Full( :VolumeTag=(.+))?/ && print "I:$1:F:$3\n";' ${TMPFILE} + # If perl isn't installed, you can use by those commands +#cat ${TMPFILE} | grep "Data Transfer Element" | awk "{print \"D:\"\$4 \$7 \$9 \$10}" | sed "s/=/:/" | sed "s/Full/F:/" | sed "s/Empty/E/" +#cat ${TMPFILE} | grep -v "Data Transfer Element" | grep "Storage Element" | grep -v "IMPORT/EXPORT" | awk "{print \"S:\"\$3 \$4 \$5}" | sed "s/IMPORT\/EXPORT//" | sed "s/Full *:VolumeTag=/F:/" | sed "s/Empty/E/" +#cat ${TMPFILE} | grep -v "Data Transfer Element" | grep "Storage Element" | grep "IMPORT/EXPORT" | awk "{print \"I:\"\$3 \$4 \$5}" | sed "s/IMPORT\/EXPORT//" | sed "s/Full *:VolumeTag=/F:/" | sed "s/Empty/E/" + + rm -f ${TMPFILE} >/dev/null 2>&1 + exit $rtn + ;; + + transfer) + slotdest=$device + debug "Doing transfer from $slot to $slotdest" + ${MTX} -f $ctl transfer $slot $slotdest + rtn=$? + exit $rtn + ;; + loaded) debug "Doing mtx -f $ctl $drive -- to find what is loaded" make_temp_file