%%
%%

\chapter{Storage Daemon Configuration}
\label{StoredConfChapter}
\index[general]{Storage Daemon Configuration}
\index[general]{Configuration!Storage Daemon}

The Storage Daemon configuration file has relatively few resource definitions.
However, due to the great variation in backup media and system capabilities,
the storage daemon must be highly configurable. As a consequence, there are
quite a large number of directives in the Device Resource definition that
allow you to define all the characteristics of your Storage device (normally a
tape drive). Fortunately, with modern storage devices, the defaults are
sufficient, and very few directives are actually needed. 

Examples of {\bf Device} resource directives that are known to work for a
number of common tape drives can be found in the {\bf
\lt{}bacula-src\gt{}/examples/devices} directory, and most will also be listed
here. 

For a general discussion of configuration file and resources including the
data types recognized by {\bf Bacula}, please see the 
\ilink{Configuration}{ConfigureChapter} chapter of this manual. The
following Storage Resource definitions must be defined: 

\begin{itemize}
\item 
   \ilink{Storage}{StorageResource} -- to define the  name of the
   Storage daemon.  
\item 
   \ilink{Director}{DirectorResource1} -- to  define the Director's
   name and his access password.  
\item 
   \ilink{Device}{DeviceResource} -- to define  the
   characteristics of your storage device (tape  drive).  
\item 
   \ilink{Messages}{MessagesChapter} -- to define where error  and
   information messages are to be sent. 
\end{itemize}

\section{Storage Resource}
\label{StorageResource}
\index[general]{Resource!Storage}
\index[general]{Storage Resource}

In general, the properties specified under the Storage resource define global
properties of the Storage daemon. Each Storage daemon configuration file must
have one and only one Storage resource definition. 

\begin{description}

\item [Name = \lt{}Storage-Daemon-Name\gt{}]
   \index[sd]{Name}
   \index[sd]{Directive!Name}
   Specifies the Name of the Storage daemon. This  directive is required. 

\item [Working Directory = \lt{}Directory\gt{}]
   \index[sd]{Working Directory}
   \index[sd]{Directive!Working Directory}
   This directive  is mandatory and specifies a directory in which the Storage
   daemon  may put its status files. This directory should be used only  by {\bf
   Bacula}, but may be shared by other Bacula daemons provided the names
   given to each daemon are unique. This  directive is
   required  

\item [Pid Directory = \lt{}Directory\gt{}]
   \index[sd]{Pid Directory}
   \index[sd]{Directive!Pid Directory}
   This directive  is mandatory and specifies a directory in which the Director 
   may put its process Id file files. The process Id file is used to  shutdown
   Bacula and to prevent multiple copies of  Bacula from running simultaneously. 
   This directive is required. Standard shell expansion of the {\bf Directory} 
   is done when the configuration file is read so that values such  as {\bf
   \$HOME} will be properly expanded.  

   Typically on Linux systems, you will set this to:  {\bf /var/run}. If you are
   not installing Bacula in the  system directories, you can use the {\bf Working
   Directory} as  defined above. 

\item [Heartbeat Interval = \lt{}time-interval\gt{}]
   \index[sd]{Heartbeat Interval}
   \index[sd]{Directive!Heartbeat Interval}
   \index[general]{Heartbeat Interval}
   \index[general]{Broken pipe}
   This directive defines an interval of time in seconds.  When
   the Storage daemon is waiting for the operator to mount a
   tape, each time interval, it will send a heartbeat signal to
   the File daemon.  The default interval is zero which disables
   the heartbeat.  This feature is particularly useful if you
   have a router such as 3Com that does not follow Internet
   standards and times out an valid connection after a short
   duration despite the fact that keepalive is set.  This usually
   results in a broken pipe error message.

\item [Client Connect Wait = \lt{}time-interval\gt{}]
   \index[sd]{Connect Wait}
   \index[sd]{Directive!Connect Wait}
   \index[general]{Client Connect Wait}
   This directive defines an interval of time in seconds that
   the Storage daemon will wait for a Client (the File daemon)
   to connect.  The default is 30 seconds.  Be aware that the
   longer the Storage daemon waits for a Client, the more
   resources will be tied up.

\item [Maximum Concurrent Jobs = \lt{}number\gt{}]
   \index[sd]{Maximum Concurrent Jobs}
   \index[sd]{Directive!Maximum Concurrent Jobs}
   where \lt{}number\gt{} is the maximum number of Jobs that should run
   concurrently.  The default is set to 10, but you may set it to a larger
   number.  Each contact from the Director (e.g.  status request, job start
   request) is considered as a Job, so if you want to be able to do a {\bf
   status} request in the console at the same time as a Job is running, you
   will need to set this value greater than 1.  To run simultaneous Jobs,
   you will need to set a number of other directives in the Director's
   configuration file.  Which ones you set depend on what you want, but you
   will almost certainly need to set the {\bf Maximum Concurrent Jobs} in
   the Storage resource in the Director's configuration file and possibly
   those in the Job and Client resources.

\item [SDAddresses = \lt{}IP-address-specification\gt{}]
   \index[sd]{SDAddresses}
   \index[sd]{Directive!SDAddresses}
   Specify the ports and addresses on which the Storage daemon will listen
   for Director connections.  Normally, the default is sufficient and you
   do not need to specify this directive.  Probably the simplest way to
   explain how this directive works is to show an example:

\footnotesize
\begin{verbatim}
 SDAddresses  = { ip = {
        addr = 1.2.3.4; port = 1205; }
    ipv4 = {
        addr = 1.2.3.4; port = http; }
    ipv6 = {
        addr = 1.2.3.4;
        port = 1205;
    }
    ip = {
        addr = 1.2.3.4
        port = 1205
    }
    ip = {
        addr = 1.2.3.4
    }
    ip = {
        addr = 201:220:222::2
    }
    ip = {
        addr = bluedot.thun.net
    }
}
\end{verbatim}
\normalsize

where ip, ip4, ip6, addr, and port are all keywords. Note, that  the address
can be specified as either a dotted quadruple, or  IPv6 colon notation, or as
a symbolic name (only in the ip specification).  Also, port can be specified
as a number or as the mnemonic value from  the /etc/services file.  If a port
is not specified, the default will be used. If an ip  section is specified,
the resolution can be made either by IPv4 or  IPv6. If ip4 is specified, then
only IPv4 resolutions will be permitted,  and likewise with ip6.  

Using this directive, you can replace both the SDPort and SDAddress 
directives shown below. 

\item [SDPort = \lt{}port-number\gt{}]
   \index[sd]{SDPort}
   \index[sd]{Directive!SDPort}
   Specifies port number on which the Storage daemon  listens for Director
   connections. The default is 9103.  
   
