#!/bin/bash
MAXATTEMPTS=3
STORAGE=StorageName
DEVICE=/dev/sg3
CODE=0
OUT=`mktemp /tmp/XXXXXX`
###########################################################################
## Eject the tape from the drive and determine which slot it ended up in ##
###########################################################################
STATUS=1
ATTEMPT=0
while [ $STATUS -ne 0 ] && [ $ATTEMPT -lt $MAXATTEMPTS ]; do
echo "umount Storage=$STORAGE"|/usr/sbin/bconsole >> $OUT
if ( grep "Command Failed" $OUT > /dev/null ); then
STATUS=1
echo "Command Failed!"
rm $OUT
else
STATUS=0
cat $OUT
fi
ATTEMPT=$(( $ATTEMPT + 1 ))
done
SLOT=`tac $OUT|grep -m1 3307|cut -d" " -f6|cut -d, -f1` # Find the last occurrence of the success message only
rm $OUT
if [ "x$SLOT" = "x" ] || [ $STATUS -ne 0 ]; then
echo "ERROR: Unable to unmount drive after $ATTEMPT attempts"
exit 1
else
echo "Slot $SLOT unloaded from Drive-0 "
fi
###########################################
## Move the ejected tape to the I/O slot ##
###########################################
STATUS=1
ATTEMPT=0
while [ $STATUS -ne 0 ] && [ $ATTEMPT -lt $MAXATTEMPTS ]; do
/usr/sbin/mtx -f $DEVICE transfer $SLOT 24
STATUS=$?
ATTEMPT=$(( $ATTEMPT + 1 ))
done
if [ $STATUS -ne 0 ]; then
echo "ERROR: Unable to move tape from slot $SLOT to I/O after $ATTEMPT attempts"
CODE=2
else
echo "Tape moved from slot $SLOT to I/O"
fi
#################################
## Ensure the DB is up to date ##
#################################
echo "update slots Storage=$STORAGE"|/usr/sbin/bconsole > /dev/null
if [ $CODE -ne 0 ]; then
exit $CODE
fi
如果没有相同的环境进行测试,我不确定这是否可行,但是通过 bacula-dir.conf 中的 RunAfterJob 指令调用的这样的脚本应该可以工作:
如果您想避免调用外部脚本,您可以尝试使用 AlwaysOpen、RequiresMount/MountCommand/UnmountCommand 和/或 OfflineOnUnmount 指令。所有这些都在您的 Storage Daemon 配置的设备资源中。
另外,你能澄清一下为什么这对你来说是可取的吗?也许我们忽略了根本问题的解决方案。
我设置了一个名为Eject的管理作业,它以 1000 的优先级运行以下脚本,因此在所有备份完成后执行它:
您也可以将它作为特定作业的“RunAfterJob”选项运行。
您确实必须编写脚本,但是 Bacula 和最新版本的 MTX 的组合使这不会太痛苦。
查看“Run Before Job”和“Run After Job”“Job”参数来调用您编写的脚本。我们倾向于调用在 bconsole 中运行命令的脚本(通过输入重定向)来卸载磁带卷,然后调用 MTX 来移动磁带。