Skip to content

Latest commit

 

History

History
809 lines (592 loc) · 29.6 KB

recycling.rst

File metadata and controls

809 lines (592 loc) · 29.6 KB

Automatic Volume Recycling

pair: Recycle; Automatic Volume

triple: Volume; Recycle; Automatic;

By default, once Bareos starts writing a Volume, it can append to the volume, but it will not overwrite the existing data thus destroying it. However when Bareos recycles a Volume, the Volume becomes available for being reused and Bareos can at some later time overwrite the previous contents of that Volume. Thus all previous data will be lost. If the Volume is a tape, the tape will be rewritten from the beginning. If the Volume is a disk file, the file will be truncated before being rewritten.

You may not want Bareos to automatically recycle (reuse) tapes. This would require a large number of tapes though, and in such a case, it is possible to manually recycle tapes. For more on manual recycling, see the manualrecycling chapter.

Most people prefer to have a Pool of tapes that are used for daily backups and recycled once a week, another Pool of tapes that are used for Full backups once a week and recycled monthly, and finally a Pool of tapes that are used once a month and recycled after a year or two. With a scheme like this, the number of tapes in your pool or pools remains constant.

By properly defining your Volume Pools with appropriate Retention periods, Bareos can manage the recycling (such as defined above) automatically.

Automatic recycling of Volumes is controlled by four records in the Dir Pool resource definition. These four records are:

  • Auto PruneDirPool = yes
  • linkResourceDirective{Dir}{Pool}{Volume Retention}

  • RecycleDirPool = yes
  • linkResourceDirective{Dir}{Pool}{Recycle Pool}

The above three directives are all you need assuming that you fill each of your Volumes then wait the Volume Retention period before reusing them. If you want Bareos to stop using a Volume and recycle it before it is full, you can use one or more additional directives such as:

  • linkResourceDirective{Dir}{Pool}{Volume Use Duration}

  • linkResourceDirective{Dir}{Pool}{Maximum Volume Jobs}

  • linkResourceDirective{Dir}{Pool}{Maximum Volume Bytes}

Please see below and the Basic Volume Management <DiskChapter> chapter of this manual for complete examples.

Automatic recycling of Volumes is performed by Bareos only when it wants a new Volume and no appendable Volumes are available in the Pool. It will then search the Pool for any Volumes with the Recycle flag set and the Volume Status is \volumestatus{Purged}. At that point, it will choose the oldest purged volume and recycle it.

If there are no volumes with status \volumestatus{Purged}, then the recycling occurs in two steps:

  1. The Catalog for a Volume must be pruned of all Jobs (i.e. Purged).
  2. The actual recycling of the Volume.

Only Volumes marked \volumestatus{Full} or \volumestatus{Used} will be considerd for pruning. The Volume will be purged if the \volumeparameter{Volume Retention}{} period has expired. When a Volume is marked as \volumestatus{Purged}, it means that no Catalog records reference that Volume and the Volume can be recycled.

Until recycling actually occurs, the Volume data remains intact. If no Volumes can be found for recycling for any of the reasons stated above, Bareos will request operator intervention (i.e. it will ask you to label a new volume).

A key point mentioned above, that can be a source of frustration, is that Bareos will only recycle purged Volumes if there is no other appendable Volume available. Otherwise, it will always write to an appendable Volume before recycling even if there are Volume marked as Purged. This preserves your data as long as possible. So, if you wish to \bquote{force} Bareos to use a purged Volume, you must first ensure that no other Volume in the Pool is marked Append. If necessary, you can manually set a volume to Full. The reason for this is that Bareos wants to preserve the data on your old tapes (even though purged from the catalog) as long as absolutely possible before overwriting it. There are also a number of directives such as \volumeparameter{Volume Use Duration}{} that will automatically mark a volume as \volumestatus{Used} and thus no longer appendable.

Automatic Pruning

pair: Automatic; Pruning