\item [SDAddress = \lt{}IP-Address\gt{}]
   \index[sd]{SDAddress}
   \index[sd]{Directive!SDAddress}
   This directive is optional, and if it is specified, it will cause the
   Storage daemon server (for Director and File daemon connections) to bind
   to the specified {\bf IP-Address}, which is either a domain name or an
   IP address specified as a dotted quadruple.  If this directive is not
   specified, the Storage daemon will bind to any available address (the
   default).

\end{description}

The following is a typical Storage daemon Storage definition. 

\footnotesize
\begin{verbatim}
#
# "Global" Storage daemon configuration specifications appear
# under the Storage resource.
#
Storage {
  Name = "Storage daemon"
  Address = localhost
  WorkingDirectory = "~/bacula/working"
  Pid    Directory = "~/bacula/working"
}
\end{verbatim}
\normalsize

\section{Director Resource}
\label{DirectorResource1}
\index[general]{Director Resource}
\index[general]{Resource!Director}

The Director resource specifies the Name of the Director which is permitted
to use the services of the Storage daemon.  There may be multiple Director
resources.  The Director Name and Password must match the corresponding
values in the Director's configuration file.

\begin{description}

\item [Name = \lt{}Director-Name\gt{}]
   \index[sd]{Name}
   \index[sd]{Directive!Name}
   Specifies the Name of the Director allowed to connect  to the Storage daemon.
   This directive is required.  

\item [Password = \lt{}Director-password\gt{}]
   \index[sd]{Password}
   \index[sd]{Directive!Password}
   Specifies the password that must be supplied by the above named  Director.
   This directive is required.  

\item [Monitor = \lt{}yes|no\gt{}]
   \index[sd]{Monitor}
   \index[sd]{Directive!Monitor}
   If Monitor is set to {\bf no} (default), this director will have full
   access to this Storage daemon.  If Monitor is set to {\bf yes}, this
   director will only be able to fetch the current status of this Storage
   daemon.

   Please note that if this director is being used by a Monitor, we highly 
   recommend to set this directive to {\bf yes} to avoid serious security 
   problems. 

\end{description}

The following is an example of a valid Director resource definition: 

\footnotesize
\begin{verbatim}
Director {
  Name = MainDirector
  Password = my_secret_password
}
\end{verbatim}
\normalsize

\label{DeviceResource}
\section{Device Resource}
\index[general]{Resource!Device}
\index[general]{Device Resource}

The Device Resource specifies the details of each device (normally a tape
drive) that can be used by the Storage daemon.  There may be multiple
Device resources for a single Storage daemon.  In general, the properties
specified within the Device resource are specific to the Device.

\begin{description}

\item [Name = {\it Device-Name}]
   \index[sd]{Name}
   \index[sd]{Directive!Name}
   Specifies the Name that the Director will use when asking to backup or
   restore to or from to this device. This is the logical  Device name, and may
   be any string up to 127 characters in length.  It is generally a good idea to
   make it correspond to the English  name of the backup device. The physical
   name of the device is  specified on the {\bf Archive Device} directive
   described below.  The name you specify here is also used in your Director's
   conf  file on the 
   \ilink{Device directive}{StorageResource2}  in its Storage
   resource. 

\item [Archive Device = {\it name-string}]
   \index[sd]{Archive Device}
   \index[sd]{Directive!Archive Device}
   The specified {\bf name-string} gives the system file name of the  storage
   device managed by this storage daemon. This will usually be  the device file
   name of a removable storage device (tape drive),  for example "{\bf
   /dev/nst0}" or "{\bf /dev/rmt/0mbn}".  For a DVD-writer, it will be for
   example {\bf /dev/hdc}.  It may also be a directory name if you are archiving
   to disk storage.  In this case, you must supply the full absolute path to the
   directory.  When specifying a tape device, it is preferable that the 
   "non-rewind" variant of the device file name be given.  In addition, on
   systems such as Sun, which have multiple tape  access methods, you must be
   sure to specify to use  Berkeley I/O conventions with the device. The {\bf b}
   in the Solaris (Sun)  archive specification {\bf /dev/rmt/0mbn} is what is
   needed in  this case. Bacula does not support SysV tape drive behavior.  
   
   As noted above, normally the Archive Device is the name of a  tape drive, but
   you may also specify an absolute path to  an existing directory. If the Device
   is a directory  Bacula will write to file storage in the specified directory,
   and  the filename used will be the Volume name as specified in the  Catalog.
   If you want to write into more than one directory (i.e.  to spread the load to
   different disk drives), you will need to define  two Device resources, each
   containing an Archive Device with a  different directory.  
   \label{SetupFifo}
   In addition to a tape device name or a directory name, Bacula will  accept the
   name of a FIFO. A FIFO is a special kind of file that  connects two programs
   via kernel memory. If a FIFO device is specified  for a backup operation, you
   must have a program that reads what Bacula  writes into the FIFO. When the
   Storage daemon starts the job, it  will wait for {\bf MaximumOpenWait} seconds
   for the read program to start reading, and then time it out and  terminate
   the job. As a consequence, it is best to start the read  program at the
   beginning of the job perhaps with the {\bf RunBeforeJob}  directive. For this
   kind of device, you never want to specify  {\bf AlwaysOpen}, because you want
   the Storage daemon to open it only  when a job starts, so you must explicitly
   set it to {\bf No}.  Since a FIFO is a one way device, Bacula will not attempt
   to read  a label of a FIFO device, but will simply write on it. To create a 
   FIFO Volume in the catalog, use the {\bf add} command rather than the {\bf
   label} command to avoid attempting to write a label.

\footnotesize
\begin{verbatim}
Device {
  Name = FifoStorage
  Media Type = Fifo
  Device Type = Fifo
  Archive Device = /tmp/fifo
  LabelMedia = yes
  Random Access = no
  AutomaticMount = no
  RemovableMedia = no
  MaximumOpenWait = 60
  AlwaysOpen = no
}
\end{verbatim}
\normalsize

   During a restore operation, if the Archive Device is a FIFO, Bacula  will
   attempt to read from the FIFO, so you must have an external program  that
   writes into the FIFO. Bacula will wait {\bf MaximumOpenWait} seconds  for the
   program to begin writing and will then time it out and  terminate the job. As
   noted above, you may use the {\bf RunBeforeJob}  to start the writer program
   at the beginning of the job.  
   
   The Archive Device directive is required. 

