Hi
All,
I am
using Bacula 1.36.2:
Looking at the bacula console output, my daily differentials seem to be
referencing an old Full back up job. The line in question
reads.
Backup
Level: Differential, since=2005-08-15
01:05:02
I have
not been able to find the reason for this, but I have a hunch. The mail server
on our engineering network has been unable to relay or deliver mail for a while
now due to policy/political issues. Bacula does spit out a warning message at
the end of each job stating that the mail system terminated in
error.
Is it
possible that Bacula's Diff jobs are purposefully not referencing a "Good"
Full backup because of the mail warning?
Also,
is the special "Scratch" pool implemented in version 1.36.2, or is it on of the
features that is present in the documentation, but missing in the stable version
of the code?
Just
for completeness here is my bacula-dir.conf:
#
# 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.2 (28 February 2005) -- debian 3.1
#
# 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.
#
# 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.2 (28 February 2005) -- debian 3.1
#
# 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 = jet-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 1
Password = "XXXXXXXXXXXX" # Console password
Messages = Daemon
}
Name = jet-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 1
Password = "XXXXXXXXXXXX" # Console password
Messages = Daemon
}
JobDefs {
Name = "DefaultJob"
Type = Backup
Client = jet-fd
FileSet = "ALL"
Storage = TAPE
Messages = Standard
Pool = Default
Full Backup Pool = "Full"
Differential Backup Pool = "Diff"
Priority = 10
}
Name = "DefaultJob"
Type = Backup
Client = jet-fd
FileSet = "ALL"
Storage = TAPE
Messages = Standard
Pool = Default
Full Backup Pool = "Full"
Differential Backup Pool = "Diff"
Priority = 10
}
#
# Define the main nightly save backup job
# By default, this job will back up to disk in /tmp
Job {
Name = "WeeklyFull"
Level = Full
JobDefs = "DefaultJob"
FileSet = "ALL"
Schedule = "Weekly"
# RunBeforeJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Pool = "Full"
# RunAfterJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Write Bootstrap = "/var/lib/bacula/WeeklyFull.bsr"
}
Job {
Name = "DailyDiff"
Level = Differential
JobDefs = "DefaultJob"
FileSet = "ALL"
Schedule = "WeekDays"
# RunBeforeJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Pool = "Diff"
# RunAfterJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Write Bootstrap = "/var/lib/bacula/DailyDiff.bsr"
}
Name = "DailyDiff"
Level = Differential
JobDefs = "DefaultJob"
FileSet = "ALL"
Schedule = "WeekDays"
# RunBeforeJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Pool = "Diff"
# RunAfterJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Write Bootstrap = "/var/lib/bacula/DailyDiff.bsr"
}
# Backup the catalog database (after the nightly save)
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Storage = "TAPE"
Schedule = "WeeklyCycleAfterBackup"
# RunBeforeJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
# This creates an ASCII copy of the catalog
RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup -u<user> -p<password>"
# This deletes the copy of the catalog
RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup"
# RunAfterJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Full Backup Pool = "Catalog"
Pool = "Catalog"
Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr"
Priority = 11 # run after main backup
}
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Storage = "TAPE"
Schedule = "WeeklyCycleAfterBackup"
# RunBeforeJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
# This creates an ASCII copy of the catalog
RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup -u<user> -p<password>"
# This deletes the copy of the catalog
RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup"
# RunAfterJob = "/etc/bacula/scripts/mtx-changer /dev/sg1 unload"
Full Backup Pool = "Catalog"
Pool = "Catalog"
Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr"
Priority = 11 # run after main backup
}
# Standard Restore template, to be changed by Console program
Job {
Name = "RestoreFiles"
Type = Restore
Client=jet-fd
FileSet="ALL"
Storage = TAPE
Pool = "Full"
Messages = Standard
Where = /tmp/bacula-restores
}
Job {
Name = "RestoreFiles"
Type = Restore
Client=jet-fd
FileSet="ALL"
Storage = TAPE
Pool = "Full"
Messages = Standard
Where = /tmp/bacula-restores
}
### Block Added by Silas on 08-05-2005 ###
FileSet {
Name = "Raid"
Include {
Options {
signature = MD5
aclsupport = yes
}
FileSet {
Name = "Raid"
Include {
Options {
signature = MD5
aclsupport = yes
}
File = /home
}
}
}
}
FileSet {
Name = "Var"
Include {
Options {
signature = MD5
aclsupport = yes
}
Name = "Var"
Include {
Options {
signature = MD5
aclsupport = yes
}
File = /var
}
}
}
}
FileSet {
Name = "Boot"
Include {
Options {
signature = MD5
aclsupport = yes
}
Name = "Boot"
Include {
Options {
signature = MD5
aclsupport = yes
}
File = /boot
}
}
}
}
FileSet {
Name = "Root"
Include {
Options {
signature = MD5
aclsupport = yes
}
Name = "Root"
Include {
Options {
signature = MD5
aclsupport = yes
}
File = /
}
}
Exclude {
File = /proc
File = /sys
File = /tmp
}
}
File = /proc
File = /sys
File = /tmp
}
}
FileSet {
Name = "ALL"
Include {
Options {
signature = MD5
aclsupport = yes
}
Name = "ALL"
Include {
Options {
signature = MD5
aclsupport = yes
}
File = /
File = /home
File = /var
File = /boot
}
File = /home
File = /var
File = /boot
}
Exclude {
File = /proc
File = /sys
File = /tmp
}
}
##########################################
File = /proc
File = /sys
File = /tmp
}
}
##########################################
# This is the backup of the catalog
FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = /var/lib/bacula/bacula.sql
}
}
#
# 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 fri at 1:05
Run = Differential mon-thu at 1:05
}
Schedule {
Name = "Weekly"
Run = Full sat at 1:05
}
Name = "Weekly"
Run = Full sat at 1:05
}
Schedule {
Name = "WeekDays"
Run = Differential tue-fri at 1:05
}
Name = "WeekDays"
Run = Differential tue-fri at 1:05
}
# This schedule does the catalog. It starts after the
WeeklyCycle
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full tue-sat at 1:10
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full tue-sat at 1:10
}
# Client (File Services) to backup
Client {
Name = jet-fd
Address = jet
FDPort = 9102
Catalog = MyCatalog
Password = "XXXXXXXXXXXX" # password for FileDaemon
File Retention = 6 months # 30 days
Job Retention = 6 months # 6 months
AutoPrune = yes # Prune expired Jobs/Files
}
Client {
Name = jet-fd
Address = jet
FDPort = 9102
Catalog = MyCatalog
Password = "XXXXXXXXXXXX" # password for FileDaemon
File Retention = 6 months # 30 days
Job Retention = 6 months # 6 months
AutoPrune = yes # Prune expired Jobs/Files
}
# Definiton of file storage device
Storage {
Name = TAPE
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Quantum-SDLT
Media Type = SDLT
Autochanger = yes
}
Storage {
Name = TAPE
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Quantum-SDLT
Media Type = SDLT
Autochanger = yes
}
Storage {
Name = DVD
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Pioneer-DVD-RW
Media Type = DVD-R
}
Name = DVD
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Pioneer-DVD-RW
Media Type = DVD-R
}
Storage {
Name = RAID-DISK
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Raid
Media Type = FILE
}
Name = RAID-DISK
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Raid
Media Type = FILE
}
Storage {
Name = DISK
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Disk
Media Type = FILE
}
Name = DISK
Address = jet # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXX"
Device = Disk
Media Type = FILE
}
# Generic catalog service
Catalog {
Name = MyCatalog
dbname = bacula; password = "@db_pswd@"
}
# 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 = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/lib/bacula/bsmtp -h localhost -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 = "/var/lib/bacula/log" = all, !skipped
}
# 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 = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/lib/bacula/bsmtp -h localhost -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 = "/var/lib/bacula/log" = all, !skipped
}
#
# Message delivery for daemon messages (no job).
Messages {
Name = Daemon
mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
mail = [EMAIL PROTECTED] = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}
### Block added by Silas on 08-05-2005 ###
Pool {
Name = Full
# Media Type = SDLT
Pool Type = Backup
Recycle = no # Bacula can automatically recycle Volumes
AutoPrune = no # Prune expired volumes
Volume Retention = 365 days # one year
Accept Any Volume = yes # write on any volume in the pool
# Label Format = "Full-"
Label Format = "Full_${NumVols}_${Month:p/2/0/r}-${Day:p/2/0/r}-${Year}"
}
Pool {
Name = Diff
# Media Type = SDLT
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 14 days # one year
Recycle Current Volume = yes
Accept Any Volume = no # Write on volume in the pool in sequencial order
# Label Format = "Diff-"
Label Format = "Diff_${NumVols}_${Month:p/2/0/r}-${Day:p/2/0/r}-${Year}"
}
Name = Diff
# Media Type = SDLT
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 14 days # one year
Recycle Current Volume = yes
Accept Any Volume = no # Write on volume in the pool in sequencial order
# Label Format = "Diff-"
Label Format = "Diff_${NumVols}_${Month:p/2/0/r}-${Day:p/2/0/r}-${Year}"
}
Pool {
Name = Catalog
# Media Type = SDLT
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Recycle Current Volume = yes
Accept Any Volume = no # Write on volume in the pool in sequencial order
# Label Format = "Catalog-"
Label Format = "Catalog_${NumVols}_${Month:p/2/0/r}-${Day:p/2/0/r}-${Year}"
}
Name = Catalog
# Media Type = SDLT
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Recycle Current Volume = yes
Accept Any Volume = no # Write on volume in the pool in sequencial order
# Label Format = "Catalog-"
Label Format = "Catalog_${NumVols}_${Month:p/2/0/r}-${Day:p/2/0/r}-${Year}"
}
Pool {
Name = Scratch
# Media Type = SDLT
Pool Type = Backup
}
Name = Scratch
# Media Type = SDLT
Pool Type = Backup
}
Pool {
Name = Raid
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Accept Any Volume = yes # write on any volume in the pool
}
Name = Raid
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Accept Any Volume = yes # write on any volume in the pool
}
##########################################
# Default pool definition
Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Accept Any Volume = yes # write on any volume in the pool
}
#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
Name = jet-mon
Password = "XXXXXXXXXXXX"
CommandACL = status, .status
}
# Restricted console used by tray-monitor to get the status of the director
#
Console {
Name = jet-mon
Password = "XXXXXXXXXXXX"
CommandACL = status, .status
}