pair: Pruning; Automatic

As Bareos writes files to tape, it keeps a list of files, jobs, and volumes in a database called the catalog. Among other things, the database helps Bareos to decide which files to back up in an incremental or differential backup, and helps you locate files on past backups when you want to restore something. However, the catalog will grow larger and larger as time goes on, and eventually it can become unacceptably large.

Bareos’s process for removing entries from the catalog is called Pruning. The default is Automatic Pruning, which means that once an entry reaches a certain age (e.g. 30 days old) it is removed from the catalog. Note that Job records that are required for current restore and File records are needed for VirtualFull and Accurate backups won’t be removed automatically.

Once a job has been pruned, you can still restore it from the backup tape, but one additional step is required: scanning the volume with bscan.

The alternative to Automatic Pruning is Manual Pruning, in which you explicitly tell Bareos to erase the catalog entries for a volume. You’d usually do this when you want to reuse a Bareos volume, because there’s no point in keeping a list of files that USED TO BE on a tape. Or, if the catalog is starting to get too big, you could prune the oldest jobs to save space. Manual pruning is done with the prune command <ManualPruning> in the console.

Pruning Directives

pair: Pruning; Directives

There are three pruning durations. All apply to catalog database records and not to the actual data in a Volume. The pruning (or retention) durations are for: Volumes (Media records), Jobs (Job records), and Files (File records). The durations inter-depend because if Bareos prunes a Volume, it automatically removes all the Job records, and all the File records. Also when a Job record is pruned, all the File records for that Job are also pruned (deleted) from the catalog.

Having the File records in the database means that you can examine all the files backed up for a particular Job. They take the most space in the catalog (probably 90-95% of the total). When the File records are pruned, the Job records can remain, and you can still examine what Jobs ran, but not the details of the Files backed up. In addition, without the File records, you cannot use the Console restore command to restore the files.

When a Job record is pruned, the Volume (Media record) for that Job can still remain in the database, and if you do a list volumes, you will see the volume information, but the Job records (and its File records) will no longer be available.

In each case, pruning removes information about where older files are, but it also prevents the catalog from growing to be too large. You choose the retention periods in function of how many files you are backing up and the time periods you want to keep those records online, and the size of the database. It is possible to re-insert the records (with 98% of the original data) by using bscan to scan in a whole Volume or any part of the volume that you want.

By setting Auto PruneDirPool = yes you will permit the to automatically prune all Volumes in the Pool when a Job needs another Volume. Volume pruning means removing records from the catalog. It does not shrink the size of the Volume or affect the Volume data until the Volume gets overwritten. When a Job requests another volume and there are no Volumes with Volume status \volumestatus{Append} available, Bareos will begin volume pruning. This means that all Jobs that are older than the \volumeparameter{Volume Retention}{} period will be pruned from every Volume that has Volume status \volumestatus{Full} or \volumestatus{Used} and has \volumeparameter{Recycle}{yes}. Pruning consists of deleting the corresponding Job, File, and JobMedia records from the catalog database. No change to the physical data on the Volume occurs during the pruning process. When all files are pruned from a Volume (i.e. no records in the catalog), the Volume will be marked as \volumestatus{Purged} implying that no Jobs remain on the volume. The Pool records that control the pruning are described below.

begin{description}

item linkResourceDirective{Dir}{Pool}{Auto Prune} = yes:

when running a Job and it needs a new Volume but no appendable volumes are available, apply the Volume retention period. At that point, Bareos will prune all Volumes that can be pruned in an attempt to find a usable volume. If during the autoprune, all files are pruned from the Volume, it will be marked with Volume status volumestatus{Purged}.

Note, that although the File and Job records may be pruned from the catalog, a Volume will only be marked volumestatus{Purged} (and hence ready for recycling) if the Volume status is volumestatus{Append}, volumestatus{Full}, volumestatus{Used}, or volumestatus{Error}. If the Volume has another status, such as volumestatus{Archive}, volumestatus{Read-Only}, volumestatus{Disabled}, volumestatus{Busy} or volumestatus{Cleaning}, the Volume status will not be changed to volumestatus{Purged}.