\item [Device Type = {\it type-specification}]
   \index[sd]{Device Type}
   \index[sd]{Directive!Device Type}
   The Device Type specification allows you to explicitly tell Bacula
   what kind of device you are defining. It the {\it type-specification}
   may be one of the following:
   \begin{description}
   \item [File]
     Tells Bacula that the device is a file. It may either be a
     file defined on fixed medium or a removable filesystem such as
     USB.  All files must be random access devices.
   \item [Tape]
     The device is a tape device and thus is sequential access. Tape devices
     are controlled using ioctl() calls.
   \item [Fifo]
     The device is a first-in-first out sequential access read-only 
     or write-only device.
   \item [DVD]
     The device is a DVD. DVDs are sequential access for writing, but
     random access for reading.
  \end{description}
  
  The Device Type directive is not required, and if not specified, Bacula
  will attempt to guess what kind of device has been specified using the
  Archive Device specification supplied. There are several advantages to
  explicitly specifying the Device Type. First, on some systems, block and
  character devices have the same type, which means that on those systems,
  Bacula is unlikely to be able to correctly guess that a device is a DVD.
  Secondly, if you explicitly specify the Device Type, the mount point
  need not be defined until the device is opened. This is the case with
  most removable devices such as USB that are mounted by the HAL daemon.
  If the Device Type is not explicitly specified, then the mount point
  must exist when the Storage daemon starts.

  This directive was implemented in Bacula version 1.38.6.


\item [Media Type = {\it name-string}]
   \index[sd]{Media Type}
   \index[sd]{Directive!Media Type}
   The specified {\bf name-string} names the type of media supported by this
   device, for example, "DLT7000".  Media type names are arbitrary in that you
   set them to anything you want, but they must be known to the volume
   database to keep track of which storage daemons can read which volumes.  In
   general, each different storage type should have a unique Media Type
   associated with it.  The same {\bf name-string} must appear in the
   appropriate Storage resource definition in the Director's configuration
   file.
   
   Even though the names you assign are arbitrary (i.e.  you choose the name
   you want), you should take care in specifying them because the Media Type
   is used to determine which storage device Bacula will select during
   restore.  Thus you should probably use the same Media Type specification
   for all drives where the Media can be freely interchanged.  This is not
   generally an issue if you have a single Storage daemon, but it is with
   multiple Storage daemons, especially if they have incompatible media.
   
   For example, if you specify a Media Type of "DDS-4" then during the
   restore, Bacula will be able to choose any Storage Daemon that handles
   "DDS-4".  If you have an autochanger, you might want to name the Media Type
   in a way that is unique to the autochanger, unless you wish to possibly use
   the Volumes in other drives.  You should also ensure to have unique Media
   Type names if the Media is not compatible between drives.  This
   specification is required for all devices.

   In addition, if you are using disk storage, each Device resource will
   generally have a different mount point or directory. In order for
   Bacula to select the correct Device resource, each one must have a
   unique Media Type.

\label{Autochanger}
\item [Autochanger = {\it Yes|No}]
   \index[sd]{Autochanger}
   \index[sd]{Directive!Autochanger}
   If {\bf Yes}, this device belongs to an automatic tape changer, and you
   must specify an {\bf Autochanger} resource that points to the {\bf
   Device} resources.  You must also specify a 
   {\bf Changer Device}.  If the Autochanger directive is set to {\bf
   No} (default), the volume must be manually changed.  You should also
   have an identical directive to the  
   \ilink{Storage resource}{Autochanger1}  in the Director's
   configuration file so that  when labeling tapes you are prompted for the slot.

\item [Changer Device = {\it name-string}]
   \index[sd]{Changer Device}
   \index[sd]{Directive!Changer Device}
   The specified {\bf name-string} must be the {\bf generic SCSI} device
   name of the autochanger that corresponds to the normal read/write
   {\bf Archive Device}  specified in the Device resource. This
   generic SCSI device name should be specified if you have an autochanger 
   or if you have a standard tape drive and want to use the
   {\bf Alert Command} (see below). For example, on Linux systems, for 
   an Archive Device name of {\bf /dev/nst0}, you would specify {\bf
   /dev/sg0} for the Changer Device name. Depending on your exact
   configuration, and the number of autochangers or the type of
   autochanger, what you specify here can vary.  This directive is
   optional.  See the \ilink{ Using Autochangers}{AutochangersChapter} chapter
   of this manual for more details of using this and the following
   autochanger directives.

\item [Changer Command = {\it name-string}]
   \index[sd]{Changer Command}
   \index[sd]{Directive!Changer Command}
   The {\bf name-string} specifies an external program to be called  that will
   automatically change volumes as required by {\bf Bacula}.  Normally,
   this directive will be specified only in the {\bf AutoChanger} resource,
   which is then used for all devices.  However, you may also specify
   the different {\bf Changer Command} in each Device resource.
   Most frequently,
   you will specify the Bacula supplied {\bf mtx-changer}  script as follows:  

\footnotesize
\begin{verbatim}
Changer Command = "/path/mtx-changer %c %o %S %a %d"
\end{verbatim}
\normalsize

   and you will install the {\bf mtx} on your system (found  in the {\bf depkgs}
   release). An example of this command is in the default bacula-sd.conf file. 
   For more details on the substitution characters that may be specified  to
   configure your autochanger please see  the 
   \ilink{Autochangers}{AutochangersChapter} chapter of this  manual.
   For FreeBSD users, you might want to see one of the  several {\bf chio}
   scripts in {\bf examples/autochangers}.  

\item [Alert Command = {\it name-string}]
   \index[sd]{Alert Command}
   The {\bf name-string} specifies an external program to be called  at the
   completion of each Job after the device is released.  The purpose of this
   command is to check for Tape Alerts, which  are present when something is
   wrong with your tape drive  (at least for most modern tape drives).  The same
   substitution characters that may be specified  in the Changer Command may also
   be used in this string.  For more information, please see  the 
   \ilink{Autochangers}{AutochangersChapter} chapter of this  manual. 
   
   
   Note, it is not necessary to have an autochanger to use this  command. The
   example below uses the {\bf tapeinfo} program  that comes with the {\bf mtx}
   package, but it can be used  on any tape drive. However, you will need to
   specify  a {\bf Changer Device} directive in your Device resource  (see above)
   so that the generic SCSI device name can be  edited into the command (with the
   \%c).  
   
   An example of the use of this command to print Tape Alerts  in the Job report
   is:  

\footnotesize
\begin{verbatim}
Alert Command = "sh -c 'tapeinfo -f %c | grep TapeAlert'"
      
\end{verbatim}
\normalsize

and an example output when there is a problem could be:  

\footnotesize
\begin{verbatim}
bacula-sd  Alert: TapeAlert[32]: Interface: Problem with SCSI interface
                  between tape drive and initiator.
      
\end{verbatim}
\normalsize

\item [Drive Index = {\it number}]
   \index[sd]{Drive Index}
   \index[sd]{Directive!Drive Index}
   The {\bf Drive Index} that you specify is passed to the {\bf
   mtx-changer} script and is thus passed to the {\bf mtx} program.  By
   default, the Drive Index is zero, so if you have only one drive in your
   autochanger, everything will work normally.  However, if you have
   multiple drives, you must specify multiple Bacula Device resources (one
   for each drive).  The first Device should have the Drive Index set to 0,
   and the second Device Resource should contain a Drive Index set to 1,
   and so on.  This will then permit you to use two or more drives in your
   autochanger.  As of Bacula version 1.38.0, using the {\bf Autochanger}
   resource, Bacula will automatically ensure that only one drive at a time
   uses the autochanger script, so you no longer need locking scripts as in
   the past -- the default mtx-changer script works for any number of
   drives.

