+- Look at installation file permissions with Scott so that make install
+ and the rpms agree.
+- Add a regression test for dbcheck.
+- Add disk seeking on restore.
+- Add atime preservation.
+- Allow for optional cancelling of SD and FD in case DIR
+ gets a fatal error. Requested by Jesse Guardiani <jesse@wingnet.net>
+- Do not err job if could not write bootstrap file.
+- Bizarre message: Error: Could not open WriteBootstrap file:
+- Build console in client only build.
+- For "list jobs" order by EndTime.
+- Add "limit=n" for "list jobs"
+- Check new HAVE_WIN32 open bits.
+- Make column listing for running jobs.
+ JobId Level Type Started Name Status
+- Make two tape fill test work.
+- Check if the tape has moved before writing.
+- Save and restore last_job across executions.
+- Implement restart of daemon.
+- Handling removable disks -- see below:
+- Multiple drive autochanger support -- see below.
+- Keep track of tape use time, and report when cleaning is necessary.
+- Add Events and Perl scripting.
+- See comtest-xxx.zip for Windows code to talk to USB.
+- Fix FreeBSD mt_count problem.
+- During install, copy any console.conf to bconsole.conf.
+- Have each daemon save the last_jobs structure when exiting and
+ read it back in when starting up.
+- "restore jobid=1 select" calls get_storage_xxx, which prints "JobId 1 is
+ not running."
+- Add FromClient and ToClient keywords on restore command (or
+ BackupClient RestoreClient).
+- Automatic "update slots" on user configuration directive when a
+ slot error occurs.
+- Allow "delete job jobid=xx jobid=xxx".
+- Allow "delete job jobid=xxx,yyy,aaa-bbb" i.e. list + ranges.
+- Implement multiple Volume in "purge jobs volume=".
+- Implement a JobSet, which groups any number of jobs. If the
+ JobSet is started, all the jobs are started together.
+ Allow Pool, Level, and Schedule overrides.
+- Enhance cancel to timeout BSOCK packets after a specific delay.
+- When I restore to Windows the Created, Accessed and Modifiedtimes are
+ those of the time of the restore, not those of the originalfile.
+ The dates you will find in your restore log seem to be the original
+ creation dates
+- Rescue builds incorrect script files on Rufus.
+- Write a Qmsg() to be used in bnet.c to prevent recursion. Queue the
+ message. If dequeueing toss the messages. Lock while dequeuing so that
+ it cannot be called recursively and set dequeuing flag.
+- Add all pools in Dir conf to DB also update them to catch changed
+ LabelFormats and such.
+- Symbolic link a directory to another one, then backup the symbolic
+ link.
+- Build console in client-only build.
+- Restore attributes of directory if replace=never set but directory
+ did not exist.
+- Check why Phil's Verify exclude does not work.
+- Phil says that Windows file sizes mismatch in Verify when they should,
+ and that either the file size or the catalog size was zero.
+- Fix option 2 of restore -- list where file is backed up -- require Client,
+ then list last 20 backups.
+- Allow browsing the catalog to see all versions of a file (with
+ stat data on each file).
+- Finish code passing files=nnn to restore start.
+- Add level to estimate command.
+- Check time/dates printed during restore when using Win32 API.
+- Volume "add"ed to Pool gets recycled in first use. VolBytes=0
+- Get rid of 0 dates in LastWritten, ...
+- Fix "llist jobid=xx" where no fileset or client exists.
+- Release SQLite 2.8.9
+- If a tape is recycled while it is mounted, Stanislav Tvrudy must do an
+ additional mount to deblock the job.
+- From Johan Decock:
+ bscan: sql_update.c:65 UPDATE File SET MD5='Ij+5kwN6TFIxK+8l8+/I+A' WHERE FileId=0
+ bscan: bscan.c:1074 Could not add MD5/SHA1 to File record. ERR=sql_update.c:65 Update problem: affected_rows=0
+- Do scheduling by UTC using gmtime_r() in run_conf, scheduler, and
+ ua_status.!!! Thanks to Alan Brown for this tip.
+- Look at updating Volume Jobs so that Max Volume Jobs = 1 will work
+ correctly for multiple simultaneous jobs.
+- Correct code so that FileSet MD5 is calculated for < and | filename
+ generation.
+- Mark Volume in error on error from WEOF.
+- Why does Bacula need the drive open to do "autochanger list" ?
+- Add a .list all files in the restore tree (probably also a list all files)
+ Do both a long and short form.
+- Implement the Media record flag that indicates that the Volume does disk
+ addressing.
+- Implement VolAddr, which is used when Volume is addressed like a disk,
+ and form it from VolFile and VolBlock.
+- Make multiple restore jobs for multiple media types specifying
+ the proper storage type.
+- Implement MediaType keyword in bsr?
+- Fix fast block rejection (stored/read_record.c:118). It passes a null
+ pointer (rec) to try_repositioning().
+- Look at extracting Win data from BackupRead.
+- Having dashes in filenames apparently creates problems for restore
+ by filename.
+- Add data compare on write/read in btape "test".
+- Implement RestoreJobRetention? Maybe better "JobRetention" in a Job,
+ which would take precidence over the Catalog "JobRetention".
+- Implement Label Format in Add and Label console commands.
+- Possibly up network buffers to 65K. Put on variable.
+- Put email tape request delays on one or more variables. User wants
+ to cancel the job after a certain time interval. Maximum Mount Wait?
+ Job, Client, Device, Pool, or Volume?
+ Is it possible to make this a directive which is *optional* in multiple
+ resources, like Level? If so, I think I'd make it an optional directive
+ in Job, Client, and Pool, with precedence such that Job overrides Client
+ which in turn overrides Pool.
+- Print a message when a job starts if the conf file is not current.
+- Finish work on conio.c
+- To pass Include 1 or two letter commands
+ I Name Include name - first record
+ B Name Base name - repeat
+ R "xxx" Regexp
+ W "xxx" Wild Card
+ E zzz Exclude expression (wild card)
+ P "plugin" Plugin
+ D "reader" Reader program
+ T "writer" Writer program
+ O Options In current commpressed format
+ (compression, signature, onefs, recurse, sparse,
+ replace, verify options, ...)
+ N End option set
+ B BaseName Start second option set any letter
+ ...
+ E
+ F Number Number of filenames to follow
+ <file-name>
+ B Name
+ ...
+ N End option set
+ F Number Number of filenames to follow
+ <file-name>
+ ...
+
+- Spooling ideas taken from Volker Sauer's and other's emails:
+ > IMHO job spooling should be turned on
+ >
+ > 1) by job
+ > 2) by schedule
+ > 3) by sd
+ >
+ > where and 2) overrides 1) and 3) is independent.
+
+ Yes, this is the minimum that I think is necessary.
+
+ >
+ > Reason(s):
+ > It should be switched by job, because the job that backs up the machine
+ > with the bacula-sd on doesn't need spooling.
+ > It should be switched by schedule, because for full-backups I don't need
+ > spooling, so I can switch it off (because the network faster then the
+ > tapedrive)
+
+ True, with the exception that if you have enough disk spool space,
+ and you want to run concurrent jobs, spooling can eliminate the block
+ interleaving restore inefficiencies.
+
+ > And you should be able to turn it of by sd for sd-machines with low disk
+ > capacity or if you just don't need or want this feature.
+ >
+ > There should be:
+ > - definitly the possibility for multipe spool direcories
+
+ Having multiple directories is no problem -- having different maximum
+ sizes creates specification problems. At some point, I will probably
+ have a common SD pool of spool directories as well as a set of
+ private spool directories for each device. The first implementation
+ will be a set of private spool directories for each device since
+ managing a global pool with a bunch of threads writing into the same
+ directory is *much* more complicated and prone to error.
+
+ > - the ability to spool parts of a backup (not the whole client)
+
+ This may change in the future, but for the moment, it will spool
+ either to a job high water mark, or until the directory is full
+ (reaches max spool size or I/O error). It will then write to tape,
+ truncate the spool file, and begin spooling again.
+
+ > - spooling while writing to tape
+
+ Not within a job, but yes, if you run concurrent jobs -- each is a
+ different thread. Within a job could be a feature, but *much* later.
+
+ > - parallel spooling (like parallel jobs/ concurrent jobs) of clients
+
+ Yes, this is one of my main motivations for doing it (aside from
+ eliminating tape "shoe shine" during incremental backups.
+
+ > - flushing a backup that only went to disk (like amflush in amanda)
+
+ This will be a future feature, since spooling is different from backing
+ up to disk. The future feature will be "migration" which will move a job
+ from one backup Volume to another.
+
+- New Storage specifications:
+ Passed to SD as a sort of BSR record called Storage Specification
+ Record or SSR.
+ SSR
+ Next -> Next SSR
+ MediaType -> Next MediaType
+ Pool -> Next Pool
+ Device -> Next Device
+ Write Copy Resource that makes a copy of a resource.
+ Job Resource
+ Allow multiple Storage specifications
+ New flags
+ One Archive = yes
+ One Device = yes
+ One Storage = yes
+ One MediaType = yes
+ One Pool = yes
+ Storage
+ Allow Multiple Pool specifications (note, Pool currently
+ in Job resource).
+ Allow Multiple MediaType specifications
+ Allow Multiple Device specifications
+ Perhaps keep this in a single SSR
+ Tie a Volume to a specific device by using a MediaType that
+ is contained in only one device.
+ In SD allow Device to have Multiple MediaTypes
+
+After 1.33:
+- Look at www.nu2.nu/pebuilder as a helper for full windows
+ bare metal restore.
+From Chris Hull:
+ it seems to be complaining about 12:00pm which should be a valid 12
+ hour time. I changed the time to 11:59am and everything works fine.
+ Also 12:00am works fine. 0:00pm also works (which I don't think
+ should). None of the values 12:00pm - 12:59pm work for that matter.
+Ideas from Jerry Scharf:
+ First let's point out some big pluses that bacula has for this
+ it's open source
+ more importantly it's active. Thank you so much for that
+ even more important, it's not flaky
+ it has an open access catalog, opening many possibilities
+ it's pushing toward heterogeneous systems capability
+ simple things:
+ I don't remember an include file directive for config files
+ (not filesets, actual config directives)
+ can you check the configs without starting the daemon?
+ some warnings about possible common mistakes
+ big things:
+ doing the testing and blessing of concurrent backup writes
+ this is absolutely necessary in the enterprise
+ easy user recovery GUI with full access checking
+ Macintosh file client
+ macs are an interesting niche, but I fear a server is a rathole
+ working bare iron recovery for windows
+ much better handling on running config changes
+ thinking through the logic of what happens to jobs in progress
+ the option for inc/diff backups not reset on fileset revision
+ a) use both change and inode update time against base time
+ b) do the full catalog check (expensive but accurate)
+ sizing guide (how much system is needed to back up N systems/files)
+ consultants on using bacula in building a disaster recovery system
+ an integration guide
+ or how to get at fancy things that one could do with bacula
+ logwatch code for bacula logs (or similar)
+ linux distro inclusion of bacula (brings good and bad, but necessary)
+ win2k/XP server capability (icky but you asked)
+ support for Oracle database ??
+===
+- Look at adding SQL server and Exchange support for Windows.
+- Restore: Enter Filename: 'C:/Documents and Settings/Comercial/My
+ Documents/MOP/formulário de registro BELAS ARTES.doc' causes Bacula to
+ crash.
+- Each DVD-RAM disk would be a volume, just like each tape is
+ a volume. It's a 4.7GB media with random access, but there's nothing about
+ it that I can see that makes it so different than a tape from bacula's
+ perspective. Why couldn't I back up to a bare floppy as a volume (ignoring
+ the media capacity?)
+- Make dev->file and dev->block_num signed integers so that -1 can
+ be an invalid value which happens with BSR.
+- Create VolAddr for disk files in place of VolFile and VolBlock. This
+ is needed to properly specify ranges.
+- Print bsmtp output to job report so that problems will be seen.
+- Pass the number of files to be restored to the FD for reporting
+- Add progress of files/bytes to SD and FD.
+- Don't continue Restore if no files selected.
+- Print warning message if FileId > 4 billion
+- do a "messages" before the first prompt in Console
+- Add a date and time stamp at the beginning of every line in the
+ Job report (Volker Sauer).
+- Client does not show busy during Estimate command.
+- Implement Console mtx commands.
+- Add a default DB password to MySQL.
+ GRANT all privileges ON bacula.* TO bacula@localhost IDENTIFIED BY
+ 'bacula_password';
+ FLUSH PRIVILEGES;
+- Implement a Mount Command and an Unmount Command where
+ the users could specify a system command to be performed
+ to do the mount, after which Bacula could attempt to
+ read the device. This is for Removeable media such as a CDROM.
+ - Most likely, this mount command would be invoked explicitly
+ by the user using the current Console "mount" and "unmount"
+ commands -- the Storage Daemon would do the right thing
+ depending on the exact nature of the device.
+ - As with tape drives, when Bacula wanted a new removable
+ disk mounted, it would unmount the old one, and send a message
+ to the user, who would then use "mount" as described above
+ once he had actually inserted the disk.
+- Implement dump/print label to UA
+- Implement disk spooling. Two parts: 1. Spool to disk then
+ immediately to tape to speed up tape operations. 2. Spool to
+ disk only when the tape is full, then when a tape is hung move
+ it to tape.
+- Scratch Pool where the volumes can be re-assigned to any Pool.
+- bextract is sending everything to the log file ****FIXME****
+- Add Progress command that periodically reports the progress of
+ a job or all jobs.
+- Restrict characters permitted in a Resource name, and don't permit
+ duplicate names.
+- Allow multiple Storage specifications (or multiple names on
+ a single Storage specification) in the Job record. Thus a job
+ can be backed up to a number of storage devices.
+- Implement some way for the File daemon to contact the Director
+ to start a job or pass its DHCP obtained IP number.
+- Implement multiple Consoles.
+- Implement a query tape prompt/replace feature for a console
+- From Johan?
+ Two jobs ready to go, first one blocked waiting for media
+ Cancel 2nd job ("waiting execution" one)
+ Cancel blocked job
+ boom - segfault*
+- Copy console @ code to gnome2-console
+- Make AES the only encryption algorithm see
+ http://csrc.nist.gov/CryptoToolkit/aes/). It's
+ an officially adopted standard, has survived peer
+ review, and provides keys up to 256 bits.
+- Add ctl-c to console to stop current command and discard buffered
+ output.
+- Estimate to Tibs never returns.
+- Think about how space could be freed up on a tape -- perhaps this
+ is a Merge or Compact feature that is needed.
+- Modify FileSet, did not upgrade the current Increment job, but
+ waited for the next job to be upgraded.
+- Take a careful look at SetACL http://setacl.sourceforge.net
+- Implement a where command for the tree telling where a file
+ is located.
+- Take a careful look at Level for the estimate command, maybe make
+ it a command line option.
+- Add Volume name to "I cannot write on this volume because"
+- Make tree walk routines like cd, ls, ... more user friendly
+ by handling spaces better.
+- Write your PID file and chown root:wheel before drop.
+- Make sure there is no symlink in a file before creating a
+ file (attack).
+- Look at mktemp or mkstemp(3).
+ mktemp and mkstemp create files with predictable names too. That's
+ not the vulnerability. The vulnerability is in creating files without
+ using the O_EXCL flag, which means "only create this file if it doesn't
+ exist, including if the file is a dangling symlink."
+
+ It is *NOT* enough to do the equivalent of
+
+ if doesn't exist $filename
+ then create $filename
+
+ because between the test and the create another process could have
+ gotten the CPU and created the file. You must use atomic functions
+ (those that don't get interrupted by other processes) and O_EXCL is
+ the only way for this particular example.
+- Automatically create pools, but instead of looking for what
+ in in Job records, walk through the pool resources.
+- Check and double check tree code, why does it take so long?
+- Add device name to "Current Volume not acceptable because ..."
+- Make sure that Bacula rechecks the tape after the 20 min wait.
+- Set IO_NOWAIT on Bacula TCP/IP packets.
+- Try doing a raw partition backup and restore by mounting a
+ Windows partition.
+- From Lars Kellers: