Hi!

I want to replace Arkeia 4 with bacula 1.36.3 running on a Solaris 2.6
machine with a HP C5713A DDS 4 autochanger. I think I've already managed
to configure everything but bacula failes very often because it's not
able to run mtx-changer properly. It looks like the device is busy. I'm
using /dev/rmt/0cbn for the archive and the control device. I hope
that's okay?

I've attached my configuration files and my slightly modified
mtx-changer script (only changed the first line from /bin/sh to /bin/ksh).

Thanks for any support,
Alex.
-- 
Alexander Löhr
Senior Software Engineer
Zuken Technology-Center
Vattmannstr. 3
33100 Paderborn
Germany

Tel: +49-5251-150-622
Fax: +49-5251-150-700
Email: [EMAIL PROTECTED]
Web: www.zuken.com
Skype: alexander.loehr_
PGP key: http://mail.pad.zuken.de/~alex/aloehr.asc
_____________________________________________
This message is for the designated recipient only and may contain
privileged, proprietary, or otherwise private information. If you have
received it in error, please notify the sender immediately and delete
the original. Any other use of the email by you is prohibited.
#!/bin/ksh
#
# Bacula interface to mtx autoloader
#
#  $Id: mtx-changer.in,v 1.11.2.1 2004/11/05 21:53:52 kerns Exp $
#
#  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:
#
#  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)
#
#  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=/opt/bacula-1.36.3/bin/mtx

#
# 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 180 seconds.
# Note, this is very system dependent, so if you are
#   not running on Linux, you will probably need to
#   re-write it.
#
# If you have a FreeBSD system, you might want to change
#  the $(seq 180) to $(jot 180) -- tip from Brian McDonald
#
wait_for_drive() {
  for i in $(seq 180); do   # Wait max 180 seconds
    if mt -f $1 status | grep ONLINE  >/dev/null 2>&1; then
      break
    fi
#   echo "Device $1 - not ready, retrying..."
    sleep 1
  done
}


if test $# -lt 2 ; then
  echo "usage: mtx-changer ctl-device command slot archive-device drive"
  echo "  Insufficient number of arguments arguments given."
  echo "  Mimimum usage is first two arguments ..."
  exit 1
fi

# Setup arguments
ctl=$1
cmd="$2"
slot=$3
device=$4
# If drive not given, default to 0
if test $# = 5 ; then
  drive=$5
else
  drive=0
fi

#
# Check for special cases where only 2 arguments are needed, 
#  all others are a minimum of 3
case $cmd in
   loaded)
     ;;
   unload)
     ;;
   list)
     ;;
   slots)
     ;;
   *)
     if test $# -lt 3; then
        echo "usage: mtx-changer ctl-device command slot archive-device drive"
        echo "  Insufficient number of arguments arguments given."
        echo "  Mimimum usage is first three arguments ..."
        exit 1
     fi
     ;;
esac


case $cmd in 
   unload)
#     echo "Doing mtx -f $ctl unload $slot $drive"
#
# enable the following line if you need to eject the cartridge
#     mt -f $device offline
      if test x$slot = x; then
         ${MTX} -f $ctl unload
      else
         ${MTX} -f $ctl unload $slot $drive
      fi
      ;;

   load)
#     echo "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:
#     wait_for_drive $device
      sleep 15
      exit $rtn
      ;;

   list) 
#     echo "Requested list"
      ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | awk 
"{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//"
# Comment out the previous line and add a line here
# to print "fake" barcodes.
#
# If you have a VXA PacketLoader and the above does not work, try
#  turning it off and enabling the following line.
#     ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | sed 
"s/*Storage Element //" | sed "s/Full :VolumeTag=//"
      ;;

   loaded)
      ${MTX} -f $ctl status >/tmp/mtx.$$
      rtn=$?
      cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Full" | awk "{print 
\$7}"
      cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Empty" | awk 
"{print 0}"
      rm -f /tmp/mtx.$$
      exit $rtn
      ;;

   slots)
#     echo "Request slots"
      ${MTX} -f $ctl status | grep " *Storage Changer" | awk "{print \$5}"
      ;;
esac
#
# Default Bacula Director Configuration file
#
#  The only thing that MUST be changed is to add one or more
#   file or directory names in the Include directive of the
#   FileSet resource.
#
#  For Bacula release 1.36.3 (22 April 2005) -- solaris 5.6
#
#  You might also want to change the default email address
#   from root to your address.  See the "mail" and "operator"
#   directives in the Messages resource.
#

Director {                            # define myself
  Name = achernar-dir
  DIRport = 9101                # where we listen for UA connections
  QueryFile = "/opt/bacula-1.36.3/etc/query.sql"
  WorkingDirectory = "/opt/bacula-1.36.3/var"
  PidDirectory = "/opt/bacula-1.36.3/var"
  Maximum Concurrent Jobs = 1
  Password = "XXX"
  Messages = Daemon
}