item linkResourceDirective{Dir}{Pool}{Volume Retention}

defines the length of time that Bareos will guarantee that the Volume is not reused counting from the time the last job stored on the Volume terminated. A key point is that this time period is not even considered as long at the Volume remains appendable. The Volume Retention period count down begins only when the volumestatus{Append} status has been changed to some other status (volumestatus{Full}, volumestatus{Used}, volumestatus{Purged}, ...).

When this time period expires and if linkResourceDirective{Dir}{Pool}{Auto Prune} = yes and a new Volume is needed, but no appendable Volume is available, Bareos will prune (remove) Job records that are older than the specified volumeparameter{Volume Retention}{} period.

The volumeparameter{Volume Retention}{} period takes precedence over any linkResourceDirective{Dir}{Client}{Job Retention} period you have specified in the Client resource. It should also be noted, that the volumeparameter{Volume Retention}{} period is obtained by reading the Catalog Database Media record rather than the Pool resource record. This means that if you change the linkResourceDirective{Dir}{Pool}{Volume Retention} in the Pool resource record, you must ensure that the corresponding change is made in the catalog by using the bcommand{update}{pool} command. Doing so will insure that any new Volumes will be created with the changed volumeparameter{Volume Retention}{} period. Any existing Volumes will have their own copy of the volumeparameter{Volume Retention}{} period that can only be changed on a Volume by Volume basis using the bcommand{update}{volume} command.

When all file catalog entries are removed from the volume, its Volume status is set to volumestatus{Purged}. The files remain physically on the Volume until the volume is overwritten.

item linkResourceDirective{Dir}{Pool}{Recycle}

defines whether or not the particular Volume can be recycled (i.e. rewritten). If Recycle is set to parameter{no}, then even if Bareos prunes all the Jobs on the volume and it is marked volumestatus{Purged}, it will not consider the tape for recycling. If Recycle is set to parameter{yes} and all Jobs have been pruned, the volume status will be set to volumestatus{Purged} and the volume may then be reused when another volume is needed. If the volume is reused, it is relabeled with the same Volume Name, however all previous data will be lost.

end{description}

Recycling Algorithm

pair: Algorithm; Recycling

pair: Recycle; Algorithm

After all Volumes of a Pool have been pruned (as mentioned above, this happens when a Job needs a new Volume and no appendable Volumes are available), Bareos will look for the oldest Volume that is \volumestatus{Purged} (all Jobs and Files expired), and if the \volumeparameter{Recycle}{yes} for that Volume, Bareos will relabel it and write new data on it.

As mentioned above, there are two key points for getting a Volume to be recycled. First, the Volume must no longer be marked \volumestatus{Append} (there are a number of directives to automatically make this change), and second since the last write on the Volume, one or more of the Retention periods must have expired so that there are no more catalog backup job records that reference that Volume. Once both those conditions are satisfied, the volume can be marked \volumestatus{Purged} and hence recycled.

The full algorithm that Bareos uses when it needs a new Volume is: .. index:: single: New Volume Algorithm

pair: Algorithm; New Volume