\item [Autoselect = {\it Yes|No}]
   \index[sd]{Autoselect}
   \index[sd]{Directive!Autoselect}
   If this directive is set to {\bf yes} (default), and the Device
   belongs to an autochanger, then when the Autochanger is referenced
   by the Director, this device can automatically be selected. If this
   directive is set to {\bf no}, then the Device can only be referenced
   by directly using the Device name in the Director. This is useful
   for reserving a drive for something special such as a high priority
   backup or restore operations.

\item [Maximum Changer Wait = {\it time}]
   \index[sd]{Maximum Changer Wait}
   \index[sd]{Directive!Maximum Changer Wait}
   This directive specifies the maximum time in seconds for Bacula to wait
   for an autochanger to change the volume.  If this time is exceeded,
   Bacula will invalidate the Volume slot number stored in the catalog and
   try again.  If no additional changer volumes exist, Bacula will ask the
   operator to intervene.  The default is 5 minutes.      
% TODO: if this is the format, then maybe "5 minutes" should be in
% TODO: quotes? define style. see others.

\item [Maximum Rewind Wait = {\it time}]
   \index[sd]{Maximum Rewind Wait}
   \index[sd]{Directive!Maximum Rewind Wait}
   This directive specifies the maximum time in seconds for Bacula to wait
   for a rewind before timing out.  If this time is exceeded,
   Bacula will cancel the job.  The default is 5 minutes.

\item [Maximum Open Wait = {\it time}]
   \index[sd]{Maximum Open Wait}
   \index[sd]{Directive!Maximum Open Wait}
   This directive specifies the maximum time in seconds for Bacula to wait
   for a open before timing out.  If this time is exceeded,
   Bacula will cancel the job.  The default is 5 minutes.

\item [Always Open = {\it Yes|No}]
   \index[sd]{Always Open}
   \index[sd]{Directive!Always Open}
   If {\bf Yes} (default), Bacula will always keep the device open unless
   specifically {\bf unmounted} by the Console program.  This permits
   Bacula to ensure that the tape drive is always available, and properly
   positioned. If you set
   {\bf AlwaysOpen} to {\bf no} {\bf Bacula} will only open the drive when
   necessary, and at the end of the Job if no other Jobs are using the
   drive, it will be freed.  The next time Bacula wants to append to a tape
   on a drive that was freed, Bacula will rewind the tape and position it to
   the end.  To avoid unnecessary tape positioning and to minimize
   unnecessary operator intervention, it is highly recommended that {\bf
   Always Open = yes}.  This also ensures that the drive is available when
   Bacula needs it.
   
   If you have {\bf Always Open = yes} (recommended) and you want  to use the
   drive for something else, simply use the {\bf unmount}  command in the Console
   program to release the drive. However, don't  forget to remount the drive with
   {\bf mount} when the drive is  available or the next Bacula job will block.  
   
   For File storage, this directive is ignored. For a FIFO storage  device, you
   must set this to {\bf No}.  
   
   Please note that if you set this directive to {\bf No} Bacula  will release
   the tape drive between each job, and thus the next job  will rewind the tape
   and position it to the end of the data. This  can be a very time consuming
   operation. In addition, with this directive set to no, certain multiple
   drive autochanger operations will fail.  We strongly recommend to keep
   {\bf Always Open} set to {\bf Yes}

\item [Volume Poll Interval = {\it time}]
   \index[sd]{Volume Poll Interval}
   \index[sd]{Directive!Volume Poll Interval}
   If the time  specified on this directive is non-zero, after  asking the
   operator to mount a new volume Bacula will  periodically poll (or read) the
   drive at the specified  interval to see if a new volume has been mounted. If
   the  time interval is zero (the default), no polling will occur.  This
   directive can be useful if you want to avoid operator  intervention via the
   console. Instead, the operator can  simply remove the old volume and insert
   the requested one,  and Bacula on the next poll will recognize the new tape
   and  continue. Please be aware that if you set this interval  too small, you
   may excessively wear your tape drive if the  old tape remains in the drive,
   since Bacula will read it on  each poll. This can be avoided by ejecting the
   tape using  the {\bf Offline On Unmount} and the {\bf Close on Poll} 
   directives. 
   However, if you are using a Linux 2.6 kernel or other OSes
   such as FreeBSD or Solaris, the Offline On Unmount will leave the drive
   with no tape, and Bacula will not be able to properly open the drive and
   may fail the job.  For more information on this problem, please see the
   \ilink{description of Offline On Unmount}{NoTapeInDrive} in the Tape
   Testing chapter.

\item [Close on Poll= {\it Yes|No}]
   \index[sd]{Close on Poll}
   \index[sd]{Directive!Close on Poll}
   If {\bf Yes}, Bacula close the device (equivalent to  an unmount except no
   mount is required) and reopen it at each  poll. Normally this is not too
   useful unless you have the  {\bf Offline on Unmount} directive set, in which
   case the  drive will be taken offline preventing wear on the tape  during any
   future polling. Once the operator inserts a new  tape, Bacula will recognize
   the drive on the next poll and  automatically continue with the backup. 
   Please see above more more details.

\item [Maximum Open Wait = {\it time}]
   \index[sd]{Maximum Open Wait}
   \index[sd]{Directive!Maximum Open Wait}
   This directive specifies the maximum amount of time in seconds that
   Bacula will wait for a device that is busy.  The default is 5 minutes.
   If the device cannot be obtained, the current Job will be terminated in
   error.  Bacula will re-attempt to open the drive the next time a Job
   starts that needs the the drive.

\label{removablemedia}
\item [Removable media = {\it Yes|No}]
   \index[sd]{Removable media}
   \index[sd]{Directive!Removable media}
   If {\bf Yes}, this device supports removable media (for example, tapes
   or CDs).  If {\bf No}, media cannot be removed (for example, an
   intermediate backup area on a hard disk). If {\bf Removable media} is
   enabled on a File device (as opposed to a tape) the Storage daemon will
   assume that device may be something like a USB device that can be
   removed or a simply a removable harddisk. When attempting to open
   such a device, if the Volume is not found (for File devices, the Volume
   name is the same as the Filename), then the Storage daemon will search
   the entire device looking for likely Volume names, and for each one 
   found, it will ask the Director if the Volume can be used.  If so,
   the Storage daemon will use the first such Volume found.  Thus it
   acts somewhat like a tape drive -- if the correct Volume is not found,
   it looks at what actually is found, and if it is an appendable Volume,
   it will use it.

   If the removable medium is not automatically mounted (e.g. udev), then
   you might consider using additional Storage daemon device directives
   such as {\bf Requires Mount}, {\bf Mount Point}, {\bf Mount Command},
   and {\bf Unmount Command}, all of which can be used in conjunction with
   {\bf Removable Media}.    