FileSet {
  Name = "Magellan:ConfigSWNotebooks"
  Include {
    Options {
      signature = MD5
    }
    File = /etc
    File = /var/yp
    File = /var/openldap
    File = /var/cron
    File = /raid/usr/zuken
    File = /export/magellan_1
  }
}
 
FileSet {
  Name = "Magellan:ConfigHome"
  Include {
    Options {
      signature = MD5
    }
    File = /etc
    File = /var/yp
    File = /var/openldap
    File = /var/cron
    File = /raid/home
  }
#  Exclude {
#    File = "|/opt/bacula-1.36.3/bin/list_opb_nobackup /globals/home /raid/home"
#  }
}
 
JobDefs {
  Name = MagellanDefs
  Type = Backup
  Level = Incremental
  Client = magellan-fd
  Storage = DDS-4
  Messages = Standard
  Priority = 10
  Pool = Default
}

Job {
  Name = "Magellan:ConfigHomeMonth"
  JobDefs = MagellanDefs
  Level = Full
  FileSet = "Magellan:ConfigHome"
  Schedule = "Magellan:ConfigHomeMonth"
  Pool = Month
}

Schedule {
  Name = "Magellan:ConfigHomeMonth"
  Run = 1st fri at 20:00
}

Job {
  Name = "Magellan:ConfigHome"
  JobDefs = MagellanDefs
  FileSet = "Magellan:ConfigHome"
  Schedule = "Magellan:ConfigHome"
}

Schedule {
  Name = "Magellan:ConfigHome"
  Run = Level=Full 2nd-5th fri at 20:00
  Run = tue-thu at 20:00
}

Job {
  Name = "Magellan:ConfigSWNotebooksMonth"
  JobDefs = MagellanDefs
  Level = Full
  FileSet = "Magellan:ConfigSWNotebooks"
  Schedule = "Magellan:ConfigSWNotebooksMonth"
  Pool = Month
}

Schedule {
  Name = "Magellan:ConfigSWNotebooksMonth"
  Run = 1st mon at 20:00
}

Job {
  Name = "Magellan:ConfigSWNotebooks"
  JobDefs = MagellanDefs
  Level = Full
  FileSet = "Magellan:ConfigSWNotebooks"
  Schedule = "Magellan:ConfigSWNotebooks"
}

Schedule {
  Name = "Magellan:ConfigSWNotebooks"
  Run = 2nd-5th mon at 20:00
}

#Job {
#  Name = "BackupCatalog"
#  Client = achernar-fd
#  Level = Full
#  FileSet = Catalog
  #Schedule = "WeeklyCycleAfterBackup"
  # This creates an ASCII copy of the catalog
#  RunBeforeJob = "/opt/bacula-1.36.3/etc/make_catalog_backup bacula bacula"
  # This deletes the copy of the catalog
#  RunAfterJob  = "/opt/bacula-1.36.3/etc/delete_catalog_backup"
#  Priority = 11                   # run after main backup
#}

# Standard Restore template, to be changed by Console program
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=magellan-fd                 
  FileSet="Magellan:ConfigHome"                  
  Storage = DDS-4 
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores
}


# This is the backup of the catalog
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = /opt/bacula-1.36.3/var/bacula.sql
  }
}

# Client (File Services) to backup
Client {
  Name = achernar-fd
  Address = achernar
  FDPort = 9102
  Catalog = MyCatalog
  Password = "XXX"
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Client {
  Name = magellan-fd
  Address = magellan
  FDPort = 9102
  Catalog = MyCatalog
  Password = "XXX"
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

# Definiton of file storage device
Storage {
  Name = File
# Do not use "localhost" here    
  Address = achernar                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "XXX"
  Device = FileStorage
  Media Type = File
}


# Definition of DDS tape storage device
Storage {
  Name = DDS-4    
# Do not use "localhost" here
  Address = achernar                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "XXX"
  Device = DDS-4                      # must be same as Device in Storage daemon
  Media Type = DDS-4                  # must be same as MediaType in Storage 
daemon
  Autochanger = yes
}

# Definition of 8mm tape storage device
#Storage {
#  Name = "8mmDrive"
#  Do not use "localhost" here
#  Address = achernar                # N.B. Use a fully qualified name here
#  SDPort = 9103
#  Password = "5I9MaeuyyDpraFLtQN1FO12pgkDXW4lh/1Xo4qtR0rOa"
#  Device = "Exabyte 8mm"
#  MediaType = "8mm"
#}


# Generic catalog service
Catalog {
  Name = MyCatalog
  dbname = bacula; user = bacula; password = ""
}

# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
  Name = Standard
#
# NOTE! If you send to two email or more email addresses, you will need
#  to replace the %r in the from field (-f part) with a single valid
#  email address in both the mailcommand and the operatorcommand.
#
  mailcommand = "/opt/bacula-1.36.3/bin/bsmtp -h mail.pad.zuken.de -f 
\"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/opt/bacula-1.36.3/bin/bsmtp -h mail.pad.zuken.de -f 
\"\(Bacula\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
  mail = [EMAIL PROTECTED] = all, !skipped            
  operator = [EMAIL PROTECTED] = mount
  console = all, !skipped, !saved
#
# WARNING! the following will create a file that you must cycle from
#          time to time as it will grow indefinitely. However, it will
#          also keep all your messages if they scroll off the console.
#
  append = "/opt/bacula-1.36.3/var/log" = all, !skipped
}


#
# Message delivery for daemon messages (no job).
Messages {
  Name = Daemon
  mailcommand = "/opt/bacula-1.36.3/bin/bsmtp -h mail.pad.zuken.de -f 
\"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
  mail = [EMAIL PROTECTED] = all, !skipped            
  console = all, !skipped, !saved
  append = "/opt/bacula-1.36.3/var/log" = all, !skipped
}



    
# Default pool definition
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 4 months 
}