The algorithm described below assumes that \configdirective{Auto Prune} is enabled, that Recycling is turned on, and that you have defined appropriate Retention periods or used the defaults for all these items.

  1. If the request is for an Autochanger device, look only for Volumes in the Autochanger (i.e. with InChanger set and that have the correct Storage device).
  2. Search the Pool for a Volume with Volume status=\volumestatus{Append} (if there is more than one, the Volume with the oldest date last written is chosen. If two have the same date then the one with the lowest MediaId is chosen).
  3. Search the Pool for a Volume with Volume status=\volumestatus{Recycle} and the InChanger flag is set true (if there is more than one, the Volume with the oldest date last written is chosen. If two have the same date then the one with the lowest MediaId is chosen).
  4. Try recycling any purged Volumes.
  5. Prune volumes applying Volume retention period (Volumes with VolStatus Full, Used, or Append are pruned). Note, even if all the File and Job records are pruned from a Volume, the Volume will not be marked Purged until the Volume retention period expires.
  6. Search the Pool for a Volume with VolStatus=Purged
  7. If a Pool named ScratchDirpool exists, search for a Volume and if found move it to the current Pool for the Job and use it. Note, when the Scratch Volume is moved into the current Pool, the basic Pool defaults are applied as if it is a newly labeled Volume (equivalent to an update volume from pool command).
  8. If we were looking for Volumes in the Autochanger, go back to step 2 above, but this time, look for any Volume whether or not it is in the Autochanger.
  9. Attempt to create a new Volume if automatic labeling enabled. If the maximum number of Volumes specified for the pool is reached, no new Volume will be created.
  10. Prune the oldest Volume if Recycle Oldest VolumeDirPool =yes (the Volume with the oldest LastWritten date and VolStatus equal to Full, Recycle, Purged, Used, or Append is chosen). This record ensures that all retention periods are properly respected.
#. Purge the oldest Volume if

Purge Oldest VolumeDirPool =yes (the Volume with the oldest LastWritten date and VolStatus equal to Full, Recycle, Purged, Used, or Append is chosen). :raw-latex:`

Warning

We strongly recommend against the use of configdirective{Purge Oldest Volume as it can quite easily lead to loss of current backup data.}`

  1. Give up and ask operator.

The above occurs when Bareos has finished writing a Volume or when no Volume is present in the drive.

On the other hand, if you have inserted a different Volume after the last job, and Bareos recognizes the Volume as valid, it will request authorization from the Director to use this Volume. In this case, if you have set Recycle Current VolumeDirPool = yes and the Volume is marked as Used or Full, Bareos will prune the volume and if all jobs were removed during the pruning (respecting the retention periods), the Volume will be recycled and used.

The recycling algorithm in this case is:

  • If the Volume status is \volumestatus{Append} or \volumestatus{Recycle}, the volume will be used.
  • If Recycle Current VolumeDirPool = yes and the volume is marked \volumestatus{Full} or \volumestatus{Used}, Bareos will prune the volume (applying the retention period). If all Jobs are pruned from the volume, it will be recycled.

This permits users to manually change the Volume every day and load tapes in an order different from what is in the catalog, and if the volume does not contain a current copy of your backup data, it will be used.

A few points from Alan Brown to keep in mind:

  • If Maximum VolumesDirPool is not set, Bareos will prefer to demand new volumes over forcibly purging older volumes.
  • If volumes become free through pruning and the Volume retention period has expired, then they get marked as \volumestatus{Purged} and are immediately available for recycling - these will be used in preference to creating new volumes.

Recycle Status

single: Recycle Status

Each Volume inherits the Recycle status (yes or no) from the Pool resource record when the Media record is created (normally when the Volume is labeled). This Recycle status is stored in the Media record of the Catalog. Using the Console program, you may subsequently change the Recycle status for each Volume. For example in the following output from list volumes:

VolumeNa Media VolSta VolByte LastWritte VolRet Rec
File0001 File0002 File0003 File0004 File0005 File0006 File0007 File File File File File File File Full Full Full Full Full Full Purged 4190055 1896460 1896460 1896460 1896460 1896460 1896466 2002-05-25 2002-05-26 2002-05-26 2002-05-26 2002-05-26 2002-05-26 2002-05-26 14400 14400 14400 14400 14400 14400 14400 1 1 1 1 1 1 1

