Hello,
We would like to use Bacula for archiving data. A problem that we're trying
to solve is how to prevent Bacula from recycling a volume in case a
migration job fails. The scenario we're concerned about is as follows:
Auto-recycling is on
1. TestBackupJob runs
2. TestArchiveJob runs and fails (this is the migration job)
3. During subsequent TestBackupJob runs, Bacula recycles the volume due to a
retention period expiration and we lose data
So far we've come up with the following scheme to prevent the aforementioned
from happening:
Auto-recycling is off.
1. TestBackupJob runs
2. TestArchiveJob runs and executes an external script that selects all
volumes that have all of their jobs in Migration status and purges, then
deletes those volumes
3. During the next TestBackupJob run, Bacula creates a new volume and uses
it
Another approach that we've been discussing is to run an external command
that would set the retention period to infinite on a migration job failure.
We are wondering if this is the best way to ensure we wont lose data in case
of a migration job failure.
Here is how our test system is set up:
** Bacula config **
Pool {
Name = TestBackupPool
Storage = File
Pool Type = Backup
Recycle = no
AutoPrune = yes
Volume Use Duration = 60 seconds
LabelFormat = TestBackupVol
Next Pool = TestArchivePool
Migration Time = 60 seconds
}
Pool {
Name = TestArchivePool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Storage = Archive
LabelFormat = ArchiveVol
}
Job {
Name = TestBackupJob
Type = Backup
Level = Full
Client = testclient-fd
FileSet = TestBackupFileset
Schedule = TestBackupSchedule
Storage = File
Pool = TestBackupPool
Messages = NoEmail
Maximum Concurrent Jobs = 10
}
Job {
Name = TestArchiveJob
Type = migrate
Level = Full
Client = testclient-fd
FileSet = TestBackupFileset
Schedule = TestArchiveSchedule
Storage = Archive
Pool = TestBackupPool
Messages = NoEmail
Selection Type = PoolTime
Maximum Concurrent Jobs = 10
Priority = 8
RunAfterJob = "/bin/bash /etc/bacula/scripts/DeleteMigratedVol.sh"
}
#TestBackupSchedule executes a job every 60 seconds.
#TestArchiveSchedule executes a job every 120 seconds.
** End bacula config **
Contents of DeleteMigratedVol.sh:
#!/bin/bash
mysqlbin='/usr/bin/mysql'
username='bacula'
database='bacula'
password='edited'
dboptions='--skip-column-names'
bconsolebin='/usr/sbin/bconsole'
voldisklocation='/opt/bacula/backup'
volumeNames=$($mysqlbin -u $username -p$password $database $dboptions<<EOQ
SELECT DISTINCT m.VolumeName, j.Type
FROM Media m
JOIN JobMedia jm
ON jm.MediaId=m.MediaId
JOIN Job j
ON j.JobId=jm.JobId
WHERE j.TYPE = 'M'
AND m.VolumeName NOT IN (
SELECT m2.VolumeName
FROM Media m2
JOIN JobMedia jm2
ON jm2.MediaId=m2.MediaId
JOIN Job j2
ON j2.JobId=jm2.JobId
WHERE j.TYPE != 'M'
);
EOQ)
for i in $volumeNames;
do $bconsolebin <<EOF
purge volume=$i yes
delete volume=$i yes
quit
EOF
/bin/rm -fv $voldisklocation/$i
done
**End /etc/bacula/scripts/DeleteMigratedVol.sh**
Thank you,
Greg
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users