4
\chapter{Backup Strategies}
5
\label{StrategiesChapter}
6
\index[general]{Strategies!Backup }
7
\index[general]{Backup Strategies }
9
Although Recycling and Backing Up to Disk Volume have been discussed in
10
previous chapters, this chapter is meant to give you an overall view of
11
possible backup strategies and to explain their advantages and disadvantages.
14
\section{Simple One Tape Backup}
15
\index[general]{Backup!Simple One Tape }
16
\index[general]{Simple One Tape Backup }
18
Probably the simplest strategy is to back everything up to a single tape and
19
insert a new (or recycled) tape when it fills and Bacula requests a new one.
21
\subsection{Advantages}
22
\index[general]{Advantages }
25
\item The operator intervenes only when a tape change is needed. (once a
27
\item There is little chance of operator error because the tape is not
29
\item A minimum number of tapes will be needed for a full restore. Typically
30
the best case will be one tape and worst two.
31
\item You can easily arrange for the Full backup to occur a different night
32
of the month for each system, thus load balancing and shortening the backup
36
\subsection{Disadvantages}
37
\index[general]{Disadvantages }
40
\item If your site burns down, you will lose your current backups, and in my
41
case about a month of data.
42
\item After a tape fills and you have put in a blank tape, the backup will
43
continue, and this will generally happen during working hours.
46
\subsection{Practical Details}
47
\index[general]{Details!Practical }
48
\index[general]{Practical Details }
50
This system is very simple. When the tape fills and Bacula requests a new
51
tape, you {\bf unmount} the tape from the Console program, insert a new tape
52
and {\bf label} it. In most cases after the label, Bacula will automatically
53
mount the tape and resume the backup. Otherwise, you simply {\bf mount} the
56
Using this strategy, one typically does a Full backup once a week followed by
57
daily Incremental backups. To minimize the amount of data written to the tape,
58
one can do a Full backup once a month on the first Sunday of the
59
month, a Differential backup on the 2nd-5th Sunday of the month, and
60
incremental backups the rest of the week.
63
\section{Manually Changing Tapes}
64
\index[general]{Tapes!Manually Changing }
65
\index[general]{Manually Changing Tapes }
67
If you use the strategy presented above, Bacula will ask you to change the
68
tape, and you will {\bf unmount} it and then remount it when you have inserted
71
If you do not wish to interact with Bacula to change each tape, there are
72
several ways to get Bacula to release the tape:
75
\item In your Storage daemon's Device resource, set
77
In this case, Bacula will release the tape after every job. If you run
78
several jobs, the tape will be rewound and repositioned to the end at the
79
beginning of every job. This is not very efficient, but does let you change
80
the tape whenever you want.
81
\item Use a {\bf RunAfterJob} statement to run a script after your last job.
82
This could also be an {\bf Admin} job that runs after all your backup jobs.
83
The script could be something like:
88
/full-path/bconsole -c /full-path/bconsole.conf <<END_OF_DATA
89
release storage=your-storage-name
95
In this example, you would have {\bf AlwaysOpen=yes}, but the {\bf release}
96
command would tell Bacula to rewind the tape and on the next job assume the
97
tape has changed. This strategy may not work on some systems, or on
98
autochangers because Bacula will still keep the drive open.
99
\item The final strategy is similar to the previous case except that you
100
would use the unmount command to force Bacula to release the drive. Then you
101
would eject the tape, and remount it as follows:
106
/full-path/bconsole -c /full-path/bconsole.conf <\<END_OF_DATA
107
unmount storage=your-storage-name
109
# the following is a shell command
111
/full-path/bconsole -c /full-path/bconsole.conf <<END_OF_DATA
112
mount storage=your-storage-name
122
\section{Daily Tape Rotation}
123
\index[general]{Rotation!Daily Tape }
124
\index[general]{Daily Tape Rotation }
126
This scheme is quite different from the one mentioned above in that a Full
127
backup is done to a different tape every day of the week. Generally, the
128
backup will cycle continuously through five or six tapes each week. Variations are
129
to use a different tape each Friday, and possibly at the beginning of the
130
month. Thus if backups are done Monday through Friday only, you need only five
131
tapes, and by having two Friday tapes, you need a total of six tapes. Many sites
132
run this way, or using modifications of it based on two week cycles or longer.
135
\subsection{Advantages}
136
\index[general]{Advantages }
139
\item All the data is stored on a single tape, so recoveries are simple and
141
\item Assuming the previous day's tape is taken offsite each day, a maximum
142
of one days data will be lost if the site burns down.
145
\subsection{Disadvantages}
146
\index[general]{Disadvantages }
149
\item The tape must be changed every day requiring a lot of operator
151
\item More errors will occur because of human mistakes.
152
\item If the wrong tape is inadvertently mounted, the Backup for that day
153
will not occur exposing the system to data loss.
154
\item There is much more movement of the tape each day (rewinds) leading to
155
shorter tape drive life time.
156
\item Initial setup of Bacula to run in this mode is more complicated than
157
the Single tape system described above.
158
\item Depending on the number of systems you have and their data capacity, it
159
may not be possible to do a Full backup every night for time reasons or
160
reasons of tape capacity.
163
\subsection{Practical Details}
164
\index[general]{Details!Practical }
165
\index[general]{Practical Details }
167
The simplest way to "force" Bacula to use a different tape each day is to
168
define a different Pool for each day of the the week a backup is done. In
169
addition, you will need to specify appropriate Job and File retention periods
170
so that Bacula will relabel and overwrite the tape each week rather than
171
appending to it. Nic Bellamy has supplied an actual working model of this
172
which we include here.
174
What is important is to create a different Pool for each day of the week, and
175
on the {\bf run} statement in the Schedule, to specify which Pool is to be
176
used. He has one Schedule that accomplishes this, and a second Schedule that
177
does the same thing for the Catalog backup run each day after the main backup
178
(Priorities were not available when this script was written). In addition, he
179
uses a {\bf Max Start Delay} of 22 hours so that if the wrong tape is
180
premounted by the operator, the job will be automatically canceled, and the
181
backup cycle will re-synchronize the next day. He has named his Friday Pool
182
{\bf WeeklyPool} because in that Pool, he wishes to have several tapes to be
183
able to restore to a time older than one week.
185
And finally, in his Storage daemon's Device resource, he has {\bf Automatic
186
Mount = yes} and {\bf Always Open = No}. This is necessary for the tape
187
ejection to work in his {\bf end\_of\_backup.sh} script below.
189
For example, his bacula-dir.conf file looks like the following:
194
# /etc/bacula/bacula-dir.conf
196
# Bacula Director Configuration file
201
QueryFile = "/etc/bacula/query.sql"
202
WorkingDirectory = "/var/lib/bacula"
203
PidDirectory = "/var/run"
204
SubSysDirectory = "/var/lock/subsys"
205
Maximum Concurrent Jobs = 1
206
Password = "console-pass"
210
# Define the main nightly save backup job
217
Schedule = "WeeklyCycle"
221
Write Bootstrap = "/var/lib/bacula/NightlySave.bsr"
222
Max Start Delay = 22h
224
# Backup the catalog database (after the nightly save)
226
Name = "BackupCatalog"
230
Schedule = "WeeklyCycleAfterBackup"
234
# This creates an ASCII copy of the catalog
235
# WARNING!!! Passing the password via the command line is insecure.
236
# see comments in make_catalog_backup for details.
237
RunBeforeJob = "/usr/lib/bacula/make_catalog_backup -u bacula"
238
# This deletes the copy of the catalog, and ejects the tape
239
RunAfterJob = "/etc/bacula/end_of_backup.sh"
240
Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr"
241
Max Start Delay = 22h
243
# Standard Restore template, changed by Console program
245
Name = "RestoreFiles"
252
Where = /tmp/bacula-restores
254
# List of files to be backed up
257
Include = signature=MD5 {
261
Exclude = { /proc /tmp /.journal }
264
# When to do the backups
268
Run = Level=Full Pool=MondayPool Monday at 8:00pm
269
Run = Level=Full Pool=TuesdayPool Tuesday at 8:00pm
270
Run = Level=Full Pool=WednesdayPool Wednesday at 8:00pm
271
Run = Level=Full Pool=ThursdayPool Thursday at 8:00pm
272
Run = Level=Full Pool=WeeklyPool Friday at 8:00pm
274
# This does the catalog. It starts after the WeeklyCycle
276
Name = "WeeklyCycleAfterBackup"
277
Run = Level=Full Pool=MondayPool Monday at 8:15pm
278
Run = Level=Full Pool=TuesdayPool Tuesday at 8:15pm
279
Run = Level=Full Pool=WednesdayPool Wednesday at 8:15pm
280
Run = Level=Full Pool=ThursdayPool Thursday at 8:15pm
281
Run = Level=Full Pool=WeeklyPool Friday at 8:15pm
283
# This is the backup of the catalog
286
Include = signature=MD5 {
287
/var/lib/bacula/bacula.sql
290
# Client (File Services) to backup
296
Password = "client-pass"
301
# Definition of file storage device
306
Password = "storage-pass"
310
# Generic catalog service
313
dbname = bacula; user = bacula; password = ""
315
# Reasonable message delivery -- send almost all to email address
319
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) %r\"
320
-s \"Bacula: %t %e of %c %l\" %r"
321
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) %r\"
322
-s \"Bacula: Intervention needed for %j\" %r"
323
mail = root@localhost = all, !skipped
324
operator = root@localhost = mount
325
console = all, !skipped, !saved
326
append = "/var/lib/bacula/log" = all, !skipped
331
# Default Pool for jobs, but will hold no actual volumes
341
Volume Retention = 6d
342
Maximum Volume Jobs = 2
349
Volume Retention = 6d
350
Maximum Volume Jobs = 2
357
Volume Retention = 6d
358
Maximum Volume Jobs = 2
365
Volume Retention = 6d
366
Maximum Volume Jobs = 2
373
Volume Retention = 12d
374
Maximum Volume Jobs = 2
380
Note, the mailcommand and operatorcommand should be on a single line each.
381
They were split to preserve the proper page width. In order to get Bacula to
382
release the tape after the nightly backup, he uses a {\bf RunAfterJob} script
383
that deletes the ASCII copy of the database back and then rewinds and ejects
384
the tape. The following is a copy of {\bf end\_of\_backup.sh}
389
/usr/lib/bacula/delete_catalog_backup
396
Finally, if you list his Volumes, you get something like the following:
401
Using default Catalog name=MyCatalog DB=bacula
403
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
404
| MeId| VolumeName| MedTyp| VolStat| VolBytes | LastWritten | VolRet| Recyc|
405
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
406
| 5 | Friday_1 | MLR1 | Used | 2157171998| 2003-07-11 20:20| 103680| 1 |
407
| 6 | Friday_2 | MLR1 | Append | 0 | 0 | 103680| 1 |
408
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
410
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
411
| MeId| VolumeName| MedTyp| VolStat| VolBytes | LastWritten | VolRet| Recyc|
412
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
413
| 2 | Monday | MLR1 | Used | 2260942092| 2003-07-14 20:20| 518400| 1 |
414
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
416
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
417
| MeId| VolumeName| MedTyp| VolStat| VolBytes | LastWritten | VolRet| Recyc|
418
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
419
| 3 | Tuesday | MLR1 | Used | 2268180300| 2003-07-15 20:20| 518400| 1 |
420
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
422
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
423
| MeId| VolumeName| MedTyp| VolStat| VolBytes | LastWritten | VolRet| Recyc|
424
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
425
| 4 | Wednesday | MLR1 | Used | 2138871127| 2003-07-09 20:2 | 518400| 1 |
426
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
428
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
429
| MeId| VolumeName| MedTyp| VolStat| VolBytes | LastWritten | VolRet| Recyc|
430
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
431
| 1 | Thursday | MLR1 | Used | 2146276461| 2003-07-10 20:50| 518400| 1 |
432
+-----+-----------+-------+--------+-----------+-----------------+-------+------+
438
Note, I have truncated a number of the columns so that the information fits on