all the volumes are marked as recyclable, and the last Volume, File0007 has been purged, so it may be immediately recycled. The other volumes are all marked recyclable and when their Volume Retention period (14400 seconds or four hours) expires, they will be eligible for pruning, and possibly recycling. Even though Volume File0007 has been purged, all the data on the Volume is still recoverable. A purged Volume simply means that there are no entries in the Catalog. Even if the Volume Status is changed to Recycle, the data on the Volume will be recoverable. The data is lost only when the Volume is re-labeled and re-written.

To modify Volume File0001 so that it cannot be recycled, you use the update volume pool=File command in the console program, or simply update and Bareos will prompt you for the information.

VolumeNa Media VolSta VolByte LastWritten VolRet Rec
File0001 File0002 File0003 File0004 File0005 File0006 File0007 File File File File File File File Full Full Full Full Full Full Purged 4190055 1897236 1896460 1896460 1896460 1896460 1896466 2002-05-25 2002-05-26 2002-05-26 2002-05-26 2002-05-26 2002-05-26 2002-05-26 14400 14400 14400 14400 14400 14400 14400 0 1 1 1 1 1 1

In this case, File0001 will never be automatically recycled. The same effect can be achieved by setting the Volume Status to Read-Only.

As you have noted, the Volume Status (VolStatus) column in the catalog database contains the current status of the Volume, which is normally maintained automatically by Bareos. To give you an idea of some of the values it can take during the life cycle of a Volume, here is a picture created by Arno Lehmann:

A typical volume life cycle is like this:

because job count or size limit exceeded

Append --------------------------------------> Used/Full

^ | | First Job writes to Retention time passed | | the volume and recycling takes | | place | | v

Recycled <-------------------------------------- Purged

Volume is selected for reuse

Daily, Weekly, Monthly Tape Usage Example

This example is meant to show you how one could define a fixed set of volumes that Bareos will rotate through on a regular schedule. There are an infinite number of such schemes, all of which have various advantages and disadvantages.

We start with the following assumptions:

  • A single tape has more than enough capacity to do a full save.
  • There are ten tapes that are used on a daily basis for incremental backups. They are prelabeled Daily1 ... Daily10.
  • There are four tapes that are used on a weekly basis for full backups. They are labeled Week1 ... Week4.
  • There are 12 tapes that are used on a monthly basis for full backups. They are numbered Month1 ... Month12
  • A full backup is done every Saturday evening (tape inserted Friday evening before leaving work).
  • No backups are done over the weekend (this is easy to change).
  • The first Friday of each month, a Monthly tape is used for the Full backup.
  • Incremental backups are done Monday - Friday (actually Tue-Fri mornings).

We start the system by doing a Full save to one of the weekly volumes or one of the monthly volumes. The next morning, we remove the tape and insert a Daily tape. Friday evening, we remove the Daily tape and insert the next tape in the Weekly series. Monday, we remove the Weekly tape and re-insert the Daily tape. On the first Friday of the next month, we insert the next Monthly tape in the series rather than a Weekly tape, then continue. When a Daily tape finally fills up, Bareos will request the next one in the series, and the next day when you notice the email message, you will mount it and Bareos will finish the unfinished incremental backup.

What does this give? Well, at any point, you will have the last complete Full save plus several Incremental saves. For any given file you want to recover (or your whole system), you will have a copy of that file every day for at least the last 14 days. For older versions, you will have at least three and probably four Friday full saves of that file, and going back further, you will have a copy of that file made on the beginning of the month for at least a year.

So you have copies of any file (or your whole system) for at least a year, but as you go back in time, the time between copies increases from daily to weekly to monthly.

What would the Bareos configuration look like to implement such a scheme?

