#
# If you set in your Device resource
#
-# Changer Command = "path-to-this-script/mtx-changer" %c %o %S %a %d
+# 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
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
#
#
dbgfile="@working_dir@/mtx.log"
debug() {
- if test -e $dbgfile; then
+ if test -f $dbgfile; then
echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile
fi
}
# Create a temporary file
#
make_temp_file() {
- TMPFILE=`mktemp -t mtx.XXXXXXXXXX`
+ TMPFILE=`mktemp @working_dir@/mtx.XXXXXXXXXX`
if test x${TMPFILE} = x; then
TMPFILE="@working_dir@/mtx.$$"
if test -f ${TMPFILE}; then
# 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 ONLINE >/dev/null 2>&1; then
+ if mt -f $1 status | grep ${ready} >/dev/null 2>&1; then
break
fi
debug "Device $1 - not ready, retrying..."
#
# Increase the sleep time if you have a slow device
# or remove the sleep and add the following:
-# wait_for_drive $device
- sleep 15
+# sleep 15
+ wait_for_drive $device
exit $rtn
;;
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 inventory
${MTX} -f $ctl status >${TMPFILE}
rtn=$?
cat ${TMPFILE} | grep " *Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//"