\item [Random access = {\it Yes|No}]
   \index[sd]{Random access}
   \index[sd]{Directive!Random access}
   If {\bf Yes}, the archive device is assumed to be a random access medium
   which supports the {\bf lseek} (or {\bf lseek64} if Largefile is enabled
   during configuration) facility. This should be set to {\bf Yes} for all
   file systems such as DVD, USB, and fixed files.  It should be set to
   {\bf No} for non-random access devices such as tapes and named pipes.


\item [Requires Mount = {\it Yes|No}]
   \index[sd]{Requires Mount  }
   When this directive is enabled, the Storage daemon will submit
   a {\bf Mount Command} before attempting to open the device.
   You must set this directive to {\bf yes} for DVD-writers and removable
   file systems such as USB devices that are not automatically mounted
   by the operating system when plugged in or opened by Bacula.
   It should be set to {\bf no} for
   all other devices such as tapes and fixed filesystems. It should also
   be set to {\bf no} for any removable device that is automatically
   mounted by the operating system when opened (e.g. USB devices mounted
   by udev or hotplug). This directive
   indicates if the device requires to be mounted using the {\bf Mount
   Command}.  To be able to write a DVD, the following directives must also
   be defined: {\bf Mount Point}, {\bf Mount Command}, {\bf Unmount
   Command} and {\bf Write Part Command}.

\item [Mount Point = {\it directory}]
   \index[sd]{Mount Point}
   Directory where the device can be mounted. 
   This directive is used only
   for devices that have {\bf Requires Mount} enabled such as DVD or 
   USB file devices.

\item [Mount Command = {\it name-string}]
   \index[sd]{Mount Command}
   This directive specifies the command that must be executed to mount 
   devices such as DVDs and many USB devices. For DVDs, the
   device is written directly, but the mount command is necessary in
   order to determine the free space left on the DVD. Before the command is 
   executed, \%a is replaced with the Archive Device, and \%m with the Mount 
   Point.

   Most frequently, for a DVD, you will define it as follows:  

\footnotesize
\begin{verbatim}
  Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
\end{verbatim}
\normalsize

However, if you have defined a mount point in /etc/fstab, you might be
able to use a mount command such as:

\footnotesize
\begin{verbatim}
  Mount Command = "/bin/mount /media/dvd"
\end{verbatim}
\normalsize

See the \ilink {Edit Codes}{mountcodes} section below for more details of
the editing codes that can be used in this directive.


\item [Unmount Command = {\it name-string}]
   \index[sd]{Unmount Command}
   This directive specifies the command that must be executed to unmount 
   devices such as DVDs and many USB devices. Before the command  is
   executed, \%a is replaced with the Archive Device, and \%m with the  Mount
   Point.

   Most frequently, you will define it as follows:  

\footnotesize
\begin{verbatim}
  Unmount Command = "/bin/umount %m"
\end{verbatim}
\normalsize

See the \ilink {Edit Codes}{mountcodes} section below for more details of
the editing codes that can be used in this directive.


\item [Minimum block size = {\it size-in-bytes}]
   \index[sd]{Minimum block size}
   \index[sd]{Directive!Minimum block size}
   On most modern tape drives, you will not need or want to specify this
   directive, and if you do so, it will be to make Bacula use fixed block
   sizes.  This statement applies only to non-random access devices (e.g.
   tape drives).  Blocks written by the storage daemon to a non-random
   archive device will never be smaller than the given {\bf size-in-bytes}.
   The Storage daemon will attempt to efficiently fill blocks with data
   received from active sessions but will, if necessary, add padding to a
   block to achieve the required minimum size.
   
   To force the block size to be fixed, as is the case for some non-random
   access devices (tape drives), set the {\bf Minimum block size} and the
   {\bf Maximum block size} to the same value (zero included).  The default
   is that both the minimum and maximum block size are zero and the default
   block size is 64,512 bytes. 
   
   For  example, suppose you want a fixed block size of 100K bytes, then you 
   would specify:  

\footnotesize
\begin{verbatim}
 
    Minimum block size = 100K
    Maximum block size = 100K
    
\end{verbatim}
\normalsize

   Please note that if you specify a fixed block size as shown above,  the tape
   drive must either be in variable block size mode, or  if it is in fixed block
   size mode, the block size (generally  defined by {\bf mt}) {\bf must} be
   identical to the size specified  in Bacula -- otherwise when you attempt to
   re-read your Volumes,  you will get an error.  
   
   If you want the  block size to be variable but with a 64K minimum and 200K
   maximum (and  default as well), you would specify:  

\footnotesize
\begin{verbatim}
 
    Minimum block size = 64K
    Maximum blocksize = 200K
   
\end{verbatim}
\normalsize

\item [Maximum block size = {\it size-in-bytes}]
   \index[sd]{Maximum block size}
   \index[sd]{Directive!Maximum block size}
   On most modern tape drives, you will not need to specify this directive.
   If you do so, it will most likely be to use fixed block sizes (see
   Minimum block size above).  The Storage daemon will always attempt to
   write blocks of the specified {\bf size-in-bytes} to the archive device.
   As a consequence, this statement specifies both the default block size
   and the maximum block size.  The size written never exceed the given
   {\bf size-in-bytes}.  If adding data to a block would cause it to exceed
   the given maximum size, the block will be written to the archive device,
   and the new data will begin a new block.
   
   If no value is specified or zero is specified, the Storage daemon will
   use a default block size of 64,512 bytes (126 * 512).

\item [Hardware End of Medium = {\it Yes|No}]
   \index[sd]{Hardware End of Medium}
   \index[sd]{Directive!Hardware End of Medium}
   If {\bf No}, the archive device is not required to support end  of medium
   ioctl request, and the storage daemon will use the forward  space file
   function to find the end of the recorded data. If  {\bf Yes}, the archive
   device must support the {\tt ioctl}  {\tt MTEOM} call, which will position the
   tape to the end of the  recorded data. In addition, your SCSI driver must keep
   track  of the file number on the tape and report it back correctly by  the
   {\bf MTIOCGET} ioctl. Note, some SCSI drivers will correctly  forward space to
   the end of the recorded data, but they do not  keep track of the file number.
   On Linux machines, the SCSI driver  has a {\bf fast-eod} option, which if set
   will cause the driver  to lose track of the file number. You should ensure
   that this  option is always turned off using the {\bf mt} program.  
   
   Default setting for Hardware End of Medium is {\bf Yes}. This  function is
   used before appending to a tape to ensure that no  previously written data is
   lost. We recommend if you have a non-standard or unusual tape drive that you
   use the {\bf btape} program  to test your drive to see whether or not it
   supports this function.  All modern (after 1998) tape drives support this
   feature.  
   
\item [Fast Forward Space File = {\it Yes|No}]
   \index[sd]{Fast Forward Space File}
   \index[sd]{Directive!Fast Forward Space File}
   If {\bf No}, the archive device is not required to support  keeping track of
   the file number ({\bf MTIOCGET} ioctl) during  forward space file. If {\bf
   Yes}, the archive device must support  the {\tt ioctl} {\tt MTFSF} call, which
   virtually all drivers  support, but in addition, your SCSI driver must keep
   track of the  file number on the tape and report it back correctly by the 
   {\bf MTIOCGET} ioctl. Note, some SCSI drivers will correctly  forward space,
   but they do not keep track of the file number or more  seriously, they do not
   report end of medium.  
   
   Default setting for Fast Forward Space File is {\bf Yes}.
   
\item [Use MTIOCGET = {\it Yes|No}]
   \index[sd]{Use MTIOCGET}
   \index[sd]{Directive!Use MTIOCGET}
   If {\bf No}, the operating system is not required to support keeping track of
   the file number and reporting it in the ({\bf MTIOCGET} ioctl). The default
   is {\bf Yes}. If you must set this to No, Bacula will do the proper file
   position determination, but it is very unfortunate because it means that 
   tape movement is very inefficient.
   Fortunately, this operation system deficiency seems to be the case only
   on a few *BSD systems.  Operating systems known to work correctly are
   Solaris, Linux and FreeBSD.

\item [BSF at EOM = {\it Yes|No}]
   \index[sd]{BSF at EOM}
   \index[sd]{Directive!BSF at EOM}
   If {\bf No}, the default, no special action is taken by  Bacula with the End
   of Medium (end of tape) is reached because  the tape will be positioned after
   the last EOF tape mark, and  Bacula can append to the tape as desired.
   However, on some  systems, such as FreeBSD, when Bacula reads the End of
   Medium  (end of tape), the tape will be positioned after the second  EOF tape
   mark (two successive EOF marks indicated End of  Medium). If Bacula appends
   from that point, all the appended  data will be lost. The solution for such
   systems is to  specify {\bf BSF at EOM} which causes Bacula to backspace  over
   the second EOF mark. Determination of whether or not  you need this directive
   is done using the {\bf test} command  in the {\bf btape} program.

\item [TWO EOF = {\it Yes|No}]
   \index[sd]{TWO EOF}
   \index[sd]{Directive!TWO EOF}
   If {\bf Yes}, Bacula will write two end of file marks when  terminating a tape
-- i.e. after the last job or at the end of  the medium. If {\bf No}, the
default, Bacula will only write  one end of file to terminate the tape. 

\item [Backward Space Record = {\it Yes|No}]
   \index[sd]{Backward Space Record}
   \index[sd]{Directive!Backward Space Record}
   If {\it Yes}, the archive device supports the {\tt MTBSR  ioctl} to backspace
   records. If {\it No}, this call is not  used and the device must be rewound
   and advanced forward to the  desired position. Default is {\bf Yes} for non
   random-access  devices. This function if enabled is used at the end of a 
   Volume after writing the end of file and any ANSI/IBM labels to determine whether
   or not the last block was written correctly. If you turn this function off,
   the test will not be done. This causes no harm as the re-read process is
   precautionary rather than required.

\item [Backward Space File = {\it Yes|No}]
   \index[sd]{Backward Space File}
   \index[sd]{Directive!Backward Space File}
   If {\it Yes}, the archive device supports the {\bf MTBSF} and  {\bf MTBSF
  ioctl}s to backspace over an end of file mark and to the  start of a file. If
  {\it No}, these calls are not used and the  device must be rewound and
  advanced forward to the desired position.  Default is {\bf Yes} for non
  random-access devices. 

\item [Forward Space Record = {\it Yes|No}]
   \index[sd]{Forward Space Record}
   \index[sd]{Directive!Forward Space Record}
   If {\it Yes}, the archive device must support the {\bf MTFSR  ioctl} to
   forward space over records. If {\bf No}, data must  be read in order to
   advance the position on the device. Default is  {\bf Yes} for non
   random-access devices. 

\item [Forward Space File = {\it Yes|No}]
   \index[sd]{Forward Space File}
   \index[sd]{Directive!Forward Space File}
   If {\bf Yes}, the archive device must support the {\tt MTFSF  ioctl} to
   forward space by file marks. If {\it No}, data  must be read to advance the
   position on the device. Default is  {\bf Yes} for non random-access devices. 

\item [Offline On Unmount = {\it Yes|No}]
   \index[sd]{Offline On Unmount}
   \index[sd]{Directive!Offline On Unmount}
   The default for this directive is {\bf No}. If {\bf Yes} the  archive device
   must support the {\tt MTOFFL ioctl} to rewind and  take the volume offline. In
   this case, Bacula will issue the  offline (eject) request before closing the
   device during the {\bf unmount}  command. If {\bf No} Bacula will not attempt
   to offline the  device before unmounting it. After an offline is issued,  the
   cassette will be ejected thus {\bf requiring operator intervention}  to
   continue, and on some systems require an explicit load command  to be issued
   ({\bf mt -f /dev/xxx load}) before the system will recognize  the tape. If you
   are using an autochanger, some devices  require an offline to be issued prior
   to changing the volume. However,  most devices do not and may get very
   confused.  

   If you are using a Linux 2.6 kernel or other OSes
   such as FreeBSD or Solaris, the Offline On Unmount will leave the drive
   with no tape, and Bacula will not be able to properly open the drive and
   may fail the job.  For more information on this problem, please see the
   \ilink{description of Offline On Unmount}{NoTapeInDrive} in the Tape
   Testing chapter.


\item [Maximum Volume Size = {\it size}]
   \index[sd]{Maximum Volume Size}
   \index[sd]{Directive!Maximum Volume Size}
   No more than {\bf size} bytes will be written onto a given volume on the
   archive device.  This directive is used mainly in testing Bacula to
   simulate a small Volume.  It can also be useful if you wish to limit the
   size of a File Volume to say less than 2GB of data.  In some rare cases
   of really antiquated tape drives that do not properly indicate when the
   end of a tape is reached during writing (though I have read about such
   drives, I have never personally encountered one).  Please note, this
   directive is deprecated (being phased out) in favor of the {\bf Maximum
   Volume Bytes} defined in the Director's configuration file.

\item [Maximum File Size = {\it size}]
   \index[sd]{Maximum File Size}
   \index[sd]{Directive!Maximum File Size}
   No more than {\bf size} bytes will be written into a given logical file
   on the volume.  Once this size is reached, an end of file mark is
   written on the volume and subsequent data are written into the next
   file.  Breaking long sequences of data blocks with file marks permits
   quicker positioning to the start of a given stream of data and can
   improve recovery from read errors on the volume.  The default is one
   Gigabyte.  This directive creates EOF marks only on tape media.
   However, regardless of the medium type (tape, disk, DVD, ...) each time
   a the Maximum File Size is exceeded, a record is put into the catalog
   database that permits seeking to that position on the medium for
   restore operations. If you set this to a small value (e.g. 1MB),
   you will generate lots of database records (JobMedia) and may
   significantly increase CPU/disk overhead.

   Note, this directive does not limit the size of Volumes that Bacula
   will create regardless of whether they are tape or disk volumes. It
   changes only the number of EOF marks on a tape and the number of
   block positioning records (see below) that are generated. If you
   want to limit the size of all Volumes for a particular device, use
   the {\bf Maximum Volume Size} directive (above), or use the
   {\bf Maximum Volume Bytes} directive in the Director's Pool resource,
   which does the same thing but on a Pool (Volume) basis.

\item [Block Positioning = {\it yes|no}]
   \index[sd]{Block Positioning}
   \index[sd]{Directive!Block Positioning}
   This directive tells Bacula not to use block positioning when doing restores.
   Turning this directive off can cause Bacula to be {\bf extremely} slow
   when restoring files.  You might use this directive if you wrote your
   tapes with Bacula in variable block mode (the default), but your drive
   was in fixed block mode. The default is {\bf yes}.

\item [Maximum Network Buffer Size = {\it bytes}]
   \index[sd]{Maximum Network Buffer Size}
   \index[sd]{Directive!Maximum Network Buffer Size}
   where {\it bytes} specifies the initial network buffer  size to use with the
   File daemon.  This size will be adjusted down if it is too large until
   it is accepted by the OS. Please use care in setting this value since if
   it is too large, it will be trimmed by 512 bytes until the OS is happy,
   which may require a large number of system calls.  The default value is
   32,768 bytes.

   The default size was chosen to be relatively large but not too big in
   the case that you are transmitting data over Internet.  It is clear that
   on a high speed local network, you can increase this number and improve
   performance. For example, some users have found that if you use a value
   of 65,536 bytes they get five to ten times the throughput.  Larger values for
   most users don't seem to improve performance. If you are interested
   in improving your backup speeds, this is definitely a place to
   experiment. You will probably also want to make the corresponding change
   in each of your File daemons conf files.


\item [Maximum Spool Size = {\it bytes}]
   \index[sd]{Maximum Spool Size}
   \index[sd]{Directive!Maximum Spool Size}
   where the bytes specify the maximum spool size for all jobs  that are running.
   The default is no limit. 

\item [Maximum Job Spool Size = {\it bytes}]
   \index[sd]{Maximum Job Spool Size}
   \index[sd]{Directive!Maximum Job Spool Size}
   where the bytes specify the maximum spool size for any one job  that is
   running. The default is no limit. 
   This directive is implemented only in version 1.37 and later.

\item [Spool Directory = {\it directory}]
   \index[sd]{Spool Directory}
   \index[sd]{Directive!Spool Directory}
   specifies the name of the directory to be used to store  the spool files for
   this device. This directory is also used to store  temporary part files when
   writing to a device that requires mount (DVD).  The default is to use the
   working directory. 

\item [Maximum Part Size = {\it bytes}]
   \index[sd]{Maximum Part Size}
   \index[sd]{Directive!Maximum Part Size}
   This is the maximum size of a volume part file. The default is no limit.
   This directive is implemented only in version 1.37 and later.

   If the device requires  mount, it is transferred to the device when this size
   is reached.  In this case, you must take care to have enough disk space left
   in  the spool directory.  

   Otherwise, it is left on the hard disk.  

   It is ignored for tape and FIFO devices.  


\end{description}

\label{mountcodes}
\section{Edit Codes for Mount and Unmount Directives} 
\index[general]{Directives!Edit Codes}
\index[general]{Edit Codes for Mount and Unmount Directives }

Before submitting the {\bf Mount Command}, {\bf Unmount Command}, 
{\bf Write Part Command}, or {\bf Free Space Command} directives 
to the operating system, Bacula performs character substitution of the
following characters:

\footnotesize
\begin{verbatim}
    %% = %
    %a = Archive device name
    %e = erase (set if cannot mount and first part)
    %n = part number
    %m = mount point
    %v = last part name (i.e. filename)
\end{verbatim}
\normalsize


\section{Devices that require a mount (DVD)}
\index[general]{Devices that require a mount (DVD)}
\index[general]{DVD!Devices that require a mount}

All the directives in this section are implemented only in
Bacula version 1.37 and later and hence are available in version 1.38.6.

As of version 1.39.5, the directives
"Requires Mount", "Mount Point", "Mount Command", and "Unmount Command"
apply to removable filesystems such as USB in addition to DVD.

\begin{description}

\item [Requires Mount = {\it Yes|No}]
   \index[sd]{Requires Mount}
   \index[sd]{Directive!Requires Mount}
   You must set this directive to {\bf yes} for DVD-writers,  and to {\bf no} for
   all other devices (tapes/files).  This directive indicates if the device
   requires to be mounted to be read,  and if it must be written in a special way.
   If it set, {\bf Mount Point},  {\bf Mount Command}, {\bf Unmount Command} and
   {\bf Write Part Command}  directives must also be defined. 

\item [Mount Point = {\it directory}]
   \index[sd]{Mount Point}
   \index[sd]{Directive!Mount Point}
   Directory where the device can be mounted. 

\item [Mount Command = {\it name-string}]
   \index[sd]{Mount Command}
   \index[sd]{Directive!Mount Command}
   Command that must be executed to mount the device. Before the command is 
   executed, \%a is replaced with the Archive Device, and \%m with the Mount 
   Point.

   Most frequently, you will define it as follows:  

\footnotesize
\begin{verbatim}
  Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
\end{verbatim}
\normalsize

\item [Unmount Command = {\it name-string}]
   \index[sd]{Unmount Command}
   \index[sd]{Directive!Unmount Command}
   Command that must be executed to unmount the device. Before the command  is
   executed, \%a is replaced with the Archive Device, and \%m with the  Mount
   Point.

   Most frequently, you will define it as follows:  

\footnotesize
\begin{verbatim}
  Unmount Command = "/bin/umount %m"
\end{verbatim}
\normalsize

\item [Write Part Command = {\it name-string}]
   \index[sd]{Write Part Command}
   \index[sd]{Directive!Write Part Command}
   Command that must be executed to write a part to the device. Before the 
   command is executed, \%a is replaced with the Archive Device, \%m with the 
   Mount Point, \%e is replaced with 1 if we are writing the first part,
   and with 0 otherwise, and \%v with the current part filename.

   For a DVD, you will most frequently specify the Bacula supplied  {\bf
   dvd-handler} script as follows:  

\footnotesize
\begin{verbatim}
  Write Part Command = "/path/dvd-handler %a write %e %v"
