]> git.sur5r.net Git - bacula/bacula/blob - bacula/projects
kes Rework projects file to be current and ready for a vote.
[bacula/bacula] / bacula / projects
1                 
2 Projects:
3                      Bacula Projects Roadmap 
4                     Status updated 18 August 2007
5                   After removing items completed in version  
6                        2.2.0 and renumbering
7
8 Items Completed:
9
10 Summary:
11 Item  1:  Accurate restoration of renamed/deleted files
12 Item  2:  Allow FD to initiate a backup
13 Item  3:  Merge multiple backups (Synthetic Backup or Consolidation)
14 Item  4:  Implement Catalog directive for Pool resource in Director
15 Item  5:  Add an item to the restore option where you can select a Pool
16 Item  6:  Deletion of disk Volumes when pruned
17 Item  7:  Implement Base jobs
18 Item  8:  Implement Copy pools
19 Item  9:  Scheduling syntax that permits more flexibility and options
20 Item 10:  Message mailing based on backup types
21 Item 11:  Cause daemons to use a specific IP address to source communications
22 Item 12:  Add Plug-ins to the FileSet Include statements.
23 Item 13:  Restore only file attributes (permissions, ACL, owner, group...)
24 Item 14:  Add an override in Schedule for Pools based on backup types
25 Item 15:  Implement more Python events and functions
26 Item 16:  Allow inclusion/exclusion of files in a fileset by creation/mod times
27 Item 17:  Automatic promotion of backup levels based on backup size
28 Item 18:  Better control over Job execution
29 Item 19:  Automatic disabling of devices
30 Item 20:  An option to operate on all pools with update vol parameters
31 Item 21:  Include timestamp of job launch in "stat clients" output
32 Item 22:  Implement Storage daemon compression
33 Item 23:  Improve Bacula's tape and drive usage and cleaning management
34 Item 24:  Multiple threads in file daemon for the same job
35 Item 25:  Archival (removal) of User Files to Tape
36
37
38 Item  1:  Accurate restoration of renamed/deleted files
39   Date:   28 November 2005
40   Origin: Martin Simmons (martin at lispworks dot com)
41   Status: Robert Nelson will implement this
42
43   What:   When restoring a fileset for a specified date (including "most
44           recent"), Bacula should give you exactly the files and directories
45           that existed at the time of the last backup prior to that date.
46
47           Currently this only works if the last backup was a Full backup.
48           When the last backup was Incremental/Differential, files and
49           directories that have been renamed or deleted since the last Full
50           backup are not currently restored correctly.  Ditto for files with
51           extra/fewer hard links than at the time of the last Full backup.
52
53   Why:    Incremental/Differential would be much more useful if this worked.
54
55   Notes:  Merging of multiple backups into a single one seems to
56           rely on this working, otherwise the merged backups will not be
57           truly equivalent to a Full backup.  
58
59   Note:   Kern: notes shortened. This can be done without the need for 
60           inodes. It is essentially the same as the current Verify job,
61           but one additional database record must be written, which does 
62           not need any database change.
63
64   Notes:  Kern: see if we can correct restoration of directories if
65           replace=ifnewer is set.  Currently, if the directory does not
66           exist, a "dummy" directory is created, then when all the files
67           are updated, the dummy directory is newer so the real values
68           are not updated.
69
70 Item  2:  Allow FD to initiate a backup
71   Origin: Frank Volf (frank at deze dot org)
72   Date:   17 November 2005
73   Status:
74
75    What:  Provide some means, possibly by a restricted console that
76           allows a FD to initiate a backup, and that uses the connection
77           established by the FD to the Director for the backup so that
78           a Director that is firewalled can do the backup.
79
80    Why:   Makes backup of laptops much easier.
81
82
83 Item  3:  Merge multiple backups (Synthetic Backup or Consolidation) 
84   Origin: Marc Cousin and Eric Bollengier 
85   Date:   15 November 2005
86   Status: 
87
88   What:   A merged backup is a backup made without connecting to the Client.
89           It would be a Merge of existing backups into a single backup.
90           In effect, it is like a restore but to the backup medium.
91
92           For instance, say that last Sunday we made a full backup.  Then
93           all week long, we created incremental backups, in order to do
94           them fast.  Now comes Sunday again, and we need another full.
95           The merged backup makes it possible to do instead an incremental
96           backup (during the night for instance), and then create a merged
97           backup during the day, by using the full and incrementals from
98           the week.  The merged backup will be exactly like a full made
99           Sunday night on the tape, but the production interruption on the
100           Client will be minimal, as the Client will only have to send
101           incrementals.
102
103           In fact, if it's done correctly, you could merge all the
104           Incrementals into single Incremental, or all the Incrementals
105           and the last Differential into a new Differential, or the Full,
106           last differential and all the Incrementals into a new Full
107           backup.  And there is no need to involve the Client.
108
109   Why:    The benefit is that :
110           - the Client just does an incremental ;
111           - the merged backup on tape is just as a single full backup,
112             and can be restored very fast.
113
114           This is also a way of reducing the backup data since the old
115           data can then be pruned (or not) from the catalog, possibly
116           allowing older volumes to be recycled
117
118 Item  4:  Implement Catalog directive for Pool resource in Director
119   Origin: Alan Davis adavis@ruckus.com
120   Date:   6 March 2007
121   Status: Submitted
122  
123   What:   The current behavior is for the director to create all pools
124           found in the configuration file in all catalogs.  Add a
125           Catalog directive to the Pool resource to specify which
126           catalog to use for each pool definition.
127  
128   Why:    This allows different catalogs to have different pool
129           attributes and eliminates the side-effect of adding
130           pools to catalogs that don't need/use them.
131  
132   Notes:  Kern: I think this is relatively easy to do, and it is really
133           a pre-requisite to a number of the Copy pool, ... projects
134           that are listed here.
135
136 Item  5:  Add an item to the restore option where you can select a Pool
137   Origin: kshatriyak at gmail dot com
138     Date: 1/1/2006
139   Status:
140
141     What: In the restore option (Select the most recent backup for a
142           client) it would be useful to add an option where you can limit
143           the selection to a certain pool.
144
145      Why: When using cloned jobs, most of the time you have 2 pools - a
146           disk pool and a tape pool.  People who have 2 pools would like to
147           select the most recent backup from disk, not from tape (tape
148           would be only needed in emergency).  However, the most recent
149           backup (which may just differ a second from the disk backup) may
150           be on tape and would be selected.  The problem becomes bigger if
151           you have a full and differential - the most "recent" full backup
152           may be on disk, while the most recent differential may be on tape
153           (though the differential on disk may differ even only a second or
154           so).  Bacula will complain that the backups reside on different
155           media then.  For now the only solution now when restoring things
156           when you have 2 pools is to manually search for the right
157           job-id's and enter them by hand, which is a bit fault tolerant.
158
159   Notes:  Kern: This is a nice idea. It could also be the way to support
160           Jobs that have been Copied (similar to migration, but not yet
161           implemented).
162
163
164
165 Item  6:  Deletion of disk Volumes when pruned
166   Date:   Nov 25, 2005
167   Origin: Ross Boylan <RossBoylan at stanfordalumni dot org> (edited
168           by Kern)
169   Status:         
170
171    What:  Provide a way for Bacula to automatically remove Volumes
172           from the filesystem, or optionally to truncate them.
173           Obviously, the Volume must be pruned prior removal.
174
175   Why:    This would allow users more control over their Volumes and
176           prevent disk based volumes from consuming too much space.
177
178   Notes:  The following two directives might do the trick:
179
180           Volume Data Retention = <time period>
181           Remove Volume After = <time period>
182
183           The migration project should also remove a Volume that is
184           migrated. This might also work for tape Volumes.
185
186 Item  7:  Implement Base jobs 
187   Date:   28 October 2005
188   Origin: Kern
189   Status: 
190   
191   What:   A base job is sort of like a Full save except that you 
192           will want the FileSet to contain only files that are
193           unlikely to change in the future (i.e.  a snapshot of
194           most of your system after installing it).  After the
195           base job has been run, when you are doing a Full save,
196           you specify one or more Base jobs to be used.  All
197           files that have been backed up in the Base job/jobs but
198           not modified will then be excluded from the backup.
199           During a restore, the Base jobs will be automatically
200           pulled in where necessary.
201
202   Why:    This is something none of the competition does, as far as
203           we know (except perhaps BackupPC, which is a Perl program that
204           saves to disk only).  It is big win for the user, it
205           makes Bacula stand out as offering a unique
206           optimization that immediately saves time and money.
207           Basically, imagine that you have 100 nearly identical
208           Windows or Linux machine containing the OS and user
209           files.  Now for the OS part, a Base job will be backed
210           up once, and rather than making 100 copies of the OS,
211           there will be only one.  If one or more of the systems
212           have some files updated, no problem, they will be
213           automatically restored.
214
215   Notes:  Huge savings in tape usage even for a single machine.
216           Will require more resources because the DIR must send
217           FD a list of files/attribs, and the FD must search the
218           list and compare it for each file to be saved.
219
220
221 Item  8:  Implement Copy pools
222   Date:   27 November 2005
223   Origin: David Boyes (dboyes at sinenomine dot net)
224   Status:
225
226   What:   I would like Bacula to have the capability to write copies
227           of backed-up data on multiple physical volumes selected
228           from different pools without transferring the data
229           multiple times, and to accept any of the copy volumes
230           as valid for restore.
231
232   Why:    In many cases, businesses are required to keep offsite
233           copies of backup volumes, or just wish for simple
234           protection against a human operator dropping a storage
235           volume and damaging it. The ability to generate multiple
236           volumes in the course of a single backup job allows
237           customers to simple check out one copy and send it
238           offsite, marking it as out of changer or otherwise
239           unavailable. Currently, the library and magazine
240           management capability in Bacula does not make this process
241           simple.
242
243           Restores would use the copy of the data on the first
244           available volume, in order of Copy pool chain definition.
245
246           This is also a major scalability issue -- as the number of
247           clients increases beyond several thousand, and the volume
248           of data increases, transferring the data multiple times to
249           produce additional copies of the backups will become
250           physically impossible due to transfer speed
251           issues. Generating multiple copies at server side will
252           become the only practical option. 
253
254   How:    I suspect that this will require adding a multiplexing
255           SD that appears to be a SD to a specific FD, but 1-n FDs
256           to the specific back end SDs managing the primary and copy
257           pools.  Storage pools will also need to acquire parameters
258           to define the pools to be used for copies. 
259
260   Notes:  I would commit some of my developers' time if we can agree
261           on the design and behavior. 
262
263   Notes:  I get the idea, but would like more details on the precise
264           syntax of the necessary directives and what they would do.
265
266
267 Item  9:  Scheduling syntax that permits more flexibility and options
268    Date:  15 December 2006
269   Origin: Gregory Brauer (greg at wildbrain dot com) and
270           Florian Schnabel <florian.schnabel at docufy dot de>
271   Status:
272
273    What:  Currently, Bacula only understands how to deal with weeks of the
274           month or weeks of the year in schedules.  This makes it impossible
275           to do a true weekly rotation of tapes.  There will always be a
276           discontinuity that will require disruptive manual intervention at
277           least monthly or yearly because week boundaries never align with
278           month or year boundaries.
279
280           A solution would be to add a new syntax that defines (at least)
281           a start timestamp, and repetition period.
282
283           An easy option to skip a certain job  on a certain date.
284    
285
286      Why: Rotated backups done at weekly intervals are useful, and Bacula
287           cannot currently do them without extensive hacking.
288
289           You could then easily skip tape backups on holidays.  Especially
290           if you got no autochanger and can only fit one backup on a tape
291           that would be really handy, other jobs could proceed normally
292           and you won't get errors that way.
293
294
295    Notes: Here is an example syntax showing a 3-week rotation where full
296           Backups would be performed every week on Saturday, and an
297           incremental would be performed every week on Tuesday.  Each
298           set of tapes could be removed from the loader for the following
299           two cycles before coming back and being reused on the third
300           week.  Since the execution times are determined by intervals
301           from a given point in time, there will never be any issues with
302           having to adjust to any sort of arbitrary time boundary.  In
303           the example provided, I even define the starting schedule
304           as crossing both a year and a month boundary, but the run times
305           would be based on the "Repeat" value and would therefore happen
306           weekly as desired.
307
308
309           Schedule {
310               Name = "Week 1 Rotation"
311               #Saturday.  Would run Dec 30, Jan 20, Feb 10, etc.
312               Run {
313                   Options {
314                       Type   = Full
315                       Start  = 2006-12-30 01:00
316                       Repeat = 3w
317                   }
318               }
319               #Tuesday.  Would run Jan 2, Jan 23, Feb 13, etc.
320               Run {
321                   Options {
322                       Type   = Incremental
323                       Start  = 2007-01-02 01:00
324                       Repeat = 3w
325                   }
326               }
327           }
328
329           Schedule {
330               Name = "Week 2 Rotation"
331               #Saturday.  Would run Jan 6, Jan 27, Feb 17, etc.
332               Run {
333                   Options {
334                       Type   = Full
335                       Start  = 2007-01-06 01:00
336                       Repeat = 3w
337                   }
338               }
339               #Tuesday.  Would run Jan 9, Jan 30, Feb 20, etc.
340               Run {
341                   Options {
342                       Type   = Incremental
343                       Start  = 2007-01-09 01:00
344                       Repeat = 3w
345                   }
346               }
347           }
348
349           Schedule {
350               Name = "Week 3 Rotation"
351               #Saturday.  Would run Jan 13, Feb 3, Feb 24, etc.
352               Run {
353                   Options {
354                       Type   = Full
355                       Start  = 2007-01-13 01:00
356                       Repeat = 3w
357                   }
358               }
359               #Tuesday.  Would run Jan 16, Feb 6, Feb 27, etc.
360               Run {
361                   Options {
362                       Type   = Incremental
363                       Start  = 2007-01-16 01:00
364                       Repeat = 3w
365                   }
366               }
367           }
368
369    Notes: Kern: I have merged the previously separate project of skipping 
370           jobs (via Schedule syntax) into this.
371
372
373 Item 10:  Message mailing based on backup types
374  Origin:  Evan Kaufman <evan.kaufman@gmail.com>
375    Date:  January 6, 2006
376  Status:
377
378    What:  In the "Messages" resource definitions, allowing messages
379           to be mailed based on the type (backup, restore, etc.) and level
380           (full, differential, etc) of job that created the originating
381           message(s).
382
383  Why:     It would, for example, allow someone's boss to be emailed
384           automatically only when a Full Backup job runs, so he can
385           retrieve the tapes for offsite storage, even if the IT dept.
386           doesn't (or can't) explicitly notify him.  At the same time, his
387           mailbox wouldnt be filled by notifications of Verifies, Restores,
388           or Incremental/Differential Backups (which would likely be kept
389           onsite).
390
391  Notes:   One way this could be done is through additional message types, for example:
392
393    Messages {
394      # email the boss only on full system backups
395      Mail = boss@mycompany.com = full, !incremental, !differential, !restore, 
396             !verify, !admin
397      # email us only when something breaks
398      MailOnError = itdept@mycompany.com = all
399    }
400
401    Notes: Kern: This should be rather trivial to implement.
402
403
404 Item 11:  Cause daemons to use a specific IP address to source communications
405  Origin:  Bill Moran <wmoran@collaborativefusion.com>
406  Date:    18 Dec 2006
407  Status:
408  What:    Cause Bacula daemons (dir, fd, sd) to always use the ip address
409           specified in the [DIR|DF|SD]Addr directive as the source IP
410           for initiating communication.
411  Why:     On complex networks, as well as extremely secure networks, it's
412           not unusual to have multiple possible routes through the network.
413           Often, each of these routes is secured by different policies
414           (effectively, firewalls allow or deny different traffic depending
415           on the source address)
416           Unfortunately, it can sometimes be difficult or impossible to
417           represent this in a system routing table, as the result is
418           excessive subnetting that quickly exhausts available IP space.
419           The best available workaround is to provide multiple IPs to
420           a single machine that are all on the same subnet.  In order
421           for this to work properly, applications must support the ability
422           to bind outgoing connections to a specified address, otherwise
423           the operating system will always choose the first IP that
424           matches the required route.
425  Notes:   Many other programs support this.  For example, the following
426           can be configured in BIND:
427           query-source address 10.0.0.1;
428           transfer-source 10.0.0.2;
429           Which means queries from this server will always come from
430           10.0.0.1 and zone transfers will always originate from
431           10.0.0.2.
432
433
434 Item 12:  Add Plug-ins to the FileSet Include statements.
435   Date:   28 October 2005
436   Origin: Kern
437   Status: Partially coded in 1.37 -- much more to do.
438
439   What:   Allow users to specify wild-card and/or regular
440           expressions to be matched in both the Include and
441           Exclude directives in a FileSet.  At the same time,
442           allow users to define plug-ins to be called (based on
443           regular expression/wild-card matching).
444
445   Why:    This would give the users the ultimate ability to control
446           how files are backed up/restored.  A user could write a
447           plug-in knows how to backup his Oracle database without
448           stopping/starting it, for example.
449
450
451 Item 13:  Restore only file attributes (permissions, ACL, owner, group...)
452   Origin: Eric Bollengier
453   Date:   30/12/2006
454   Status:
455
456   What:   The goal of this project is to be able to restore only rights
457           and attributes of files without crushing them.
458
459   Why:    Who have never had to repair a chmod -R 777, or a wild update
460           of recursive right under Windows? At this time, you must have
461           enough space to restore data, dump attributes (easy with acl,
462           more complex with unix/windows rights) and apply them to your 
463           broken tree. With this options, it will be very easy to compare
464           right or ACL over the time.
465
466   Notes:  If the file is here, we skip restore and we change rights.
467           If the file isn't here, we can create an empty one and apply
468           rights or do nothing.
469
470
471
472 Item 14:  Add an override in Schedule for Pools based on backup types
473 Date:     19 Jan 2005
474 Origin:   Chad Slater <chad.slater@clickfox.com>
475 Status: 
476                                                 
477   What:   Adding a FullStorage=BigTapeLibrary in the Schedule resource
478           would help those of us who use different storage devices for different
479           backup levels cope with the "auto-upgrade" of a backup.
480
481   Why:    Assume I add several new devices to be backed up, i.e. several
482           hosts with 1TB RAID.  To avoid tape switching hassles, incrementals are
483           stored in a disk set on a 2TB RAID.  If you add these devices in the
484           middle of the month, the incrementals are upgraded to "full" backups,
485           but they try to use the same storage device as requested in the
486           incremental job, filling up the RAID holding the differentials.  If we
487           could override the Storage parameter for full and/or differential
488           backups, then the Full job would use the proper Storage device, which
489           has more capacity (i.e. a 8TB tape library.
490
491
492 Item 15:  Implement more Python events and functions
493   Date:   28 October 2005
494   Origin: Kern
495   Status: 
496
497   What:   Allow Python scripts to be called at more places 
498           within Bacula and provide additional access to Bacula
499           internal variables.
500
501           Implement an interface for Python scripts to access the
502           catalog through Bacula.
503
504   Why:    This will permit users to customize Bacula through
505           Python scripts.
506
507   Notes:  Recycle event
508           Scratch pool event
509           NeedVolume event
510           MediaFull event
511            
512           Also add a way to get a listing of currently running
513           jobs (possibly also scheduled jobs).
514
515
516           to start the appropriate job.
517
518
519 Item 16:  Allow inclusion/exclusion of files in a fileset by creation/mod times
520   Origin: Evan Kaufman <evan.kaufman@gmail.com>
521   Date:   January 11, 2006
522   Status:
523
524   What:   In the vein of the Wild and Regex directives in a Fileset's
525           Options, it would be helpful to allow a user to include or exclude
526           files and directories by creation or modification times.
527
528           You could factor the Exclude=yes|no option in much the same way it
529           affects the Wild and Regex directives.  For example, you could exclude
530           all files modified before a certain date:
531
532    Options {
533      Exclude = yes
534      Modified Before = ####
535    }
536
537            Or you could exclude all files created/modified since a certain date:
538
539    Options {
540       Exclude = yes
541      Created Modified Since = ####
542    }
543
544            The format of the time/date could be done several ways, say the number
545            of seconds since the epoch:
546            1137008553 = Jan 11 2006, 1:42:33PM   # result of `date +%s`
547
548            Or a human readable date in a cryptic form:
549            20060111134233 = Jan 11 2006, 1:42:33PM   # YYYYMMDDhhmmss
550
551   Why:    I imagine a feature like this could have many uses. It would
552           allow a user to do a full backup while excluding the base operating
553           system files, so if I installed a Linux snapshot from a CD yesterday,
554           I'll *exclude* all files modified *before* today.  If I need to
555           recover the system, I use the CD I already have, plus the tape backup.
556           Or if, say, a Windows client is hit by a particularly corrosive
557           virus, and I need to *exclude* any files created/modified *since* the
558           time of infection.
559
560   Notes:  Of course, this feature would work in concert with other
561           in/exclude rules, and wouldnt override them (or each other).
562
563   Notes:  The directives I'd imagine would be along the lines of
564           "[Created] [Modified] [Before|Since] = <date>".
565           So one could compare against 'ctime' and/or 'mtime', but ONLY 'before'
566            or 'since'.
567
568         
569 Item 17:  Automatic promotion of backup levels based on backup size
570    Date:  19 January 2006
571   Origin: Adam Thornton <athornton@sinenomine.net>
572   Status: 
573
574     What: Amanda has a feature whereby it estimates the space that a  
575           differential, incremental, and full backup would take.  If the  
576           difference in space required between the scheduled level and the next  
577           level up is beneath some user-defined critical threshold, the backup  
578           level is bumped to the next type.  Doing this minimizes the number of  
579           volumes necessary during a restore, with a fairly minimal cost in  
580           backup media space.
581
582     Why:  I know at least one (quite sophisticated and smart) user  
583           for whom the absence of this feature is a deal-breaker in terms of  
584           using Bacula; if we had it it would eliminate the one cool thing  
585           Amanda can do and we can't (at least, the one cool thing I know of).
586
587
588 Item 18:  Better control over Job execution
589    Date:  18 August 2007
590   Origin: Kern
591   Status: 
592
593     What: Bacula needs a few extra features for better Job execution:
594           1. A way to prevent multiple Jobs of the same name from
595              being scheduled at the same time (ususally happens when
596              a job is missed because a client is down).
597           2. Directives that permit easier upgrading of Job types
598              based on a period of time. I.e. "do a Full at least
599              once every 2 weeks", or "do a differential at least
600              once a week". If a lower level job is scheduled when
601              it begins to run it will be upgraded depending on
602              the specified criteria.
603
604     Why:  Obvious.
605    
606
607 Item 19:  Automatic disabling of devices
608    Date:  2005-11-11
609   Origin: Peter Eriksson <peter at ifm.liu dot se>
610   Status:
611
612    What:  After a configurable amount of fatal errors with a tape drive
613           Bacula should automatically disable further use of a certain
614           tape drive. There should also be "disable"/"enable" commands in
615           the "bconsole" tool.
616
617    Why:   On a multi-drive jukebox there is a possibility of tape drives
618           going bad during large backups (needing a cleaning tape run,
619           tapes getting stuck). It would be advantageous if Bacula would
620           automatically disable further use of a problematic tape drive
621           after a configurable amount of errors has occurred.
622
623           An example: I have a multi-drive jukebox (6 drives, 380+ slots)
624           where tapes occasionally get stuck inside the drive. Bacula will
625           notice that the "mtx-changer" command will fail and then fail
626           any backup jobs trying to use that drive. However, it will still
627           keep on trying to run new jobs using that drive and fail -
628           forever, and thus failing lots and lots of jobs... Since we have
629           many drives Bacula could have just automatically disabled
630           further use of that drive and used one of the other ones
631           instead.
632
633 Item 20:  An option to operate on all pools with update vol parameters
634   Origin: Dmitriy Pinchukov <absh@bossdev.kiev.ua>
635    Date:  16 August 2006
636   Status:
637
638    What:  When I do update -> Volume parameters -> All Volumes
639           from Pool, then I have to select pools one by one.  I'd like
640           console to have an option like "0: All Pools" in the list of
641           defined pools.
642
643    Why:   I have many pools and therefore unhappy with manually
644           updating each of them using update -> Volume parameters -> All
645           Volumes from Pool -> pool #.
646
647
648 Item 21:  Include timestamp of job launch in "stat clients" output
649   Origin: Mark Bergman <mark.bergman@uphs.upenn.edu>
650   Date:   Tue Aug 22 17:13:39 EDT 2006
651   Status:
652
653   What:   The "stat clients" command doesn't include any detail on when
654           the active backup jobs were launched.
655
656   Why:    Including the timestamp would make it much easier to decide whether
657           a job is running properly. 
658
659   Notes:  It may be helpful to have the output from "stat clients" formatted 
660           more like that from "stat dir" (and other commands), in a column
661           format. The per-client information that's currently shown (level,
662           client name, JobId, Volume, pool, device, Files, etc.) is good, but
663           somewhat hard to parse (both programmatically and visually), 
664           particularly when there are many active clients.
665
666
667
668 Item 22:  Implement Storage daemon compression
669   Date:   18 December 2006
670   Origin: Vadim A. Umanski , e-mail umanski@ext.ru
671   Status:
672   What:   The ability to compress backup data on the SD receiving data
673           instead of doing that on client sending data.
674   Why:    The need is practical. I've got some machines that can send
675           data to the network 4 or 5 times faster than compressing
676           them (I've measured that). They're using fast enough SCSI/FC
677           disk subsystems but rather slow CPUs (ex. UltraSPARC II).
678           And the backup server has got a quite fast CPUs (ex. Dual P4
679           Xeons) and quite a low load. When you have 20, 50 or 100 GB
680           of raw data - running a job 4 to 5 times faster - that
681           really matters. On the other hand, the data can be
682           compressed 50% or better - so losing twice more space for
683           disk backup is not good at all. And the network is all mine
684           (I have a dedicated management/provisioning network) and I
685           can get as high bandwidth as I need - 100Mbps, 1000Mbps...
686           That's why the server-side compression feature is needed!
687   Notes:
688
689 Item 23:  Improve Bacula's tape and drive usage and cleaning management 
690   Date:   8 November 2005, November 11, 2005
691   Origin: Adam Thornton <athornton at sinenomine dot net>,
692           Arno Lehmann <al at its-lehmann dot de>
693   Status:
694
695   What:   Make Bacula manage tape life cycle information, tape reuse
696           times and drive cleaning cycles.
697
698   Why:    All three parts of this project are important when operating
699           backups.
700           We need to know which tapes need replacement, and we need to
701           make sure the drives are cleaned when necessary.  While many
702           tape libraries and even autoloaders can handle all this
703           automatically, support by Bacula can be helpful for smaller
704           (older) libraries and single drives.  Limiting the number of
705           times a tape is used might prevent tape errors when using
706           tapes until the drives can't read it any more.  Also, checking
707           drive status during operation can prevent some failures (as I
708           [Arno] had to learn the hard way...)
709
710   Notes:  First, Bacula could (and even does, to some limited extent)
711           record tape and drive usage.  For tapes, the number of mounts,
712           the amount of data, and the time the tape has actually been
713           running could be recorded.  Data fields for Read and Write
714           time and Number of mounts already exist in the catalog (I'm
715           not sure if VolBytes is the sum of all bytes ever written to
716           that volume by Bacula).  This information can be important
717           when determining which media to replace.  The ability to mark
718           Volumes as "used up" after a given number of write cycles
719           should also be implemented so that a tape is never actually
720           worn out.  For the tape drives known to Bacula, similar
721           information is interesting to determine the device status and
722           expected life time: Time it's been Reading and Writing, number
723           of tape Loads / Unloads / Errors.  This information is not yet
724           recorded as far as I [Arno] know.  A new volume status would
725           be necessary for the new state, like "Used up" or "Worn out".
726           Volumes with this state could be used for restores, but not
727           for writing. These volumes should be migrated first (assuming
728           migration is implemented) and, once they are no longer needed,
729           could be moved to a Trash pool.
730
731           The next step would be to implement a drive cleaning setup.
732           Bacula already has knowledge about cleaning tapes.  Once it
733           has some information about cleaning cycles (measured in drive
734           run time, number of tapes used, or calender days, for example)
735           it can automatically execute tape cleaning (with an
736           autochanger, obviously) or ask for operator assistance loading
737           a cleaning tape.
738
739           The final step would be to implement TAPEALERT checks not only
740           when changing tapes and only sending the information to the
741           administrator, but rather checking after each tape error,
742           checking on a regular basis (for example after each tape
743           file), and also before unloading and after loading a new tape.
744           Then, depending on the drives TAPEALERT state and the known
745           drive cleaning state Bacula could automatically schedule later
746           cleaning, clean immediately, or inform the operator.
747
748           Implementing this would perhaps require another catalog change
749           and perhaps major changes in SD code and the DIR-SD protocol,
750           so I'd only consider this worth implementing if it would
751           actually be used or even needed by many people.
752
753           Implementation of these projects could happen in three distinct
754           sub-projects: Measuring Tape and Drive usage, retiring
755           volumes, and handling drive cleaning and TAPEALERTs.
756
757 Item 24:  Multiple threads in file daemon for the same job
758   Date:   27 November 2005
759   Origin: Ove Risberg (Ove.Risberg at octocode dot com)
760   Status:
761
762   What:   I want the file daemon to start multiple threads for a backup
763           job so the fastest possible backup can be made.
764
765           The file daemon could parse the FileSet information and start
766           one thread for each File entry located on a separate
767           filesystem.
768
769           A confiuration option in the job section should be used to
770           enable or disable this feature. The confgutration option could
771           specify the maximum number of threads in the file daemon.
772
773           If the theads could spool the data to separate spool files
774           the restore process will not be much slower.
775
776   Why:    Multiple concurrent backups of a large fileserver with many
777           disks and controllers will be much faster.
778
779 Item 25:  Archival (removal) of User Files to Tape
780   Date:   Nov. 24/2005 
781   Origin: Ray Pengelly [ray at biomed dot queensu dot ca
782   Status: 
783
784   What:   The ability to archive data to storage based on certain parameters
785           such as age, size, or location.  Once the data has been written to
786           storage and logged it is then pruned from the originating
787           filesystem. Note! We are talking about user's files and not
788           Bacula Volumes.
789
790   Why:    This would allow fully automatic storage management which becomes
791           useful for large datastores.  It would also allow for auto-staging
792           from one media type to another.
793
794           Example 1) Medical imaging needs to store large amounts of data.
795           They decide to keep data on their servers for 6 months and then put
796           it away for long term storage.  The server then finds all files
797           older than 6 months writes them to tape.  The files are then removed
798           from the server.
799
800           Example 2) All data that hasn't been accessed in 2 months could be
801           moved from high-cost, fibre-channel disk storage to a low-cost
802           large-capacity SATA disk storage pool which doesn't have as quick of
803           access time.  Then after another 6 months (or possibly as one
804           storage pool gets full) data is migrated to Tape.
805
806
807
808
809 ========== Items on put hold by Kern ============================
810
811 Item h1:  Split documentation
812   Origin: Maxx <maxxatworkat gmail dot com>
813   Date:   27th July 2006
814   Status: Approved, awaiting implementation
815
816   What:   Split documentation in several books
817
818   Why:    Bacula manual has now more than 600 pages, and looking for
819           implementation details is getting complicated.  I think
820           it would be good to split the single volume in two or
821           maybe three parts:
822
823           1) Introduction, requirements and tutorial, typically
824              are useful only until first installation time
825
826           2) Basic installation and configuration, with all the
827              gory details about the directives supported 3)
828              Advanced Bacula: testing, troubleshooting, GUI and
829              ancillary programs, security managements, scripting,
830              etc.
831
832   Notes:  This is a project that needs to be done, and will be implemented,
833           but it is really a developer issue of timing, and does not 
834           needed to be included in the voting.
835
836
837 Item h2:  Implement support for stacking arbitrary stream filters, sinks.
838 Date:     23 November 2006
839 Origin:   Landon Fuller <landonf@threerings.net>
840 Status:   Planning. Assigned to landonf.
841
842   What:   Implement support for the following:
843           - Stacking arbitrary stream filters (eg, encryption, compression,  
844             sparse data handling))
845           - Attaching file sinks to terminate stream filters (ie, write out  
846             the resultant data to a file)
847           - Refactor the restoration state machine accordingly
848
849    Why:   The existing stream implementation suffers from the following:
850            - All state (compression, encryption, stream restoration), is  
851              global across the entire restore process, for all streams. There are  
852              multiple entry and exit points in the restoration state machine, and  
853              thus multiple places where state must be allocated, deallocated,  
854              initialized, or reinitialized. This results in exceptional complexity  
855              for the author of a stream filter.
856            - The developer must enumerate all possible combinations of filters  
857              and stream types (ie, win32 data with encryption, without encryption,  
858              with encryption AND compression, etc).
859
860   Notes:  This feature request only covers implementing the stream filters/ 
861           sinks, and refactoring the file daemon's restoration implementation  
862           accordingly. If I have extra time, I will also rewrite the backup  
863           implementation. My intent in implementing the restoration first is to  
864           solve pressing bugs in the restoration handling, and to ensure that  
865           the new restore implementation handles existing backups correctly.
866
867           I do not plan on changing the network or tape data structures to  
868           support defining arbitrary stream filters, but supporting that  
869           functionality is the ultimate goal.
870
871           Assistance with either code or testing would be fantastic.
872
873   Notes:  Kern: this project has a lot of merit, and we need to do it, but
874           it is really an issue for developers rather than a new feature
875           for users, so I have removed it from the voting list, but kept it
876           here, but at some point, it will be implemented.
877
878 Item h3:  Filesystem watch triggered backup.
879   Date:   31 August 2006
880   Origin: Jesper Krogh <jesper@krogh.cc>
881   Status: 
882
883   What:   With inotify and similar filesystem triggeret notification
884           systems is it possible to have the file-daemon to monitor
885           filesystem changes and initiate backup.
886
887   Why:    There are 2 situations where this is nice to have.
888           1) It is possible to get a much finer-grained backup than
889              the fixed schedules used now.. A file created and deleted
890              a few hours later, can automatically be caught.
891
892           2) The introduced load on the system will probably be
893              distributed more even on the system.
894
895   Notes:  This can be combined with configration that specifies
896           something like: "at most every 15 minutes or when changes
897           consumed XX MB".
898
899 Kern Notes: I would rather see this implemented by an external program
900           that monitors the Filesystem changes, then uses the console
901
902
903 Item h4:  Directive/mode to backup only file changes, not entire file
904   Date:   11 November 2005
905   Origin: Joshua Kugler <joshua dot kugler at uaf dot edu>
906           Marek Bajon <mbajon at bimsplus dot com dot pl>
907   Status: 
908
909   What:   Currently when a file changes, the entire file will be backed up in
910           the next incremental or full backup.  To save space on the tapes
911           it would be nice to have a mode whereby only the changes to the
912           file would be backed up when it is changed.
913
914   Why:    This would save lots of space when backing up large files such as 
915           logs, mbox files, Outlook PST files and the like.
916
917   Notes:  This would require the usage of disk-based volumes as comparing 
918           files would not be feasible using a tape drive.
919
920   Notes:  Kern: I don't know how to implement this. Put on hold until someone
921           provides a detailed implementation plan.
922
923
924 Item h5:  Implement multiple numeric backup levels as supported by dump
925 Date:     3 April 2006
926 Origin:   Daniel Rich <drich@employees.org>
927 Status:
928 What:     Dump allows specification of backup levels numerically instead of just
929           "full", "incr", and "diff".  In this system, at any given level, all
930           files are backed up that were were modified since the last backup of a
931           higher level (with 0 being the highest and 9 being the lowest).  A
932           level 0 is therefore equivalent to a full, level 9 an incremental, and
933           the levels 1 through 8 are varying levels of differentials.  For
934           bacula's sake, these could be represented as "full", "incr", and
935           "diff1", "diff2", etc.
936
937 Why:      Support of multiple backup levels would provide for more advanced backup
938           rotation schemes such as "Towers of Hanoi".  This would allow better
939           flexibility in performing backups, and can lead to shorter recover
940           times.
941
942 Notes:    Legato Networker supports a similar system with full, incr, and 1-9 as
943           levels.
944
945 Notes:    Kern: I don't see the utility of this, and it would be a *huge* 
946           modification to existing code.
947
948 Item h6:  Implement NDMP protocol support
949   Origin: Alan Davis
950   Date:   06 March 2007
951   Status: 
952
953   What:   Network Data Management Protocol is implemented by a number of
954           NAS filer vendors to enable backups using third-party
955           software.
956
957   Why:    This would allow NAS filer backups in Bacula without incurring
958           the overhead of NFS or SBM/CIFS.
959
960   Notes:  Further information is available:
961           http://www.ndmp.org
962           http://www.ndmp.org/wp/wp.shtml
963           http://www.traakan.com/ndmjob/index.html
964
965           There are currently no viable open-source NDMP
966           implementations.  There is a reference SDK and example
967           app available from ndmp.org but it has problems
968           compiling on recent Linux and Solaris OS'.  The ndmjob
969           reference implementation from Traakan is known to
970           compile on Solaris 10.
971
972   Notes:  Kern: I am not at all in favor of this until NDMP becomes
973           an Open Standard or until there are Open Source libraries
974           that interface to it.
975
976 Item h7:  Commercial database support
977   Origin: Russell Howe <russell_howe dot wreckage dot org>
978   Date:   26 July 2006
979   Status:
980
981   What:   It would be nice for the database backend to support more 
982           databases. I'm thinking of SQL Server at the moment, but I guess Oracle, 
983           DB2, MaxDB, etc are all candidates. SQL Server would presumably be 
984           implemented using FreeTDS or maybe an ODBC library?
985
986   Why:    We only really have one database server, which is MS SQL Server 
987           2000. Maintaining a second one for the backup software (we grew out of 
988           SQLite, which I liked, but which didn't work so well with our database 
989           size). We don't really have a machine with the resources to run 
990           postgres, and would rather only maintain a single DBMS. We're stuck with 
991           SQL Server because pretty much all the company's custom applications 
992           (written by consultants) are locked into SQL Server 2000. I can imagine 
993           this scenario is fairly common, and it would be nice to use the existing 
994           properly specced database server for storing Bacula's catalog, rather 
995           than having to run a second DBMS.
996
997   Notes:  This might be nice, but someone other than me will probably need to
998           implement it, and at the moment, proprietary code cannot legally be
999           mixed with Bacula GPLed code.  This would be possible only providing
1000           the vendors provide GPLed (or OpenSource) interface code.
1001
1002 Item h8:  Incorporation of XACML2/SAML2 parsing
1003    Date:   19 January 2006
1004    Origin: Adam Thornton <athornton@sinenomine.net>
1005    Status: Blue sky
1006
1007    What:   XACML is "eXtensible Access Control Markup Language" and  
1008           "SAML is the "Security Assertion Markup Language"--an XML standard  
1009           for making statements about identity and authorization.  Having these  
1010           would give us a framework to approach ACLs in a generic manner, and  
1011           in a way flexible enough to support the four major sorts of ACLs I  
1012           see as a concern to Bacula at this point, as well as (probably) to  
1013           deal with new sorts of ACLs that may appear in the future.
1014
1015    Why:    Bacula is beginning to need to back up systems with ACLs  
1016           that do not map cleanly onto traditional Unix permissions.  I see  
1017           four sets of ACLs--in general, mutually incompatible with one  
1018           another--that we're going to need to deal with.  These are: NTFS  
1019           ACLs, POSIX ACLs, NFSv4 ACLS, and AFS ACLS.  (Some may question the  
1020           relevance of AFS; AFS is one of Sine Nomine's core consulting  
1021           businesses, and having a reputable file-level backup and restore  
1022           technology for it (as Tivoli is probably going to drop AFS support  
1023           soon since IBM no longer supports AFS) would be of huge benefit to  
1024           our customers; we'd most likely create the AFS support at Sine Nomine  
1025           for inclusion into the Bacula (and perhaps some changes to the  
1026           OpenAFS volserver) core code.)
1027
1028           Now, obviously, Bacula already handles NTFS just fine.  However, I  
1029           think there's a lot of value in implementing a generic ACL model, so  
1030           that it's easy to support whatever particular instances of ACLs come  
1031           down the pike: POSIX ACLS (think SELinux) and NFSv4 are the obvious  
1032           things arriving in the Linux world in a big way in the near future.   
1033           XACML, although overcomplicated for our needs, provides this  
1034           framework, and we should be able to leverage other people's  
1035           implementations to minimize the amount of work *we* have to do to get  
1036           a generic ACL framework.  Basically, the costs of implementation are  
1037           high, but they're largely both external to Bacula and already sunk.
1038
1039    Notes: As you indicate this is a bit of "blue sky" or in other words,
1040           at the moment, it is a bit esoteric to consider for Bacula.
1041
1042 Item h9:  Archive data
1043   Date:   15/5/2006
1044   Origin: calvin streeting calvin at absentdream dot com
1045   Status:
1046
1047   What:   The abilty to archive to media (dvd/cd) in a uncompressed format
1048           for dead filing (archiving not backing up)
1049
1050     Why:  At work when jobs are finished and moved off of the main file
1051           servers (raid based systems) onto a simple Linux file server (ide based
1052           system) so users can find old information without contacting the IT
1053           dept.
1054
1055           So this data dosn't realy change it only gets added to,
1056           But it also needs backing up.  At the moment it takes
1057           about 8 hours to back up our servers (working data) so
1058           rather than add more time to existing backups i am trying
1059           to implement a system where we backup the acrhive data to
1060           cd/dvd these disks would only need to be appended to
1061           (burn only new/changed files to new disks for off site
1062           storage).  basialy understand the differnce between
1063           achive data and live data.
1064
1065   Notes:  Scan the data and email me when it needs burning divide
1066           into predefined chunks keep a recored of what is on what
1067           disk make me a label (simple php->mysql=>pdf stuff) i
1068           could do this bit ability to save data uncompresed so
1069           it can be read in any other system (future proof data)
1070           save the catalog with the disk as some kind of menu
1071           system 
1072
1073    Notes: Kern: I don't understand this item, and in any case, if it
1074           is specific to DVD/CDs, which we do not recommend using, 
1075           it is unlikely to be implemented except as a user 
1076           submitted patch.
1077
1078
1079 Item h10: Clustered file-daemons
1080   Origin: Alan Brown ajb2 at mssl dot ucl dot ac dot uk
1081   Date:   24 July 2006
1082   Status:
1083   What:   A "virtual" filedaemon, which is actually a cluster of real ones.
1084
1085   Why:    In the case of clustered filesystems (SAN setups, GFS, or OCFS2, etc)
1086           multiple machines may have access to the same set of filesystems
1087
1088           For performance reasons, one may wish to initate backups from
1089           several of these machines simultaneously, instead of just using
1090           one backup source for the common clustered filesystem.
1091
1092           For obvious reasons, normally backups of $A-FD/$PATH and
1093           B-FD/$PATH are treated as different backup sets. In this case
1094           they are the same communal set.
1095
1096           Likewise when restoring, it would be easier to just specify
1097           one of the cluster machines and let bacula decide which to use.
1098
1099           This can be faked to some extent using DNS round robin entries
1100           and a virtual IP address, however it means "status client" will
1101           always give bogus answers. Additionally there is no way of
1102           spreading the load evenly among the servers.
1103
1104           What is required is something similar to the storage daemon
1105           autochanger directives, so that Bacula can keep track of
1106           operating backups/restores and direct new jobs to a "free"
1107           client.
1108
1109    Notes: Kern: I don't understand the request enough to be able to
1110           implement it. A lot more design detail should be presented
1111           before voting on this project.
1112
1113
1114 ========== Already implemented ================================
1115
1116 Item  n:  make changing "spooldata=yes|no" possible for
1117           manual/interactive jobs
1118   Origin: Marc Schiffbauer <marc@schiffbauer.net>
1119   Date:   12 April 2007)
1120   Status: Already implemented by Eric
1121
1122   What:   Make it possible to modify the spooldata option
1123           for a job when being run from within the console.
1124           Currently it is possible to modify the backup level
1125           and the spooldata setting in a Schedule resource.
1126           It is also possible to modify the backup level when using
1127           the "run" command in the console. 
1128           But it is currently not possible to to the same 
1129           with "spooldata=yes|no" like:
1130
1131           run job=MyJob level=incremental spooldata=yes
1132
1133   Why:    In some situations it would be handy to be able to switch
1134           spooldata on or off for interactive/manual jobs based on
1135           which data the admin expects or how fast the LAN/WAN
1136           connection currently is.
1137
1138   Notes:  ./.
1139
1140 ============= Empty Feature Request form ===========
1141 Item  n:  One line summary ...
1142   Date:   Date submitted 
1143   Origin: Name and email of originator.
1144   Status: 
1145
1146   What:   More detailed explanation ...
1147
1148   Why:    Why it is important ...
1149
1150   Notes:  Additional notes or features (omit if not used)
1151 ============== End Feature Request form ==============