X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fscripts%2Fdisk-changer.in;h=59ddd4a1052c04a882de97cfc2a1e4e0d481fb5d;hb=5821457bbef2394cbf205e2a527917d11c1b6e8b;hp=94c5682f4dc23239df8e253e7a3d97e73e7bfa2c;hpb=996d2298b32128d4ed092c9fd6d568c6ea997ffc;p=bacula%2Fbacula diff --git a/bacula/scripts/disk-changer.in b/bacula/scripts/disk-changer.in index 94c5682f4d..59ddd4a105 100644 --- a/bacula/scripts/disk-changer.in +++ b/bacula/scripts/disk-changer.in @@ -2,6 +2,33 @@ # # Bacula interface to virtual autoloader using disk storage # +# Written by Kern Sibbald +# +# Copyright (C) 2000-2009 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from +# many others, a complete list can be found in the file AUTHORS. +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of version two of the GNU General Public +# License as published by the Free Software Foundation, which is +# listed in the file LICENSE. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# Bacula® is a registered trademark of Kern Sibbald. +# The licensor of Bacula is the Free Software Foundation Europe +# (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, +# Switzerland, email:ftf@fsfeurope.org. +# +# # $Id$ # # If you set in your Device resource @@ -64,7 +91,7 @@ wd=@working_dir@ # dbgfile="$wd/disk-changer.log" debug() { - if test -e $dbgfile; then + if test -f $dbgfile; then echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile fi } @@ -164,14 +191,52 @@ case $cmd in unload) debug "Doing disk -f $ctl unload $slot $device $drive" get_dir - echo "0" >$dir/loaded${drive} - unlink $device 2>/dev/null >/dev/null - rm -f $device + if [ -f $dir/loaded${drive} ]; then + ld=`cat $dir/loaded${drive}` + else + echo "Storage Element $slot is Already Full" + exit 1 + fi + if [ $slot -eq $ld ]; then + echo "0" >$dir/loaded${drive} + unlink $device 2>/dev/null >/dev/null + rm -f $device + else + echo "Storage Element $slot is Already Full" + exit 1 + fi ;; load) debug "Doing disk $ctl load $slot $device $drive" get_dir + i=0 + while [ $i -le $maxdrive ]; do + if [ -f $dir/loaded${i} ]; then + ld=`cat $dir/loaded${i}` + else + ld=0 + fi + if [ $ld -eq $slot ]; then + echo "Drive ${i} Full (Storage element ${ld} loaded)" + exit 1 + fi + i=`expr $i + 1` + done + # check if slot exists + if [ ! -f $dir/slot${slot} ] ; then + echo "source Element Address $slot is Empty" + exit 1 + fi + if [ -f $dir/loaded${drive} ]; then + ld=`cat $dir/loaded${drive}` + else + ld=0 + fi + if [ $ld -ne 0 ]; then + echo "Drive ${drive} Full (Storage element ${ld} loaded)" + exit 1 + fi echo "0" >$dir/loaded${drive} unlink $device 2>/dev/null >/dev/null rm -f $device