\end{verbatim}
\normalsize

  Where {\bf /path} is the path to your scripts install directory, and
  dvd-handler is the Bacula supplied script file.  
  This command will already be present, but commented out,
  in the default bacula-sd.conf file. To use it, simply remove
  the comment (\#) symbol.


\item [Free Space Command = {\it name-string}]
   \index[sd]{Free Space Command}
   \index[sd]{Directive!Free Space Command}
   Command that must be executed to check how much free space is left on the 
   device. Before the command is executed,\%a is replaced with the Archive
   Device, \%m with the Mount Point, \%e is replaced with 1 if we are writing
   the first part, and with 0 otherwise, and \%v with the current part filename.

   For a DVD, you will most frequently specify the Bacula supplied  {\bf
   dvd-handler} script as follows:  

\footnotesize
\begin{verbatim}
  Free Space Command = "/path/dvd-handler %a free"
\end{verbatim}
\normalsize

  Where {\bf /path} is the path to your scripts install directory, and
  dvd-handler is the Bacula supplied script file.
  If you want to specify your own command, please look at the code of
  dvd-handler to see what output Bacula expects from this command.
  This command will already be present, but commented out,
  in the default bacula-sd.conf file. To use it, simply remove
  the comment (\#) symbol.

  If you do not set it, Bacula will expect there is always free space on the
  device. 

\end{description}

%% This pulls in the Autochanger resource from another file.
\label{AutochangerRes}
\label{AutochangerResource1}
\input{autochangerres}




\section{Capabilities}
\index[general]{Capabilities}

\begin{description}

\item [Label media = {\it Yes|No}]
   \index[sd]{Label media}
   \index[sd]{Directive!Label media}
   If {\bf Yes}, permits this device to automatically label blank media
   without an explicit operator command.  It does so by using an internal
   algorithm as defined on the \ilink{Label Format}{Label} record in each
   Pool resource.  If this is {\bf No} as by default, Bacula will label
   tapes only by specific operator command ({\bf label} in the Console) or
   when the tape has been recycled.  The automatic labeling feature is most
   useful when writing to disk rather than tape volumes.

\item [Automatic mount = {\it Yes|No}]
   \index[sd]{Automatic mount}
   \index[sd]{Directive!Automatic mount}
   If {\bf Yes} (the default), permits the daemon to examine the device to
   determine if it contains a Bacula labeled volume.  This is done
   initially when the daemon is started, and then at the beginning of each
   job.  This directive is particularly important if you have set
   {\bf Always Open = no} because it permits Bacula to attempt to read the
   device before asking the system operator to mount a tape.  However,
   please note that the tape must be mounted before the job begins.

\end{description}

\section{Messages Resource}
\label{MessagesResource1}
\index[general]{Resource!Messages}
\index[general]{Messages Resource}

For a description of the Messages Resource, please see the 
\ilink{Messages Resource}{MessagesChapter} Chapter of this
manual. 

\section{Sample Storage Daemon Configuration File}
\label{SampleConfiguration}
\index[general]{File!Sample Storage Daemon Configuration}
\index[general]{Sample Storage Daemon Configuration File}

A example Storage Daemon configuration file might be the following: 

\footnotesize
\begin{verbatim}
#
# Default Bacula Storage Daemon Configuration file
#
#  For Bacula release 1.37.2 (07 July 2005) -- gentoo 1.4.16
#
# 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 bacula-dir.conf has corresponding changes.
#
Storage {                               # definition of myself
  Name = rufus-sd
  Address = rufus
  WorkingDirectory = "$HOME/bacula/bin/working"
  Pid Directory = "$HOME/bacula/bin/working"
  Maximum Concurrent Jobs = 20
}
#
# List Directors who are permitted to contact Storage daemon
#
Director {
  Name = rufus-dir
  Password = "ZF9Ctf5PQoWCPkmR3s4atCB0usUPg+vWWyIo2VS5ti6k"
}
#
# Restricted Director, used by tray-monitor to get the
#   status of the storage daemon
#
Director {
  Name = rufus-mon
  Password = "9usxgc307dMbe7jbD16v0PXlhD64UVasIDD0DH2WAujcDsc6"
  Monitor = yes
}
#
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
#  same Name and MediaType.
#
Autochanger {
  Name = Autochanger
  Device = Drive-1
  Device = Drive-2
  Changer Command = "/home/kern/bacula/bin/mtx-changer %c %o %S %a %d"
  Changer Device = /dev/sg0
}

Device {
  Name = Drive-1                      #
  Drive Index = 0 
  Media Type = DLT-8000
  Archive Device = /dev/nst0
  AutomaticMount = yes;               # when device opened, read it
  AlwaysOpen = yes;
  RemovableMedia = yes;
  RandomAccess = no;
  AutoChanger = yes
  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
}

Device {
  Name = Drive-2                      #
  Drive Index = 1
  Media Type = DLT-8000
  Archive Device = /dev/nst1
  AutomaticMount = yes;               # when device opened, read it
  AlwaysOpen = yes;
  RemovableMedia = yes;
  RandomAccess = no;
  AutoChanger = yes
  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
}

Device {
  Name = "HP DLT 80"
  Media Type = DLT8000
  Archive Device = /dev/nst0
  AutomaticMount = yes;                 # when device opened, read it
  AlwaysOpen = yes;
  RemovableMedia = yes;
}
#Device {
#  Name = SDT-7000                     #
#  Media Type = DDS-2
#  Archive Device = /dev/nst0
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#}
#Device {
#  Name = Floppy
#  Media Type = Floppy
#  Archive Device = /mnt/floppy
#  RemovableMedia = yes;
#  Random Access = Yes;
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = no;
#}
#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;
#}
#Device {
#  Name = "NEC ND-1300A"
#  Media Type = DVD
#  Archive Device = /dev/hda
#  LabelMedia = yes;                   # lets Bacula label unlabeled media
#  Random Access = Yes;
#  AutomaticMount = yes;               # when device opened, read it
#  RemovableMedia = yes;
#  AlwaysOpen = no;
#  MaximumPartSize = 800M;
#  RequiresMount = yes;
#  MountPoint = /mnt/cdrom;
#  MountCommand = "/bin/mount -t iso9660 -o ro %a %m";
#  UnmountCommand = "/bin/umount %m";
#  SpoolDirectory = /tmp/backup;
#  WritePartCommand = "/etc/bacula/dvd-handler %a write %e %v"
#  FreeSpaceCommand = "/etc/bacula/dvd-handler %a free"
#}
#
# A very old Exabyte with no end of media detection
#
#Device {
#  Name = "Exabyte 8mm"
#  Media Type = "8mm"
#  Archive Device = /dev/nst0
#  Hardware end of medium = No;
#  AutomaticMount = yes;               # when device opened, read it
#  AlwaysOpen = Yes;
#  RemovableMedia = yes;
#}
#
# Send all messages to the Director,
# mount messages also are sent to the email address
#
Messages {
  Name = Standard
  director = rufus-dir = all
  operator = root = mount
}
\end{verbatim}
\normalsize
