Subsections

- DVD Specific SD Directives
- Edit Codes for DVD Directives
- DVD Specific Director Directives
- Other Points

#
DVD Volumes

Bacula allows you to specify that you want to write to DVD. However, this feature is implemented only in version 1.37 or later. You may in fact write to DVD+RW, DVD+R, DVD-R, or DVD-RW media. The actual process used by Bacula is to first write the image to a spool directory, then when the Volume reaches a certain size or, at your option, at the end of a Job, Bacula will transfer the image from the spool directory to the DVD. The actual work of transferring the image is done by a script dvd-handler, and the heart of that script is a program called growisofs which allows creating or adding to a DVD ISO filesystem.

You must have dvd+rw-tools loaded on your system for DVD writing to work. Please note that the original dvd+rw-tools package does NOT work with Bacula. You must apply a patch which can be found in the patches directory of Bacula sources with the name dvd+rw-tools-5.21.4.10.8.bacula.patch for version 5.21 of the tools, or patch bf dvd+rw-tools-6.1.bacula.patch if you have version 6.1 on your system. Unfortunately, this requires you to build the dvd_rw-tools from source.

Note, some Linux distros such as Debian dvd+rw-tools-7.0-4 package already have the patch applied, so please check.

The fact that Bacula cannot use the OS to write directly to the DVD makes the whole process a bit more error prone than writing to a disk or a tape, but nevertheless, it does work if you use some care to set it up properly. However, at the current time (version 1.39.30 -- 12 December 2006) we still consider this code to be BETA quality. As a consequence, please do careful testing before relying on DVD backups in production.

The remainder of this chapter explains the various directives that you can use to control the DVD writing.

# DVD Specific SD Directives

The following directives are added to the Storage daemon's Device resource.

Requires Mount = Yes|No
  You must set this directive to yes for DVD-writers, and to no for all other devices (tapes/files). This directive indicates if the device requires to be mounted using the Mount Command. To be able to write a DVD, the following directives must also be defined: Mount Point, Mount Command, Unmount Command and Write Part Command.

Mount Point = directory
  Directory where the device can be mounted.

Mount Command = name-string
  Command that must be executed to mount the device. Although the device is written directly, 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, you will define it as follows:

        Mount Command = "/bin/mount -t iso9660 -o ro %a %m"

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

        Mount Command = "/bin/mount /media/dvd"

Unmount Command = name-string
  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:

        Unmount Command = "/bin/umount %m"

Write Part Command = name-string
  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 dvd-handler script as follows:

        Write Part Command = "/path/dvd-handler %a write %e %v"

  Where /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.

Free Space Command = name-string
  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.

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

        Free Space Command = "/path/dvd-handler %a free"

  Where /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 in 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.

In addition to the directives specified above, you must also specify the other standard Device resource directives. Please see the sample DVD Device resource in the default bacula-sd.conf file. Be sure to specify the raw device name for Archive Device. It should be a name such as /dev/cdrom or /media/cdrecorder or /dev/dvd depending on your system. It will not be a name such as /mnt/cdrom.

Finally, for growisofs to work, it must be able to lock a certain amount of memory in RAM. If you have restrictions on this function, you may have failures. Under bash, you can set this with the following command:

    ulimit -l unlimited

# Edit Codes for DVD Directives

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

        %% = %
        %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)

# DVD Specific Director Directives

The following directives are added to the Director's Job resource.

Write Part After Job = <yes|no>
  If this directive is set to yes (default no), the Volume written to a temporary spool file for the current Job will be written to the DVD as a new part file will be created after the job is finished.

  It should be set to yes when writing to devices that require a mount (for example DVD), so you are sure that the current part, containing this job's data, is written to the device, and that no data is left in the temporary file on the hard disk. However, on some media, like DVD+R and DVD-R, a lot of space (about 10Mb) is lost everytime a part is written. So, if you run several jobs each after another, you could set this directive to no for all jobs, except the last one, to avoid wasting too much space, but to ensure that the data is written to the medium when all jobs are finished.

  This directive is ignored for devices other than DVDs.

# Other Points

- Please be sure that you have any automatic DVD mounting disabled before running Bacula -- this includes auto mounting in /etc/fstab, hotplug, ... If the DVD is automatically mounted by the OS, it will cause problems when Bacula tries to mount/unmount the DVD.
- Please be sure that you the directive Write Part After Job set to yes, otherwise the last part of the data to be written will be left in the DVD spool file and not written to the DVD. The DVD will then be unreadable until this last part is written. If you have a series of jobs that are run one at a time, you can turn this off until the last job is run.
- The current code is not designed to have multiple simultaneous jobs writing to the DVD. As a consequence, please ensure that only one DVD backup job runs at any time.
- Writing and reading of DVD+RW seems to work quite reliably provided you are using the patched dvd+rw-mediainfo programs. On the other hand, we do not have enough information to ensure that DVD-RW or other forms of DVDs work correctly.
- DVD+RW supports only about 1000 overwrites. Every time you mount the filesystem read/write will count as one write. This can add up quickly, so it is best to mount your DVD+RW filesystem read-only. Bacula does not need the DVD to be mounted read-write, since it uses the raw device for writing.
- Reformatting DVD+RW 10-20 times can apparently make the medium unusable. Normally you should not have to format or reformat DVD+RW media. If it is necessary, current versions of growisofs will do so automatically.
- We have had several problems writing to DVD-RWs (this does NOT concern DVD+RW), because these media have two writing-modes: Incremental Sequential and Restricted Overwrite. Depending on your device and the media you use, one of these modes may not work correctly (e.g. Incremental Sequential does not work with my NEC DVD-writer and Verbatim DVD-RW).

  To retrieve the current mode of a DVD-RW, run:

        dvd+rw-mediainfo /dev/xxx

  where you replace xxx with your DVD device name.

  Mounted Media line should give you the information.

  To set the device to Restricted Overwrite mode, run:

        dvd+rw-format /dev/xxx

  If you want to set it back to the default Incremental Sequential mode, run:

        dvd+rw-format -blank /dev/xxx

- Bacula only accepts to write to blank DVDs. To quickly blank a DVD+/-RW, run this command:

        dd if=/dev/zero bs=1024 count=512 | growisofs -Z /dev/xxx=/dev/fd/0

  Then, try to mount the device, if it cannot be mounted, it will be considered as blank by Bacula, if it can be mounted, try a full blank (see below).

- If you wish to blank completely a DVD+/-RW, use the following:

        growisofs -Z /dev/xxx=/dev/zero

  where you replace xxx with your DVD device name. However, note that this blanks the whole DVD, which takes quite a long time (16 minutes on mine).
- DVD+RW and DVD-RW support only about 1000 overwrites (i.e. don't use the same medium for years if you don't want to have problems...).

  To write to the DVD the first time use:

        growisofs -Z /dev/xxx filename

  To add additional files (more parts use):

        growisofs -M /dev/xxx filename

  The option -use-the-force-luke=4gms was added in growisofs 5.20 to override growisofs' behavior of always checking for the 4GB limit. Normally, this option is recommended for all Linux 2.6.8 kernels or greater, since these newer kernels can handle writing more than 4GB. See below for more details on this subject.

- For more information about DVD writing, please look at the dvd+rw-tools homepage.

- According to bug #912, bscan cannot read multi-volume DVDs. This is on our TODO list, but unless someone submits a patch it is not likely to be done any time in the near future. (9 Sept 2007).