3 Bacula Projects Roadmap
4 Status updated 14 Jun 2009
9 Item 1: Ability to restart failed jobs
10 *Item 2: 'restore' menu: enter a JobId, automatically select dependents
11 Item 3: Scheduling syntax that permits more flexibility and options
12 Item 4: Data encryption on storage daemon
13 Item 5: Deletion of disk Volumes when pruned
14 Item 6: Implement Base jobs
15 Item 7: Add ability to Verify any specified Job.
16 Item 8: Improve Bacula's tape and drive usage and cleaning management
17 Item 9: Allow FD to initiate a backup
18 Item 10: Restore from volumes on multiple storage daemons
19 Item 11: Implement Storage daemon compression
20 Item 12: Reduction of communications bandwidth for a backup
21 Item 13: Ability to reconnect a disconnected comm line
22 Item 14: Start spooling even when waiting on tape
23 Item 15: Enable/disable compression depending on storage device (disk/tape)
24 Item 16: Include all conf files in specified directory
25 Item 17: Multiple threads in file daemon for the same job
26 Item 18: Possibilty to schedule Jobs on last Friday of the month
27 Item 19: Include timestamp of job launch in "stat clients" output
28 Item 20: Cause daemons to use a specific IP address to source communications
29 Item 21: Message mailing based on backup types
30 Item 22: Ability to import/export Bacula database entities
31 Item 23: "Maximum Concurrent Jobs" for drives when used with changer device
32 Item 24: Implementation of running Job speed limit.
33 Item 25: Add an override in Schedule for Pools based on backup types
34 Item 26: Automatic promotion of backup levels based on backup size
35 Item 27: Allow inclusion/exclusion of files in a fileset by creation/mod times
36 Item 28: Archival (removal) of User Files to Tape
37 Item 29: An option to operate on all pools with update vol parameters
38 Item 30: Automatic disabling of devices
39 *Item 31: List InChanger flag when doing restore.
40 Item 32: Ability to defer Batch Insert to a later time
41 Item 33: Add MaxVolumeSize/MaxVolumeBytes statement to Storage resource
42 Item 34: Enable persistent naming/number of SQL queries
43 Item 35: Port bat to Win32
44 Item 36: Bacula Dir, FD and SD to support proxies
45 Item 37: Add Minumum Spool Size directive
46 Item 38: Backup and Restore of Windows Encrypted Files using Win raw encryption
47 Item 39: Implement an interface between Bacula and Amazon's S3.
48 Item 40: Convert Bacula existing tray monitor on Windows to a stand alone program
50 Item 1: Ability to restart failed jobs
55 What: Often jobs fail because of a communications line drop or max run time,
56 cancel, or some other non-critical problem. Currrently any data
57 saved is lost. This implementation should modify the Storage daemon
58 so that it saves all the files that it knows are completely backed
61 The jobs should then be marked as incomplete and a subsequent
62 Incremental Accurate backup will then take into account all the
65 Why: Avoids backuping data already saved.
67 Notes: Requires Accurate to restart correctly. Must completed have a minimum
68 volume of data or files stored on Volume before enabling.
71 Item 2: 'restore' menu: enter a JobId, automatically select dependents
72 Origin: Graham Keeling (graham@equiinet.com)
76 What: Add to the bconsole 'restore' menu the ability to select a job
77 by JobId, and have bacula automatically select all the
80 Why: Currently, you either have to...
81 a) laboriously type in a date that is greater than the date of the backup that
82 you want and is less than the subsequent backup (bacula then figures out the
84 b) manually figure out all the JobIds that you want and laboriously type them
86 It would be extremely useful (in a programmatical sense, as well as for humans)
87 to be able to just give it a single JobId and let bacula do the hard work (work
88 that it already knows how to do).
90 Notes (Kern): I think this should either be modified to have Bacula print
91 a list of dates that the user can choose from as is done in bwx-console and
92 bat or the name of this command must be carefully chosen so that the user
93 clearly understands that the JobId is being used to specify what Job and the
94 date to which he wishes the restore to happen.
97 Item 3: Scheduling syntax that permits more flexibility and options
98 Date: 15 December 2006
99 Origin: Gregory Brauer (greg at wildbrain dot com) and
100 Florian Schnabel <florian.schnabel at docufy dot de>
103 What: Currently, Bacula only understands how to deal with weeks of the
104 month or weeks of the year in schedules. This makes it impossible
105 to do a true weekly rotation of tapes. There will always be a
106 discontinuity that will require disruptive manual intervention at
107 least monthly or yearly because week boundaries never align with
108 month or year boundaries.
110 A solution would be to add a new syntax that defines (at least)
111 a start timestamp, and repetition period.
113 An easy option to skip a certain job on a certain date.
116 Why: Rotated backups done at weekly intervals are useful, and Bacula
117 cannot currently do them without extensive hacking.
119 You could then easily skip tape backups on holidays. Especially
120 if you got no autochanger and can only fit one backup on a tape
121 that would be really handy, other jobs could proceed normally
122 and you won't get errors that way.
125 Notes: Here is an example syntax showing a 3-week rotation where full
126 Backups would be performed every week on Saturday, and an
127 incremental would be performed every week on Tuesday. Each
128 set of tapes could be removed from the loader for the following
129 two cycles before coming back and being reused on the third
130 week. Since the execution times are determined by intervals
131 from a given point in time, there will never be any issues with
132 having to adjust to any sort of arbitrary time boundary. In
133 the example provided, I even define the starting schedule
134 as crossing both a year and a month boundary, but the run times
135 would be based on the "Repeat" value and would therefore happen
140 Name = "Week 1 Rotation"
141 #Saturday. Would run Dec 30, Jan 20, Feb 10, etc.
145 Start = 2006-12-30 01:00
149 #Tuesday. Would run Jan 2, Jan 23, Feb 13, etc.
153 Start = 2007-01-02 01:00
160 Name = "Week 2 Rotation"
161 #Saturday. Would run Jan 6, Jan 27, Feb 17, etc.
165 Start = 2007-01-06 01:00
169 #Tuesday. Would run Jan 9, Jan 30, Feb 20, etc.
173 Start = 2007-01-09 01:00
180 Name = "Week 3 Rotation"
181 #Saturday. Would run Jan 13, Feb 3, Feb 24, etc.
185 Start = 2007-01-13 01:00
189 #Tuesday. Would run Jan 16, Feb 6, Feb 27, etc.
193 Start = 2007-01-16 01:00
199 Notes: Kern: I have merged the previously separate project of skipping
200 jobs (via Schedule syntax) into this.
203 Item 4: Data encryption on storage daemon
204 Origin: Tobias Barth <tobias.barth at web-arts.com>
205 Date: 04 February 2009
208 What: The storage demon should be able to do the data encryption that can currently be done by the file daemon.
210 Why: This would have 2 advantages: 1) one could encrypt the data of unencrypted tapes by doing a migration job, and 2) the storage daemon would be the only machine that would have to keep the encryption keys.
213 As an addendum to the feature request, here are some crypto
214 implementation details I wrote up regarding SD-encryption back in Jan
216 http://www.mail-archive.com/bacula-users@lists.sourceforge.net/msg28860.html
219 Item 5: Deletion of disk Volumes when pruned
221 Origin: Ross Boylan <RossBoylan at stanfordalumni dot org> (edited
225 What: Provide a way for Bacula to automatically remove Volumes
226 from the filesystem, or optionally to truncate them.
227 Obviously, the Volume must be pruned prior removal.
229 Why: This would allow users more control over their Volumes and
230 prevent disk based volumes from consuming too much space.
232 Notes: The following two directives might do the trick:
234 Volume Data Retention = <time period>
235 Remove Volume After = <time period>
237 The migration project should also remove a Volume that is
238 migrated. This might also work for tape Volumes.
240 Notes: (Kern). The data fields to control this have been added
241 to the new 3.0.0 database table structure.
244 Item 6: Implement Base jobs
245 Date: 28 October 2005
249 What: A base job is sort of like a Full save except that you
250 will want the FileSet to contain only files that are
251 unlikely to change in the future (i.e. a snapshot of
252 most of your system after installing it). After the
253 base job has been run, when you are doing a Full save,
254 you specify one or more Base jobs to be used. All
255 files that have been backed up in the Base job/jobs but
256 not modified will then be excluded from the backup.
257 During a restore, the Base jobs will be automatically
258 pulled in where necessary.
260 Why: This is something none of the competition does, as far as
261 we know (except perhaps BackupPC, which is a Perl program that
262 saves to disk only). It is big win for the user, it
263 makes Bacula stand out as offering a unique
264 optimization that immediately saves time and money.
265 Basically, imagine that you have 100 nearly identical
266 Windows or Linux machine containing the OS and user
267 files. Now for the OS part, a Base job will be backed
268 up once, and rather than making 100 copies of the OS,
269 there will be only one. If one or more of the systems
270 have some files updated, no problem, they will be
271 automatically restored.
273 Notes: Huge savings in tape usage even for a single machine.
274 Will require more resources because the DIR must send
275 FD a list of files/attribs, and the FD must search the
276 list and compare it for each file to be saved.
279 Item 7: Add ability to Verify any specified Job.
280 Date: 17 January 2008
281 Origin: portrix.net Hamburg, Germany.
282 Contact: Christian Sabelmann
283 Status: 70% of the required Code is part of the Verify function since v. 2.x
286 The ability to tell Bacula which Job should verify instead of
287 automatically verify just the last one.
290 It is sad that such a powerfull feature like Verify Jobs
291 (VolumeToCatalog) is restricted to be used only with the last backup Job
292 of a client. Actual users who have to do daily Backups are forced to
293 also do daily Verify Jobs in order to take advantage of this useful
294 feature. This Daily Verify after Backup conduct is not always desired
295 and Verify Jobs have to be sometimes scheduled. (Not necessarily
296 scheduled in Bacula). With this feature Admins can verify Jobs once a
297 Week or less per month, selecting the Jobs they want to verify. This
298 feature is also not to difficult to implement taking in account older bug
299 reports about this feature and the selection of the Job to be verified.
301 Notes: For the verify Job, the user could select the Job to be verified
302 from a List of the latest Jobs of a client. It would also be possible to
303 verify a certain volume. All of these would naturaly apply only for
304 Jobs whose file information are still in the catalog.
307 Item 8: Improve Bacula's tape and drive usage and cleaning management
308 Date: 8 November 2005, November 11, 2005
309 Origin: Adam Thornton <athornton at sinenomine dot net>,
310 Arno Lehmann <al at its-lehmann dot de>
313 What: Make Bacula manage tape life cycle information, tape reuse
314 times and drive cleaning cycles.
316 Why: All three parts of this project are important when operating
318 We need to know which tapes need replacement, and we need to
319 make sure the drives are cleaned when necessary. While many
320 tape libraries and even autoloaders can handle all this
321 automatically, support by Bacula can be helpful for smaller
322 (older) libraries and single drives. Limiting the number of
323 times a tape is used might prevent tape errors when using
324 tapes until the drives can't read it any more. Also, checking
325 drive status during operation can prevent some failures (as I
326 [Arno] had to learn the hard way...)
328 Notes: First, Bacula could (and even does, to some limited extent)
329 record tape and drive usage. For tapes, the number of mounts,
330 the amount of data, and the time the tape has actually been
331 running could be recorded. Data fields for Read and Write
332 time and Number of mounts already exist in the catalog (I'm
333 not sure if VolBytes is the sum of all bytes ever written to
334 that volume by Bacula). This information can be important
335 when determining which media to replace. The ability to mark
336 Volumes as "used up" after a given number of write cycles
337 should also be implemented so that a tape is never actually
338 worn out. For the tape drives known to Bacula, similar
339 information is interesting to determine the device status and
340 expected life time: Time it's been Reading and Writing, number
341 of tape Loads / Unloads / Errors. This information is not yet
342 recorded as far as I [Arno] know. A new volume status would
343 be necessary for the new state, like "Used up" or "Worn out".
344 Volumes with this state could be used for restores, but not
345 for writing. These volumes should be migrated first (assuming
346 migration is implemented) and, once they are no longer needed,
347 could be moved to a Trash pool.
349 The next step would be to implement a drive cleaning setup.
350 Bacula already has knowledge about cleaning tapes. Once it
351 has some information about cleaning cycles (measured in drive
352 run time, number of tapes used, or calender days, for example)
353 it can automatically execute tape cleaning (with an
354 autochanger, obviously) or ask for operator assistance loading
357 The final step would be to implement TAPEALERT checks not only
358 when changing tapes and only sending the information to the
359 administrator, but rather checking after each tape error,
360 checking on a regular basis (for example after each tape
361 file), and also before unloading and after loading a new tape.
362 Then, depending on the drives TAPEALERT state and the known
363 drive cleaning state Bacula could automatically schedule later
364 cleaning, clean immediately, or inform the operator.
366 Implementing this would perhaps require another catalog change
367 and perhaps major changes in SD code and the DIR-SD protocol,
368 so I'd only consider this worth implementing if it would
369 actually be used or even needed by many people.
371 Implementation of these projects could happen in three distinct
372 sub-projects: Measuring Tape and Drive usage, retiring
373 volumes, and handling drive cleaning and TAPEALERTs.
376 Item 9: Allow FD to initiate a backup
377 Origin: Frank Volf (frank at deze dot org)
378 Date: 17 November 2005
381 What: Provide some means, possibly by a restricted console that
382 allows a FD to initiate a backup, and that uses the connection
383 established by the FD to the Director for the backup so that
384 a Director that is firewalled can do the backup.
385 Why: Makes backup of laptops much easier.
388 Item 10: Restore from volumes on multiple storage daemons
389 Origin: Graham Keeling (graham@equiinet.com)
393 What: The ability to restore from volumes held by multiple storage daemons
394 would be very useful.
396 Why: It is useful to be able to backup to any number of different storage
397 daemons. For example, your first storage daemon may run out of space, so you
398 switch to your second and carry on. Bacula will currently let you do this.
399 However, once you come to restore, bacula cannot cope when volumes on different
400 storage daemons are required.
402 Notes: The director knows that more than one storage daemon is needed, as
403 bconsole outputs something like the following table.
405 The job will require the following
406 Volume(s) Storage(s) SD Device(s)
407 ===========================================================================
409 backup-0001 Disk 1 Disk 1.0
410 backup-0002 Disk 2 Disk 2.0
412 However, the bootstrap file that it creates gets sent to the first storage
413 daemon only, which then stalls for a long time, 'waiting for a mount request'
414 for the volume that it doesn't have.
415 The bootstrap file contains no knowledge of the storage daemon.
416 Under the current design:
418 The director connects to the storage daemon, and gets an sd_auth_key.
419 The director then connects to the file daemon, and gives it the
420 sd_auth_key with the 'jobcmd'.
421 (restoring of files happens)
422 The director does a 'wait_for_storage_daemon_termination()'.
423 The director waits for the file daemon to indicate the end of the job.
427 The director connects to the file daemon.
428 Then, for each storage daemon in the .bsr file... {
429 The director connects to the storage daemon, and gets an sd_auth_key.
430 The director then connects to the file daemon, and gives it the
431 sd_auth_key with the 'storaddr' command.
432 (restoring of files happens)
433 The director does a 'wait_for_storage_daemon_termination()'.
434 The director waits for the file daemon to indicate the end of the
435 work on this storage.
437 The director tells the file daemon that there are no more storages to contact.
438 The director waits for the file daemon to indicate the end of the job.
440 As you can see, each restore between the file daemon and storage daemon is
441 handled in the same way that it is currently handled, using the same method
442 for authentication, except that the sd_auth_key is moved from the 'jobcmd' to
443 the 'storaddr' command - where it logically belongs.
446 Item 11: Implement Storage daemon compression
447 Date: 18 December 2006
448 Origin: Vadim A. Umanski , e-mail umanski@ext.ru
450 What: The ability to compress backup data on the SD receiving data
451 instead of doing that on client sending data.
452 Why: The need is practical. I've got some machines that can send
453 data to the network 4 or 5 times faster than compressing
454 them (I've measured that). They're using fast enough SCSI/FC
455 disk subsystems but rather slow CPUs (ex. UltraSPARC II).
456 And the backup server has got a quite fast CPUs (ex. Dual P4
457 Xeons) and quite a low load. When you have 20, 50 or 100 GB
458 of raw data - running a job 4 to 5 times faster - that
459 really matters. On the other hand, the data can be
460 compressed 50% or better - so losing twice more space for
461 disk backup is not good at all. And the network is all mine
462 (I have a dedicated management/provisioning network) and I
463 can get as high bandwidth as I need - 100Mbps, 1000Mbps...
464 That's why the server-side compression feature is needed!
468 Item 12: Reduction of communications bandwidth for a backup
469 Date: 14 October 2008
470 Origin: Robin O'Leary (Equiinet)
473 What: Using rdiff techniques, Bacula could significantly reduce
474 the network data transfer volume to do a backup.
476 Why: Faster backup across the Internet
478 Notes: This requires retaining certain data on the client during a Full
479 backup that will speed up subsequent backups.
482 Item 13: Ability to reconnect a disconnected comm line
487 What: Often jobs fail because of a communications line drop. In that
488 case, Bacula should be able to reconnect to the other daemon and
491 Why: Avoids backuping data already saved.
493 Notes: *Very* complicated from a design point of view because of authenication.
495 Item 14: Start spooling even when waiting on tape
496 Origin: Tobias Barth <tobias.barth@web-arts.com>
500 What: If a job can be spooled to disk before writing it to tape, it should
501 be spooled immediately. Currently, bacula waits until the correct
502 tape is inserted into the drive.
504 Why: It could save hours. When bacula waits on the operator who must insert
505 the correct tape (e.g. a new tape or a tape from another media
506 pool), bacula could already prepare the spooled data in the spooling
507 directory and immediately start despooling when the tape was
508 inserted by the operator.
510 2nd step: Use 2 or more spooling directories. When one directory is
511 currently despooling, the next (on different disk drives) could
512 already be spooling the next data.
514 Notes: I am using bacula 2.2.8, which has none of those features
518 Item 15: Enable/disable compression depending on storage device (disk/tape)
519 Origin: Ralf Gross ralf-lists@ralfgross.de
521 Status: Initial Request
523 What: Add a new option to the storage resource of the director. Depending
524 on this option, compression will be enabled/disabled for a device.
526 Why: If different devices (disks/tapes) are used for full/diff/incr
527 backups, software compression will be enabled for all backups
528 because of the FileSet compression option. For backup to tapes
529 wich are able to do hardware compression this is not desired.
533 http://news.gmane.org/gmane.comp.sysutils.backup.bacula.devel/cutoff=11124
534 It must be clear to the user, that the FileSet compression option
535 must still be enabled use compression for a backup job at all.
536 Thus a name for the new option in the director must be
539 Notes: KES I think the Storage definition should probably override what
540 is in the Job definition or vice-versa, but in any case, it must
544 Item 16: Include all conf files in specified directory
545 Date: 18 October 2008
546 Origin: Database, Lda. Maputo, Mozambique
547 Contact:Cameron Smith / cameron.ord@database.co.mz
550 What: A directive something like "IncludeConf = /etc/bacula/subconfs" Every
551 time Bacula Director restarts or reloads, it will walk the given
552 directory (non-recursively) and include the contents of any files
553 therein, as though they were appended to bacula-dir.conf
555 Why: Permits simplified and safer configuration for larger installations with
556 many client PCs. Currently, through judicious use of JobDefs and
557 similar directives, it is possible to reduce the client-specific part of
558 a configuration to a minimum. The client-specific directives can be
559 prepared according to a standard template and dropped into a known
560 directory. However it is still necessary to add a line to the "master"
561 (bacula-dir.conf) referencing each new file. This exposes the master to
562 unnecessary risk of accidental mistakes and makes automation of adding
563 new client-confs, more difficult (it is easier to automate dropping a
564 file into a dir, than rewriting an existing file). Ken has previously
565 made a convincing argument for NOT including Bacula's core configuration
566 in an RDBMS, but I believe that the present request is a reasonable
567 extension to the current "flat-file-based" configuration philosophy.
569 Notes: There is NO need for any special syntax to these files. They should
570 contain standard directives which are simply "inlined" to the parent
571 file as already happens when you explicitly reference an external file.
573 Notes: (kes) this can already be done with scripting
574 From: John Jorgensen <jorgnsn@lcd.uregina.ca>
575 The bacula-dir.conf at our site contains these lines:
578 # Include subfiles associated with configuration of clients.
579 # They define the bulk of the Clients, Jobs, and FileSets.
581 @|"sh -c 'for f in /etc/bacula/clientdefs/*.conf ; do echo @${f} ; done'"
583 and when we get a new client, we just put its configuration into
584 a new file called something like:
586 /etc/bacula/clientdefs/clientname.conf
589 Item 17: Multiple threads in file daemon for the same job
590 Date: 27 November 2005
591 Origin: Ove Risberg (Ove.Risberg at octocode dot com)
594 What: I want the file daemon to start multiple threads for a backup
595 job so the fastest possible backup can be made.
597 The file daemon could parse the FileSet information and start
598 one thread for each File entry located on a separate
601 A confiuration option in the job section should be used to
602 enable or disable this feature. The confgutration option could
603 specify the maximum number of threads in the file daemon.
605 If the theads could spool the data to separate spool files
606 the restore process will not be much slower.
608 Why: Multiple concurrent backups of a large fileserver with many
609 disks and controllers will be much faster.
612 Item 18: Possibilty to schedule Jobs on last Friday of the month
613 Origin: Carsten Menke <bootsy52 at gmx dot net>
617 What: Currently if you want to run your monthly Backups on the last
618 Friday of each month this is only possible with workarounds (e.g
619 scripting) (As some months got 4 Fridays and some got 5 Fridays)
620 The same is true if you plan to run your yearly Backups on the
621 last Friday of the year. It would be nice to have the ability to
622 use the builtin scheduler for this.
624 Why: In many companies the last working day of the week is Friday (or
625 Saturday), so to get the most data of the month onto the monthly
626 tape, the employees are advised to insert the tape for the
627 monthly backups on the last friday of the month.
629 Notes: To give this a complete functionality it would be nice if the
630 "first" and "last" Keywords could be implemented in the
631 scheduler, so it is also possible to run monthy backups at the
632 first friday of the month and many things more. So if the syntax
633 would expand to this {first|last} {Month|Week|Day|Mo-Fri} of the
634 {Year|Month|Week} you would be able to run really flexible jobs.
636 To got a certain Job run on the last Friday of the Month for example one could
639 Run = pool=Monthly last Fri of the Month at 23:50
643 Run = pool=Yearly last Fri of the Year at 23:50
645 ## Certain Jobs the last Week of a Month
647 Run = pool=LastWeek last Week of the Month at 23:50
649 ## Monthly Backup on the last day of the month
651 Run = pool=Monthly last Day of the Month at 23:50
654 Item 19: Include timestamp of job launch in "stat clients" output
655 Origin: Mark Bergman <mark.bergman@uphs.upenn.edu>
656 Date: Tue Aug 22 17:13:39 EDT 2006
659 What: The "stat clients" command doesn't include any detail on when
660 the active backup jobs were launched.
662 Why: Including the timestamp would make it much easier to decide whether
663 a job is running properly.
665 Notes: It may be helpful to have the output from "stat clients" formatted
666 more like that from "stat dir" (and other commands), in a column
667 format. The per-client information that's currently shown (level,
668 client name, JobId, Volume, pool, device, Files, etc.) is good, but
669 somewhat hard to parse (both programmatically and visually),
670 particularly when there are many active clients.
673 Item 20: Cause daemons to use a specific IP address to source communications
674 Origin: Bill Moran <wmoran@collaborativefusion.com>
677 What: Cause Bacula daemons (dir, fd, sd) to always use the ip address
678 specified in the [DIR|DF|SD]Addr directive as the source IP
679 for initiating communication.
680 Why: On complex networks, as well as extremely secure networks, it's
681 not unusual to have multiple possible routes through the network.
682 Often, each of these routes is secured by different policies
683 (effectively, firewalls allow or deny different traffic depending
684 on the source address)
685 Unfortunately, it can sometimes be difficult or impossible to
686 represent this in a system routing table, as the result is
687 excessive subnetting that quickly exhausts available IP space.
688 The best available workaround is to provide multiple IPs to
689 a single machine that are all on the same subnet. In order
690 for this to work properly, applications must support the ability
691 to bind outgoing connections to a specified address, otherwise
692 the operating system will always choose the first IP that
693 matches the required route.
694 Notes: Many other programs support this. For example, the following
695 can be configured in BIND:
696 query-source address 10.0.0.1;
697 transfer-source 10.0.0.2;
698 Which means queries from this server will always come from
699 10.0.0.1 and zone transfers will always originate from
703 Item 21: Message mailing based on backup types
704 Origin: Evan Kaufman <evan.kaufman@gmail.com>
705 Date: January 6, 2006
708 What: In the "Messages" resource definitions, allowing messages
709 to be mailed based on the type (backup, restore, etc.) and level
710 (full, differential, etc) of job that created the originating
713 Why: It would, for example, allow someone's boss to be emailed
714 automatically only when a Full Backup job runs, so he can
715 retrieve the tapes for offsite storage, even if the IT dept.
716 doesn't (or can't) explicitly notify him. At the same time, his
717 mailbox wouldnt be filled by notifications of Verifies, Restores,
718 or Incremental/Differential Backups (which would likely be kept
721 Notes: One way this could be done is through additional message types, for example:
724 # email the boss only on full system backups
725 Mail = boss@mycompany.com = full, !incremental, !differential, !restore,
727 # email us only when something breaks
728 MailOnError = itdept@mycompany.com = all
731 Notes: Kern: This should be rather trivial to implement.
734 Item 22: Ability to import/export Bacula database entities
739 What: Create a Bacula ASCII SQL database independent format that permits
740 importing and exporting database catalog Job entities.
742 Why: For achival, database clustering, tranfer to other databases
745 Notes: Job selection should be by Job, time, Volume, Client, Pool and possibly
749 Item 23: "Maximum Concurrent Jobs" for drives when used with changer device
750 Origin: Ralf Gross ralf-lists <at> ralfgross.de
752 Status: Initial Request
754 What: respect the "Maximum Concurrent Jobs" directive in the _drives_
755 Storage section in addition to the changer section
757 Why: I have a 3 drive changer where I want to be able to let 3 concurrent
758 jobs run in parallel. But only one job per drive at the same time.
759 Right now I don't see how I could limit the number of concurrent jobs
760 per drive in this situation.
762 Notes: Using different priorities for these jobs lead to problems that other
763 jobs are blocked. On the user list I got the advice to use the "Prefer Mounted
764 Volumes" directive, but Kern advised against using "Prefer Mounted
765 Volumes" in an other thread:
766 http://article.gmane.org/gmane.comp.sysutils.backup.bacula.devel/11876/
768 In addition I'm not sure if this would be the same as respecting the
769 drive's "Maximum Concurrent Jobs" setting.
781 Maximum Concurrent Jobs = 3
785 Name = Neo4100-LTO4-D1
789 Device = ULTRIUM-TD4-D1
791 Maximum Concurrent Jobs = 1
796 The "Maximum Concurrent Jobs = 1" directive in the drive's section is ignored.
799 Item 24: Implementation of running Job speed limit.
800 Origin: Alex F, alexxzell at yahoo dot com
801 Date: 29 January 2009
803 What: I noticed the need for an integrated bandwidth limiter for
804 running jobs. It would be very useful just to specify another
805 field in bacula-dir.conf, like speed = how much speed you wish
806 for that specific job to run at
808 Why: Because of a couple of reasons. First, it's very hard to implement a
809 traffic shaping utility and also make it reliable. Second, it is very
810 uncomfortable to have to implement these apps to, let's say 50 clients
811 (including desktops, servers). This would also be unreliable because you
812 have to make sure that the apps are properly working when needed; users
813 could also disable them (accidentally or not). It would be very useful
814 to provide Bacula this ability. All information would be centralized,
815 you would not have to go to 50 different clients in 10 different
816 locations for configuration; eliminating 3rd party additions help in
817 establishing efficiency. Would also avoid bandwidth congestion,
818 especially where there is little available.
821 Item 25: Add an override in Schedule for Pools based on backup types
823 Origin: Chad Slater <chad.slater@clickfox.com>
826 What: Adding a FullStorage=BigTapeLibrary in the Schedule resource
827 would help those of us who use different storage devices for different
828 backup levels cope with the "auto-upgrade" of a backup.
830 Why: Assume I add several new devices to be backed up, i.e. several
831 hosts with 1TB RAID. To avoid tape switching hassles, incrementals are
832 stored in a disk set on a 2TB RAID. If you add these devices in the
833 middle of the month, the incrementals are upgraded to "full" backups,
834 but they try to use the same storage device as requested in the
835 incremental job, filling up the RAID holding the differentials. If we
836 could override the Storage parameter for full and/or differential
837 backups, then the Full job would use the proper Storage device, which
838 has more capacity (i.e. a 8TB tape library.
841 Item 26: Automatic promotion of backup levels based on backup size
842 Date: 19 January 2006
843 Origin: Adam Thornton <athornton@sinenomine.net>
846 What: Other backup programs have a feature whereby it estimates the space
847 that a differential, incremental, and full backup would take. If
848 the difference in space required between the scheduled level and the
849 next level up is beneath some user-defined critical threshold, the
850 backup level is bumped to the next type. Doing this minimizes the
851 number of volumes necessary during a restore, with a fairly minimal
852 cost in backup media space.
854 Why: I know at least one (quite sophisticated and smart) user for whom the
855 absence of this feature is a deal-breaker in terms of using Bacula;
856 if we had it it would eliminate the one cool thing other backup
857 programs can do and we can't (at least, the one cool thing I know
861 Item 27: Allow inclusion/exclusion of files in a fileset by creation/mod times
862 Origin: Evan Kaufman <evan.kaufman@gmail.com>
863 Date: January 11, 2006
866 What: In the vein of the Wild and Regex directives in a Fileset's
867 Options, it would be helpful to allow a user to include or exclude
868 files and directories by creation or modification times.
870 You could factor the Exclude=yes|no option in much the same way it
871 affects the Wild and Regex directives. For example, you could exclude
872 all files modified before a certain date:
876 Modified Before = ####
879 Or you could exclude all files created/modified since a certain date:
883 Created Modified Since = ####
886 The format of the time/date could be done several ways, say the number
887 of seconds since the epoch:
888 1137008553 = Jan 11 2006, 1:42:33PM # result of `date +%s`
890 Or a human readable date in a cryptic form:
891 20060111134233 = Jan 11 2006, 1:42:33PM # YYYYMMDDhhmmss
893 Why: I imagine a feature like this could have many uses. It would
894 allow a user to do a full backup while excluding the base operating
895 system files, so if I installed a Linux snapshot from a CD yesterday,
896 I'll *exclude* all files modified *before* today. If I need to
897 recover the system, I use the CD I already have, plus the tape backup.
898 Or if, say, a Windows client is hit by a particularly corrosive
899 virus, and I need to *exclude* any files created/modified *since* the
902 Notes: Of course, this feature would work in concert with other
903 in/exclude rules, and wouldnt override them (or each other).
905 Notes: The directives I'd imagine would be along the lines of
906 "[Created] [Modified] [Before|Since] = <date>".
907 So one could compare against 'ctime' and/or 'mtime', but ONLY 'before'
911 Item 28: Archival (removal) of User Files to Tape
913 Origin: Ray Pengelly [ray at biomed dot queensu dot ca
916 What: The ability to archive data to storage based on certain parameters
917 such as age, size, or location. Once the data has been written to
918 storage and logged it is then pruned from the originating
919 filesystem. Note! We are talking about user's files and not
922 Why: This would allow fully automatic storage management which becomes
923 useful for large datastores. It would also allow for auto-staging
924 from one media type to another.
926 Example 1) Medical imaging needs to store large amounts of data.
927 They decide to keep data on their servers for 6 months and then put
928 it away for long term storage. The server then finds all files
929 older than 6 months writes them to tape. The files are then removed
932 Example 2) All data that hasn't been accessed in 2 months could be
933 moved from high-cost, fibre-channel disk storage to a low-cost
934 large-capacity SATA disk storage pool which doesn't have as quick of
935 access time. Then after another 6 months (or possibly as one
936 storage pool gets full) data is migrated to Tape.
939 Item 29: An option to operate on all pools with update vol parameters
940 Origin: Dmitriy Pinchukov <absh@bossdev.kiev.ua>
942 Status: Patch made by Nigel Stepp
944 What: When I do update -> Volume parameters -> All Volumes
945 from Pool, then I have to select pools one by one. I'd like
946 console to have an option like "0: All Pools" in the list of
949 Why: I have many pools and therefore unhappy with manually
950 updating each of them using update -> Volume parameters -> All
951 Volumes from Pool -> pool #.
954 Item 30: Automatic disabling of devices
956 Origin: Peter Eriksson <peter at ifm.liu dot se>
959 What: After a configurable amount of fatal errors with a tape drive
960 Bacula should automatically disable further use of a certain
961 tape drive. There should also be "disable"/"enable" commands in
964 Why: On a multi-drive jukebox there is a possibility of tape drives
965 going bad during large backups (needing a cleaning tape run,
966 tapes getting stuck). It would be advantageous if Bacula would
967 automatically disable further use of a problematic tape drive
968 after a configurable amount of errors has occurred.
970 An example: I have a multi-drive jukebox (6 drives, 380+ slots)
971 where tapes occasionally get stuck inside the drive. Bacula will
972 notice that the "mtx-changer" command will fail and then fail
973 any backup jobs trying to use that drive. However, it will still
974 keep on trying to run new jobs using that drive and fail -
975 forever, and thus failing lots and lots of jobs... Since we have
976 many drives Bacula could have just automatically disabled
977 further use of that drive and used one of the other ones
981 Item 31: List InChanger flag when doing restore.
982 Origin: Jesper Krogh<jesper@krogh.cc>
984 Status: Done in version 3.0.2
986 What: When doing a restore the restore selection dialog ends by telling stuff
988 The job will require the following
989 Volume(s) Storage(s) SD Device(s)
990 ===========================================================================
1001 When having an autochanger, it would be really nice with an inChanger
1002 column so the operator knew if this restore job would stop waiting for
1003 operator intervention. This is done just by selecting the inChanger flag
1004 from the catalog and printing it in a seperate column.
1007 Why: This would help getting large restores through minimizing the
1008 time spent waiting for operator to drop by and change tapes in the library.
1010 Notes: [Kern] I think it would also be good to have the Slot as well,
1011 or some indication that Bacula thinks the volume is in the autochanger
1012 because it depends on both the InChanger flag and the Slot being
1016 Item 32: Ability to defer Batch Insert to a later time
1021 What: Instead of doing a Job Batch Insert at the end of the Job
1022 which might create resource contention with lots of Job,
1023 defer the insert to a later time.
1025 Why: Permits to focus on getting the data on the Volume and
1026 putting the metadata into the Catalog outside the backup
1029 Notes: Will use the proposed Bacula ASCII database import/export
1030 format (i.e. dependent on the import/export entities project).
1033 Item 33: Add MaxVolumeSize/MaxVolumeBytes statement to Storage resource
1034 Origin: Bastian Friedrich <bastian.friedrich@collax.com>
1038 What: SD has a "Maximum Volume Size" statement, which is deprecated and
1039 superseded by the Pool resource statement "Maximum Volume Bytes".
1040 It would be good if either statement could be used in Storage
1043 Why: Pools do not have to be restricted to a single storage type/device;
1044 thus, it may be impossible to define Maximum Volume Bytes in the
1045 Pool resource. The old MaxVolSize statement is deprecated, as it
1046 is SD side only. I am using the same pool for different devices.
1048 Notes: State of idea currently unknown. Storage resources in the dir
1049 config currently translate to very slim catalog entries; these
1050 entries would require extensions to implement what is described
1051 here. Quite possibly, numerous other statements that are currently
1052 available in Pool resources could be used in Storage resources too
1056 Item 34: Enable persistent naming/number of SQL queries
1058 Origin: Mark Bergman
1062 Change the parsing of the query.sql file and the query command so that
1063 queries are named/numbered by a fixed value, not their order in the
1068 One of the real strengths of bacula is the ability to query the
1069 database, and the fact that complex queries can be saved and
1070 referenced from a file is very powerful. However, the choice
1071 of query (both for interactive use, and by scripting input
1072 to the bconsole command) is completely dependent on the order
1073 within the query.sql file. The descriptve labels are helpful for
1074 interactive use, but users become used to calling a particular
1075 query "by number", or may use scripts to execute queries. This
1076 presents a problem if the number or order of queries in the file
1079 If the query.sql file used the numeric tags as a real value (rather
1080 than a comment), then users could have a higher confidence that they
1081 are executing the intended query, that their local changes wouldn't
1082 conflict with future bacula upgrades.
1084 For scripting, it's very important that the intended query is
1085 what's actually executed. The current method of parsing the
1086 query.sql file discourages scripting because the addition or
1087 deletion of queries within the file will require corresponding
1088 changes to scripts. It may not be obvious to users that deleting
1089 query "17" in the query.sql file will require changing all
1090 references to higher numbered queries. Similarly, when new
1091 bacula distributions change the number of "official" queries,
1092 user-developed queries cannot simply be appended to the file
1093 without also changing any references to those queries in scripts
1094 or procedural documentation, etc.
1096 In addition, using fixed numbers for queries would encourage more
1097 user-initiated development of queries, by supporting conventions
1100 queries numbered 1-50 are supported/developed/distributed by
1101 with official bacula releases
1103 queries numbered 100-200 are community contributed, and are
1104 related to media management
1106 queries numbered 201-300 are community contributed, and are
1107 related to checksums, finding duplicated files across
1108 different backups, etc.
1110 queries numbered 301-400 are community contributed, and are
1111 related to backup statistics (average file size, size per
1112 client per backup level, time for all clients by backup level,
1113 storage capacity by media type, etc.)
1115 queries numbered 500-999 are locally created
1118 Alternatively, queries could be called by keyword (tag), rather
1122 Item 35: Port bat to Win32
1127 What: Make bat run on Win32/64.
1129 Why: To have GUI on Windows
1134 Item 36: Bacula Dir, FD and SD to support proxies
1135 Origin: Karl Grindley @ MIT Lincoln Laboratory <kgrindley at ll dot mit dot edu>
1139 What: Support alternate methods for nailing up a TCP session such
1140 as SOCKS5, SOCKS4 and HTTP (CONNECT) proxies. Such a feature
1141 would allow tunneling of bacula traffic in and out of proxied
1144 Why: Currently, bacula is architected to only function on a flat network, with
1145 no barriers or limitations. Due to the large configuration states of
1146 any network and the infinite configuration where file daemons and
1147 storage daemons may sit in relation to one another, bacula often is
1148 not usable on a network where filtered or air-gaped networks exist.
1149 While often solutions such as ACL modifications to firewalls or port
1150 redirection via SNAT or DNAT will solve the issue, often however,
1151 these solutions are not adequate or not allowed by hard policy.
1153 In an air-gapped network with only a highly locked down proxy services
1154 are provided (SOCKS4/5 and/or HTTP and/or SSH outbound) ACLs or
1155 iptable rules will not work.
1157 Notes: Director resource tunneling: This configuration option to utilize a
1158 proxy to connect to a client should be specified in the client
1159 resource Client resource tunneling: should be configured in the client
1160 resource in the director config file? Or configured on the bacula-fd
1161 configuration file on the fd host itself? If the ladder, this would
1162 allow only certain clients to use a proxy, where others do not when
1163 establishing the TCP connection to the storage server.
1165 Also worth noting, there are other 3rd party, light weight apps that
1166 could be utilized to bootstrap this. Instead of sockifing bacula
1167 itself, use an external program to broker proxy authentication, and
1168 connection to the remote host. OpenSSH does this by using the
1169 "ProxyCommand" syntax in the client configuration and uses stdin and
1170 stdout to the command. Connect.c is a very popular one.
1171 (http://bent.latency.net/bent/darcs/goto-san-connect-1.85/src/connect.html).
1172 One could also possibly use stunnel, netcat, etc.
1175 Item 37: Add Minumum Spool Size directive
1177 Origin: Frank Sweetser <fs@wpi.edu>
1179 What: Add a new SD directive, "minimum spool size" (or similar). This
1180 directive would specify a minimum level of free space available for
1181 spooling. If the unused spool space is less than this level, any
1182 new spooling requests would be blocked as if the "maximum spool
1183 size" threshold had bee reached. Already spooling jobs would be
1184 unaffected by this directive.
1186 Why: I've been bitten by this scenario a couple of times:
1188 Assume a maximum spool size of 100M. Two concurrent jobs, A and B,
1189 are both running. Due to timing quirks and previously running jobs,
1190 job A has used 99.9M of space in the spool directory. While A is
1191 busy despooling to disk, B is happily using the remaining 0.1M of
1192 spool space. This ends up in a spool/despool sequence every 0.1M of
1193 data. In addition to fragmenting the data on the volume far more
1194 than was necessary, in larger data sets (ie, tens or hundreds of
1195 gigabytes) it can easily produce multi-megabyte report emails!
1198 Item 38: Backup and Restore of Windows Encrypted Files using Win raw encryption
1199 Origin: Michael Mohr, SAG Mohr.External@infineon.com
1200 Date: 22 February 2008
1201 Origin: Alex Ehrlich (Alex.Ehrlich-at-mail.ee)
1202 Date: 05 August 2008
1205 What: Make it possible to backup and restore Encypted Files from and to
1206 Windows systems without the need to decrypt it by using the raw
1207 encryption functions API (see:
1208 http://msdn2.microsoft.com/en-us/library/aa363783.aspx)
1209 that is provided for that reason by Microsoft.
1210 If a file ist encrypted could be examined by evaluating the
1211 FILE_ATTRIBUTE_ENCRYTED flag of the GetFileAttributes
1213 For each file backed up or restored by FD on Windows, check if
1214 the file is encrypted; if so then use OpenEncryptedFileRaw,
1215 ReadEncryptedFileRaw, WriteEncryptedFileRaw,
1216 CloseEncryptedFileRaw instead of BackupRead and BackupWrite
1219 Why: Without the usage of this interface the fd-daemon running
1220 under the system account can't read encypted Files because
1221 the key needed for the decrytion is missed by them. As a result
1222 actually encrypted files are not backed up
1223 by bacula and also no error is shown while missing these files.
1225 Notes: Using xxxEncryptedFileRaw API would allow to backup and
1226 restore EFS-encrypted files without decrypting their data.
1227 Note that such files cannot be restored "portably" (at least,
1228 easily) but they would be restoreable to a different (or
1229 reinstalled) Win32 machine; the restore would require setup
1230 of a EFS recovery agent in advance, of course, and this shall
1231 be clearly reflected in the documentation, but this is the
1232 normal Windows SysAdmin's business.
1233 When "portable" backup is requested the EFS-encrypted files
1234 shall be clearly reported as errors.
1235 See MSDN on the "Backup and Restore of Encrypted Files" topic:
1236 http://msdn.microsoft.com/en-us/library/aa363783.aspx
1237 Maybe the EFS support requires a new flag in the database for
1239 Unfortunately, the implementation is not as straightforward as
1240 1-to-1 replacement of BackupRead with ReadEncryptedFileRaw,
1241 requiring some FD code rewrite to work with
1242 encrypted-file-related callback functions.
1245 Item 39: Implement an interface between Bacula and Storage clould like Amazon's S3.
1246 Date: 25 August 2008
1247 Origin: Soren Hansen <soren@ubuntu.com>
1248 Status: Not started.
1249 What: Enable the storage daemon to store backup data on Amazon's
1252 Why: Amazon's S3 is a cheap way to store data off-site.
1254 Notes: If we configure the Pool to put only one job per volume (they don't
1255 support append operation), and the volume size isn't to big (100MB?),
1256 it should be easy to adapt the disk-changer script to add get/put
1257 procedure with curl. So, the data would be safetly copied during the
1260 Cloud should be only used with Copy jobs, users should always have
1261 a copy of their data on their site.
1263 We should also think to have our own cache, trying always to have
1264 cloud volume on the local disk. (I don't know if users want to store
1265 100GB on cloud, so it shouldn't be a disk size problem). For example,
1266 if bacula want to recycle a volume, it will start by downloading the
1267 file to truncate it few seconds later, if we can avoid that...
1269 Item 40: Convert Bacula existing tray monitor on Windows to a stand alone program
1274 What: Separate Win32 tray monitor to be a separate program.
1276 Why: Vista does not allow SYSTEM services to interact with the
1277 desktop, so the current tray monitor does not work on Vista
1280 Notes: Requires communicating with the FD via the network (simulate
1281 a console connection).
1285 ========= End items voted on May 2009 ==================
1287 ========= New items after last vote ====================
1289 Item 1: Relabel disk volume after recycling
1290 Origin: Pasi Kärkkäinen <pasik@iki.fi>
1292 Status: Not implemented yet, no code written.
1294 What: The ability to relabel the disk volume (and thus rename the file on the disk)
1295 after it has been recycled. Useful when you have a single job per disk volume,
1296 and you use a custom Label format, for example:
1297 Label Format = "${Client}-${Level}-${NumVols:p/4/0/r}-${Year}_${Month}_${Day}-${Hour}_${Minute}"
1299 Why: Disk volumes in Bacula get the label/filename when they are used for the first time.
1300 If you use recycling and custom label format like above, the disk
1301 volume name doesn't match the contents after it has been recycled.
1302 This feature makes it possible to keep the label/filename in sync
1303 with the content and thus makes it easy to check/monitor the backups
1304 from the shell and/or normal file management tools, because the filenames
1305 of the disk volumes match the content.
1307 Notes: The configuration option could be "Relabel after Recycling = Yes".
1310 ========= Add new items above this line =================
1313 ============= Empty Feature Request form ===========
1314 Item n: One line summary ...
1315 Date: Date submitted
1316 Origin: Name and email of originator.
1319 What: More detailed explanation ...
1321 Why: Why it is important ...
1323 Notes: Additional notes or features (omit if not used)
1324 ============== End Feature Request form ==============
1327 ========== Items put on hold by Kern ============================