--- /dev/null
+#
+# 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.39
+#
+# 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 = @hostname@-dir
+ DIRPort = @dirport@ # where we listen for UA connections
+ QueryFile = "@scriptdir@/query.sql"
+ WorkingDirectory = "@working_dir@"
+ PidDirectory = "@piddir@"
+ Maximum Concurrent Jobs = 4
+ Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3"
+ Messages = Daemon
+}
+
+#
+# Define the main nightly save backup job
+# By default, this job will back up to disk in @tmpdir@
+Job {
+ Name = "NightlySave"
+ Type = Backup
+ Client=@hostname@-fd
+ FileSet="Full Set"
+ Storage = DiskChanger
+ Messages = Standard
+ Pool = Default
+ Write Bootstrap = "@working_dir@/NightlySave.bsr"
+ Maximum Concurrent Jobs = 4
+ SpoolData = yes
+# Prefer Mounted Volumes = no
+}
+
+
+# Standard Restore template, to be changed by Console program
+Job {
+ Name = "RestoreFiles"
+ Type = Restore
+ Client=@hostname@-fd
+ FileSet="Full Set"
+ Storage = DiskChanger
+ Messages = Standard
+ Pool = Default
+ Where = @tmpdir@/bacula-restores
+}
+
+
+# List of files to be backed up
+FileSet {
+ Name = "Full Set"
+ Include { Options { signature=MD5 }
+ File = <@tmpdir@/file-list
+ }
+}
+
+
+#
+# When to do the backups, full backup on first sunday of the month,
+# differential (i.e. incremental since full) every other sunday,
+# and incremental backups other days
+Schedule {
+ Name = "WeeklyCycle"
+ Run = Full 1st sun at 1:05
+ Run = Differential 2nd-5th sun at 1:05
+ Run = Incremental mon-sat at 1:05
+}
+
+# Client (File Services) to backup
+Client {
+ Name = @hostname@-fd
+ Address = @hostname@
+ FDPort = @fdport@
+ Catalog = MyCatalog
+ Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc" # password for FileDaemon
+ File Retention = 30d # 30 days
+ Job Retention = 180d # six months
+ AutoPrune = yes # Prune expired Jobs/Files
+ Maximum Concurrent Jobs = 4
+}
+
+# Definition of DDS Virtual tape disk storage device
+Storage {
+ Name = DiskChanger
+ Address = @hostname@ # N.B. Use a fully qualified name here
+ SDPort = @sdport@
+ Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9" # password for Storage daemon
+ Device = DiskChanger # must be same as Device in Storage daemon
+ Media Type = DiskChangerMedia # must be same as MediaType in Storage daemon
+ Maximum Concurrent Jobs = 4
+ Autochanger = yes
+}
+
+# Definition of file storage device
+Storage {
+ Name = File
+ Address = @hostname@
+ SDPort = @sdport@
+ Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9" # password for Storage daemon
+ Device = FileStorage
+ Media Type = File
+ Maximum Concurrent Jobs = 5
+}
+
+
+# Generic catalog service
+Catalog {
+ Name = MyCatalog
+ @libdbi@
+ dbname = @db_name@; user = @db_user@; password = "@db_password@"
+}
+
+# Reasonable message delivery -- send most everything to email address
+# and to the console
+Messages {
+ Name = Standard
+ mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula regression Job %j\) %r\" -s \"Regression: %t %e of %c %l\" %r"
+ operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula regression Job %j\) %r\" -s \"Regression: Intervention needed for %j\" %r"
+# MailOnError = @job_email@ = all, !terminate
+# operator = @job_email@ = mount
+ console = all, !skipped, !terminate, !restored
+#
+# 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 the scroll off the console.
+#
+ append = "@working_dir@/log" = all, !skipped
+ catalog = all, !skipped
+}
+
+#
+# Message delivery for daemon messages (no job).
+Messages {
+ Name = Daemon
+ mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula regression\) %r\" -s \"Regression daemon message\" %r"
+# mail = @job_email@ = all, !skipped
+ console = all, !skipped, !saved
+ append = "@working_dir@/log" = all, !skipped
+ catalog = 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 = 365d # one year
+ NextPool = Full
+}
+
+Pool {
+ Name = Full
+ Pool Type = Backup
+ Recycle = yes # Bacula can automatically recycle Volumes
+ AutoPrune = yes # Prune expired volumes
+ Volume Retention = 365d # one year
+ Storage = DiskChanger
+}
--- /dev/null
+#
+# Default Bacula Storage Daemon Configuration file
+#
+# For Bacula release 1.39
+#
+# 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 = @hostname@-sd
+ SDPort = @sdport@ # Director's port
+ WorkingDirectory = "@working_dir@"
+ Pid Directory = "@piddir@"
+ Subsys Directory = "@subsysdir@"
+}
+
+#
+# List Directors who are permitted to contact Storage daemon
+#
+Director {
+ Name = @hostname@-dir
+ Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
+}
+
+#
+# Devices supported by this Storage daemon
+# To connect, the Director's bacula-dir.conf must have the
+# same Name and MediaType.
+#
+Autochanger {
+ Name = DiskChanger
+ Changer Device = @disk_drive@/conf
+ Changer Command ="@scriptdir@/disk-changer %c %o %S %a %d"
+ Device = Drive-0, Drive-1
+}
+
+Device {
+ Name = Drive-0 #
+ Device Type = File
+ Media Type = DiskChangerMedia
+ Archive Device = @disk_drive@/drive0
+ AutomaticMount = yes; # when device opened, read it
+ Autochanger = yes
+ Drive Index = 0
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+# Maximum File Size = 1000000
+}
+
+Device {
+ Name = Drive-1 #
+ Device Type = File
+ Media Type = DiskChangerMedia
+ Archive Device = @disk_drive@/drive1
+ AutomaticMount = yes; # when device opened, read it
+ Autochanger = yes
+ Drive Index = 1
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+# Maximum File Size = 1000000
+}
+
+
+Device {
+ Name = FileStorage
+ Media Type = File
+ Archive Device = @tmpdir@
+ LabelMedia = yes; # lets Bacula label unlabeled media
+ Random Access = Yes;
+ AutomaticMount = yes; # when device opened, read it
+ RemovableMedia = no;
+ AlwaysOpen = no;
+}
+
+#
+# Send all messages to the Director,
+# mount messages also are sent to the email address
+#
+Messages {
+ Name = Standard
+ director = @hostname@-dir = all, !terminate
+}
--- /dev/null
+#!/bin/sh
+#
+# Setup for using the Virtual Disk Changer (simulates tape changer)
+#
+/bin/cp -f scripts/bacula-dir-virtual.conf bin/bacula-dir.conf
+/bin/cp -f scripts/bacula-sd-virtual.conf bin/bacula-sd.conf
+/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf
+/bin/cp -f scripts/test-console.conf bin/bconsole.conf
sed -f ${out} ${cwd}/scripts/bacula-dir-fifo.conf.in >${cwd}/scripts/bacula-dir-fifo.conf
sed -f ${out} ${cwd}/scripts/bacula-dir-strip.conf.in >${cwd}/scripts/bacula-dir-strip.conf
sed -f ${out} ${cwd}/scripts/bacula-dir-migration.conf.in >${cwd}/scripts/bacula-dir-migration.conf
+sed -f ${out} ${cwd}/scripts/bacula-dir-virtual.conf.in >${cwd}/scripts/bacula-dir-virtual.conf
sed -f ${out} ${cwd}/scripts/win32-bacula-dir-tape.conf.in >${cwd}/scripts/win32-bacula-dir-tape.conf
sed -f ${out} ${cwd}/scripts/win32-bacula-dir.conf.in >${cwd}/scripts/win32-bacula-dir.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-tape.conf.in >${cwd}/scripts/bacula-sd-tape.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-fifo.conf.in >${cwd}/scripts/bacula-sd-fifo.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-2tape.conf.in >${cwd}/scripts/bacula-sd-2tape.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-migration.conf.in >${cwd}/scripts/bacula-sd-migration.conf
+sed -f ${out} ${cwd}/scripts/bacula-sd-virtual.conf.in >${cwd}/scripts/bacula-sd-virtual.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-2disk.conf.in >${cwd}/scripts/bacula-sd-2disk.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-2drive.conf.in >${cwd}/scripts/bacula-sd-2drive.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-2disk-drive.conf.in >${cwd}/scripts/bacula-sd-2disk-drive.conf
scripts/cleanup
-scripts/copy-migration-confs
+scripts/copy-virtual-confs
scripts/prepare-disk-changer
echo "${cwd}/build" >${cwd}/tmp/file-list
messages
@$out ${cwd}/tmp/log1.out
setdebug level=150 storage=DiskChanger
-label storage=DiskChanger volume=ChangerVolume001 slot=1 Pool=Full drive=0
+label storage=DiskChanger volume=ChangerVolume001 slot=1 Pool=Default drive=0
label storage=DiskChanger volume=ChangerVolume002 slot=2 Pool=Full drive=0
label storage=DiskChanger volume=ChangerVolume003 slot=3 Pool=Full drive=0
setdebug level=0 storage=DiskChanger
@# run several jobs
-run job=$JobName level=Full yes
+@exec "sh -c 'date > ${cwd}/build/date'"
+run job=$JobName level=Full storage=DiskChanger yes
wait
messages
list jobs
wait
messages
list jobs
+@exec "sh -c 'date > ${cwd}/build/date'"
@exec "sh -c 'touch ${cwd}/build/src/dird/*.o'"
run job=$JobName level=Incremental storage=DiskChanger yes
wait
mark *
done
yes
+wait
list volumes
@#setdebug level=100 dir
-@# should Consolidate Full, Differential and Incremental
-@#setdebug level=51 storage=DiskChanger
+@#
+@# Now do a Virtual backup
+@#
+setdebug level=151 storage=DiskChanger
run job=$JobName level=VirtualFull storage=DiskChanger yes
wait
messages
list volumes
list jobs
@#
-@# now do a restore
+@# now do a restore of the Virtual backup
@#
@$out ${cwd}/tmp/log2.out
restore where=${cwd}/tmp/bacula-restores select storage=DiskChanger
done
yes
wait
+@# Move Volume to Default pool
update Volume=ChangerVolume002
11
Default
list jobs
messages
@exec "sh -c 'touch ${cwd}/build/src/dird/*.o'"
+@#
+@# Do an incremental on top of the Virtual Full
+@#
run job=$JobName level=Incremental storage=DiskChanger yes
wait
messages
list jobs
list volumes
+@#
@# Now do another Consolidation
+@#
setdebug level=150 storage=DiskChanger
run job=$JobName level=VirtualFull storage=DiskChanger yes
wait
list volumes
list jobs
@#
-@# now do a restore
+@# now do a restore should restore from new Virtual backup
@#
@$out ${cwd}/tmp/log2.out
setdebug level=0 storage=DiskChanger
END_OF_DATA
run_bacula
-check_for_zombie_jobs storage=File
+check_for_zombie_jobs storage=DiskChanger
stop_bacula
check_two_logs