Pool {
  Name = Month
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 3 years
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = achernar-mon
  Password = "XXX"
  CommandACL = status, .status
}
#
# Default  Bacula File Daemon Configuration file
#
#  For Bacula release 1.36.3 (22 April 2005) -- solaris 5.6
#
# There is not much to change here except perhaps the
# File daemon Name to
#

#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = achernar-dir
  Password = "XXX"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = achernar-mon
  Password = "XXX"
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = achernar-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /opt/bacula-1.36.3/var
  Pid Directory = /opt/bacula-1.36.3/var
  Maximum Concurrent Jobs = 20
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = achernar-dir = all, !skipped
}
#
# Default Bacula Storage Daemon Configuration file
#
#  For Bacula release 1.36.3 (22 April 2005) -- solaris 5.6
#
# You may need to change the name of your tape drive
#   on the "Archive Device" directive in the Device
#   resource.  If you change the Name and/or the 
#   "Media Type" in the Device resource, please ensure
#   that dird.conf has corresponding changes.
#

Storage {                             # definition of myself
  Name = achernar-sd
  SDPort = 9103                  # Director's port      
  WorkingDirectory = "/opt/bacula-1.36.3/var"
  Pid Directory = "/opt/bacula-1.36.3/var"
  Maximum Concurrent Jobs = 20
}

#
# List Directors who are permitted to contact Storage daemon
#
Director {
  Name = achernar-dir
  Password = "XXX"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the storage daemon
#
Director {
  Name = achernar-mon
  Password = "XXX"
  Monitor = yes
}

#
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
#  same Name and MediaType. 
#

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /tmp
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}

#
# A Linux or Solaris tape drive
#
Device {
  Name = DDS-4                        # 
  Media Type = DDS-4
  Archive Device = /dev/rmt/0cbn
  AutomaticMount = yes;               # when device opened, read it
  AlwaysOpen = yes;
  RemovableMedia = yes;
  RandomAccess = no;
  Changer Command = "/opt/bacula-1.36.3/etc/mtx-changer %c %o %S %a %d"
  Changer Device = /dev/rmt/0cbn
  AutoChanger = yes
  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
}

#
# A FreeBSD tape drive
#
#Device {
#  Name = DDS-4 
#  Description = "DDS-4 for FreeBSD"
#  Media Type = DDS-4
#  Archive Device = /dev/nsa1
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = yes
#  Offline On Unmount = no
#  Hardware End of Medium = no
#  BSF at EOM = yes
#  Backward Space Record = no
#  Fast Forward Space File = no
#  TWO EOF = yes
#}

#
# A OnStream tape drive. 
# You need the kernel osst driver 0.9.14 or later, and
#   do "mt -f /dev/nosst0 defblksize 32768" once as root.
#
#Device {
#  Name = OnStream
#  Description = "OnStream drive on Linux"
#  Media Type = OnStream
#  Archive Device = /dev/rmt/0cbn
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = yes
#  Offline On Unmount = no
## The min/max blocksizes of 32768 are *required*
#  Minimum Block Size = 32768
#  Maximum Block Size = 32768
#}
 

 


#
# A very old Exabyte with no end of media detection
#
#Device {
#  Name = "Exabyte 8mm"
#  Media Type = "8mm"
#  Archive Device = /dev/rmt/0cbn
#  Hardware end of medium = No;
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = Yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#}

# 
# Send all messages to the Director, 
# mount messages also are sent to the email address
#
Messages {
  Name = Standard
  director = achernar-dir = all
}

Reply via email to