Schedule {

Name = "NightlySave" Run = Level=Full Pool=Monthly 1st sat at 03:05 Run = Level=Full Pool=Weekly 2nd-5th sat at 03:05 Run = Level=Incremental Pool=Daily tue-fri at 03:05

} Job { Name = "NightlySave" Type = Backup Level = Full Client = LocalMachine FileSet = "File Set" Messages = Standard Storage = DDS-4 Pool = Daily Schedule = "NightlySave" } # Definition of file storage device Storage { Name = DDS-4 Address = localhost SDPort = 9103 Password = XXXXXXXXXXXXX Device = FileStorage Media Type = 8mm } FileSet { Name = "File Set" Include { Options { signature=MD5 } File = fffffffffffffffff } Exclude { File=*.o } } Pool { Name = Daily Pool Type = Backup AutoPrune = yes VolumeRetention = 10d # recycle in 10 days Maximum Volumes = 10 Recycle = yes } Pool { Name = Weekly Use Volume Once = yes Pool Type = Backup AutoPrune = yes VolumeRetention = 30d # recycle in 30 days (default) Recycle = yes } Pool { Name = Monthly Use Volume Once = yes Pool Type = Backup AutoPrune = yes VolumeRetention = 365d # recycle in 1 year Recycle = yes }

Automatic Pruning and Recycling Example

pair: Automatic; Pruning and Recycling Example

pair: Example; Automatic Pruning and Recycling

triple: Pruning; Automatic; Example;

triple: Recycle; Automatic; Example;

Perhaps the best way to understand the various resource records that come into play during automatic pruning and recycling is to run a Job that goes through the whole cycle. If you add the following resources to your Director’s configuration file:

Schedule {

Name = "30 minute cycle" Run = Level=Full Pool=File Messages=Standard Storage=File hourly at 0:05 Run = Level=Full Pool=File Messages=Standard Storage=File hourly at 0:35

} Job { Name = "Filetest" Type = Backup Level = Full Client=XXXXXXXXXX FileSet="Test Files" Messages = Standard Storage = File Pool = File Schedule = "30 minute cycle" } # Definition of file storage device Storage { Name = File Address = XXXXXXXXXXX SDPort = 9103 Password = XXXXXXXXXXXXX Device = FileStorage Media Type = File } FileSet { Name = "File Set" Include { Options { signature=MD5 } File = fffffffffffffffff } Exclude { File=*.o } } Pool { Name = File Use Volume Once = yes Pool Type = Backup LabelFormat = "File" AutoPrune = yes VolumeRetention = 4h Maximum Volumes = 12 Recycle = yes }

Where you will need to replace the ffffffffff’s by the appropriate files to be saved for your configuration. For the FileSet Include, choose a directory that has one or two megabytes maximum since there will probably be approximately eight copies of the directory that Bareos will cycle through.

In addition, you will need to add the following to your Storage daemon’s configuration file:

Device {

Name = FileStorage Media Type = File Archive Device = /tmp LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no;

}

With the above resources, Bareos will start a Job every half hour that saves a copy of the directory you chose to /tmp/File0001 ... /tmp/File0012. After 4 hours, Bareos will start recycling the backup Volumes (/tmp/File0001 ...). You should see this happening in the output produced. Bareos will automatically create the Volumes (Files) the first time it uses them.

To turn it off, either delete all the resources you’ve added, or simply comment out the Schedule record in the Job resource.

Manually Recycling Volumes

triple: Volume; Recycle; Manual;

pair: Recycle; Manual

Although automatic recycling of Volumes is implemented (see the RecyclingChapter chapter of this manual), you may want to manually force reuse (recycling) of a Volume.

Assuming that you want to keep the Volume name, but you simply want to write new data on the tape, the steps to take are:

  • Use the update volume command in the Console to ensure that \volumeparameter{Recycle}{yes}.
  • Use the purge jobs volume command in the Console to mark the Volume as \volumestatus{Purged}. Check by using list volumes.

Once the Volume is marked Purged, it will be recycled the next time a Volume is needed.

If you wish to reuse the tape by giving it a new name, use the relabel instead of the purge command.

Warning

The bcommand{delete}{ command can be dangerous. Once it is done, to recover the File records, you must either restore your database as it was before the bcommand{delete}{} command or use the bscan utility program to scan the tape and recreate the database entries.}