]> git.sur5r.net Git - bacula/bacula/blob - bacula/kernstodo
6a840c858dd6832308339824d00bdf6dc1905e40
[bacula/bacula] / bacula / kernstodo
1                  Kern's ToDo List
2                  05 February 2003 
3
4 Documentation to do: (a little bit at a time)
5 - Document running a test version.
6 - Document query file format.
7 - Document static linking
8 - Document how to automatically backup all local partitions
9 - Document problems with Verify and pruning.
10 - Document how to use multiple databases.
11
12
13 Testing to do: (painful)
14 - that console command line options work
15 - blocksize recognition code.
16 - multiple simultaneous Volumes
17
18 For 1.30 release:
19 - Implement TCP/IP connection for MySQL
20 - Make some way so that if a machine is skipped because it is not up 
21   that Bacula will continue retrying for a specified period of time --
22   periodically.
23 - Figure out some way to estimate output size and to avoid splitting
24   a backup across two Volumes -- this could be useful for writing CDROMs
25   where you really prefer not to have it split -- not serious.
26 - Add chflags() code for FreeBSD file flags
27 - Add RunBeforeJob and RunAfterJob to the Client program.
28 - Have SD compute MD5 or SHA1 and compare to what FD computes.
29 - Make VolumeToCatalog calculate an MD5 or SHA1 from the 
30   actual data on the Volume and compare it.                  
31 - Implement FileOptions (see end of this document)
32 - Implement Bacula plugins -- design API
33 - Make bcopy read through bad tape records.
34 - Fix read_record to handle multiple sessions.
35 - Program files (i.e. execute a program to read/write files).
36   Pass read date of last backup, size of file last time.
37 - Add Signature type to File DB record.
38 - Make Restore report an error if FD or SD term codes are not OK.
39 - CD into subdirectory when open()ing files for backup to
40   speed up things.  Test with testfind().
41 - Add prefixlinks to where or not where absolute links to FD.
42 - Look at handling <> in smtp doesn't work with exim.
43 - Priority job to go to top of list.
44 - Implement Bar code handling
45 - Why is catreq.c:111 Find vol called twice for a job?
46 - Find out why Full saves run slower and slower (hashing?)
47 - Why are save/restore of device different sizes (sparse?)   Yup! Fix it.
48 - Implement some way for the Console to dynamically create a job.
49 - Restore to a particular time -- e.g. before date, after date. 
50 - Implement disk spooling
51 - Implement finer multiprocessing options.
52 - Solaris -I on tar for include list
53 - Enable avoid backing up archive device (findlib/find_one.c:128)
54 - Need a verbose mode in restore, perhaps to bsr.
55 - bscan without -v is too quiet -- perhaps show jobs.
56 - Add code to reject whole blocks if not wanted on restore.
57 - Start working on Base jobs.
58 - Make sure the MaxVolFiles is fully implemented in SD
59 - Check if both CatalogFiles and UseCatalog are set to SD.
60 - Check if we can increase Bacula FD priorty in Win2000
61 - Need return status on read_cb() from read_records(). Need multiple
62   records -- one per Job, maybe a JCR or some other structure with
63   a block and a record.
64 - Figure out how to do a bare metal Windows restore
65 - Put system type returned by FD into catalog.
66 - Need to specify MaximumConcurrentJobs in the Job resource.
67 - Possibly add email to Watchdog if drive is unmounted too
68   long and a job is waiting on the drive.
69 - Strip trailing slashes from Include directory names in the FD.
70 - Use read_record.c in SD code.
71 - Why don't we get an error message from Win32 FD when bootstrap 
72   file cannot be created for restore command?
73 - When Marking a file in Restore that is a hard link, also
74   mark the link so that the data will be reloaded.
75 - Restore program that errors in SD due to no tape reports
76   OK incorrectly in output.
77 - After unmount, if restore job started, ask to mount.
78 - Convert all %x substitution variables, which are hard to remember
79   and read to %(variable-name).  Idea from TMDA.
80 - Add JobLevel in FD status (but make sure it is defined).
81 - Make Pool resource handle Counter resources.
82 - Remove NextId for SQLite. Optimize.
83 - Strip trailing / from Include
84 - Move all SQL statements into a single location.
85 - Add UA rc and history files.
86 - put termcap (used by console) in ./configure and
87   allow -with-termcap-dir.
88 - Enhance time and size scanning routines.
89 - Fix Autoprune for Volumes to respect need for full save.
90 - Fix Win32 config file definition name on /install
91 - No READLINE_SRC if found in alternate directory.
92 - Add Client FS/OS id (Linux, Win95/98, ...).
93 - Test a second language e.g. french.
94 - Compare tape to Client files (attributes, or attributes and data) 
95 - Make all database Ids 64 bit.
96 - Write an applet for Linux.
97 - Add estimate to Console commands
98 - Find solution to blank filename (i.e. path only) problem.
99 - Implement new daemon communications protocol.
100 - Remove PoolId from Job table, it exists in Media.
101 - Allow console commands to detach or run in background.
102 - Fix status delay on storage daemon during rewind.
103 - Add SD message variables to control operator wait time
104   - Maximum Operator Wait
105   - Minimum Message Interval
106   - Maximum Message Interval
107 - Send Operator message when cannot read tape label.
108 - Verify level=Volume (scan only), level=Data (compare of data to file).
109   Verify level=Catalog, level=InitCatalog
110 - Events file
111 - Add keyword search to show command in Console.
112 - Fix Win2000 error with no messages during startup.
113 - Events : tape has more than xxx bytes.
114 - Restrict characters permitted in a Resource name.
115 - Complete code in Bacula Resources -- this will permit
116   reading a new config file at any time.
117 - Handle ctl-c in Console
118 - Implement LabelTemplate (at least first cut).
119 - Implement script driven addition of File daemon to config files.
120 - Think about how to make Bacula work better with File (non-tape) archives.
121 - Write Unix emulator for Windows.
122
123 - Implement new serialize subroutines
124    send(socket, "string", &Vol, "uint32", &i, NULL)
125 - Audit all UA commands to ensure that we always prompt where possible.
126 - If ./btape is called without /dev, assume argument is a Storage resource name.
127 - Put memory utilization in Status output of each daemon
128   if full status requested or if some level of debug on.
129 - Make database type selectable by .conf files i.e. at runtime
130 - gethostbyname failure in bnet_connect() continues
131   generating errors -- should stop.
132 - Set flag for uname -a.  Add to Volume label.
133 - Implement throttled work queue.
134 - Check for EOT at ENOSPC or EIO or ENXIO (unix Pc)
135 - Allow multiple Storage specifications (or multiple names on
136   a single Storage specification) in the Job record. Thus a job 
137   can be backed up to a number of storage devices.
138 - Implement dump label to UA
139 - Concept of VolumeSet during restore which is a list
140   of Volume names needed.
141 - Restore files modified after date
142 - Restore file modified before date
143 - Emergency restore info:
144   - Backup Bacula
145   - Backup working directory
146   - Backup Catalog
147 - Restore -- do nothing but show what would happen
148 - SET LD_RUN_PATH=$HOME/mysql/lib/mysql
149 - Implement Restore FileSet=
150 - Create a protocol.h and protocol.c where all protocol messages
151   are concentrated.
152 - If SD cannot open a drive, make it periodically retry.
153 - Remove duplicate fields from jcr (e.g. jcr.level and jcr.jr.Level, ...).
154 - Timout a job or terminate if link goes down, or reopen link and query.
155 - Find general solution for sscanf size problems (as well
156   as sprintf. Do at run time?
157 - Concept of precious tapes (cannot be reused).
158 - Make bcopy copy with a single tape drive.
159 - Permit changing ownership during restore.
160
161 - Autolabel should be specified by DIR instead of SD.
162 - Find out how to get the system tape block limits, e.g.:
163   Apr 22 21:22:10 polymatou kernel: st1: Block limits 1 - 245760 bytes.  
164   Apr 22 21:22:10 polymatou kernel: st0: Block limits 2 - 16777214 bytes.
165 - Storage daemon    
166   - Add media capacity
167   - AutoScan (check checksum of tape)
168   - Format command = "format /dev/nst0"
169   - MaxRewindTime
170   - MinRewindTime
171   - MaxBufferSize
172   - Seek resolution (usually corresponds to buffer size)
173   - EODErrorCode=ENOSPC or code
174   - Partial Read error code
175   - Partial write error code
176   - Nonformatted read error
177   - Nonformatted write error
178   - WriteProtected error
179   - IOTimeout
180   - OpenRetries
181   - OpenTimeout
182   - IgnoreCloseErrors=yes
183   - Tape=yes
184   - NoRewind=yes
185 - Pool
186   - Maxwrites
187   - Recycle period
188 - Job
189   - MaxWarnings
190   - MaxErrors (job?)
191 =====
192 - FD sends unsaved file list to Director at end of job (see
193   RFC below).
194 - File daemon should build list of files skipped, and then
195   at end of save retry and report any errors.
196 - Write a Storage daemon that uses pipes and
197   standard Unix programs to write to the tape.
198   See afbackup.
199 - Need something that monitors the JCR queue and
200   times out jobs by asking the deamons where they are.
201 - Enhance Jmsg code to permit buffering and saving to disk.
202 - device driver = "xxxx" for drives.
203 - restart: paranoid: read label fsf to
204   eom read append block, and go
205   super-paranoid: read label, read all files
206   in between, read append block, and go
207   verify: backspace, read append block, and go
208   permissive: same as above but frees drive
209   if tape is not valid.
210 - Verify from Volume
211 - Ensure that /dev/null works
212 - Need report class for messages. Perhaps
213   report resource where report=group of messages
214 - enhance scan_attrib and rename scan_jobtype, and
215   fill in code for "since" option 
216 - Director needs a time after which the report status is sent
217   anyway -- or better yet, a retry time for the job.
218   Don't reschedule a job if previous incarnation is still running.
219 - Some way to automatically backup everything is needed????
220 - Need a structure for pending actions:
221   - buffered messages
222   - termination status (part of buffered msgs?)
223 - Concept of grouping Storage devices and job can use
224   any of a number of devices
225 - Drive management
226   Read, Write, Clean, Delete
227 - Login to Bacula; Bacula users with different permissions:
228    owner, group, user, quotas
229 - Store info on each file system type (probably in the job header on tape.
230   This could be the output of df; or perhaps some sort of /etc/mtab record.
231
232 Longer term to do:
233 - Design at hierarchial storage for Bacula.
234 - Implement FSM (File System Modules).
235 - Identify unchanged or "system" files and save them to a
236   special tape thus removing them from the standard 
237   backup FileSet -- BASE backup.
238 - Turn virutally all sprintfs into snprintfs.
239 - Heartbeat between daemons.
240 - Audit M_ error codes to ensure they are correct and consistent.
241 - Add variable break characters to lex analyzer.
242   Either a bit mask or a string of chars so that
243   the caller can change the break characters.
244 - Make a single T_BREAK to replace T_COMMA, etc.
245 - Ensure that File daemon and Storage daemon can
246   continue a save if the Director goes down (this
247   is NOT currently the case). Must detect socket error,
248   buffer messages for later. 
249 - Enhance time/duration input to allow multiple qualifiers e.g. 3d2h
250 - Add ability to backup to two Storage devices (two SD sessions) at
251   the same time -- e.g. onsite, offsite.
252 - Add the ability to consolidate old backup sets (basically do a restore
253   to tape and appropriately update the catalog). Compress Volume sets.
254   Might need to spool via file is only one drive is available.
255 - Compress or consolidate Volumes of old possibly deleted files. Perhaps
256   someway to do so with every volume that has less than x% valid 
257   files.
258
259   
260 Projects:
261             Bacula Projects Roadmap 
262                17 August 2002
263            last update 5 January 2003
264
265 Item 1:   Multiple simultaneous Jobs. (done)
266 Done -- Restore part needs better implementation to work correctly
267
268   What:   Permit multiple simultaneous jobs in Bacula.
269
270   Why:    An enterprise level solution needs to go fast without the
271           need for the system administrator to carefully tweak
272           timing.  Based on the benchmarks, during a full
273           backup, NetWorker typically hit 10 times the bandwidth to
274           the tape compared to Bacula--largely. This is probably due to
275           running parallel jobs and multi-threaded filling of buffers
276           and writing them to tape.  This should also make things work
277           better when you have a mix of fast and slow machines backing
278           up at the same time.
279
280   Notes:  Bacula was designed to run multiple simultaneous jobs. Thus
281           implementing this is a matter of some small cleanups and
282           careful testing.
283
284
285 Item 2:   Make the Storage daemon use intermediate file storage to buffer data.
286 Deferred -- not necessary yet.
287
288   What:   If data is coming into the SD too fast, buffer it to 
289           disk if the user has configured this option.
290
291   Why:    This would be nice, especially if it more or less falls out
292           when implementing (1) above.  If not, it probably should not
293           be given a high priority because fundamentally the backup time
294           is limited by the tape bandwidth.  Even though you may finish a
295           client job quicker by spilling to disk, you still have to
296           eventually get it onto tape.  If intermediate disk buffering
297           allows us to improve write bandwidth to tape, it may make
298           sense.
299
300   Notes:  Whether or not this is implemented will depend upon performance
301           testing after item 1 is implemented.
302
303
304 Item 3:   Write the bscan program -- also write a bcopy program.
305 Done
306
307   What:   Write a program that reads a Bacula tape and puts all the 
308           appropriate data into the catalog. This allows recovery
309           from a tape that is no longer in the database, or it allows
310           re-creation of a database if lost.
311
312   Why:    This is a fundamental robustness and disaster recovery tool
313           which will increase the comfort level of a sysadmin
314           considering adopting Bacula.
315
316   Notes:  A skeleton of this program already exists, but much work
317           needs to be done. Implementing this will also make apparent
318           any deficiencies in the current Bacula tape format.
319
320
321 Item 4:   Implement Base jobs.
322
323   What:   A base job is sort of like a Full save except that you 
324           will want the FileSet to contain only files that are unlikely
325           to change in the future (i.e. a snapshot of most of your
326           system after installing it). After the base job has been run,
327           when you are doing a Full save, you can specify to exclude
328           all files saved by the base job that have not been modified.
329
330   Why:    This is something none of the competition does, as far as we know
331           (except BackupPC, which is a Perl program that saves to disk
332           only).  It is big win for the user, it makes Bacula stand out
333           as offering a unique optimization that immediately saves time
334           and money.
335
336   Notes:  Big savings in tape usage. Will require more resources because
337           the e. DIR must send FD a list of files/attribs, and the FD must
338           search the list and compare it for each file to be saved.
339
340
341 Item 5:   Implement Label templates
342
343   What:   This is a mechanism whereby Bacula can automatically create
344           a tape label for new tapes according to a detailed specification
345           provided by the user.
346
347   Why:    It is a major convenience item for folks who use automated label
348           creation.
349
350   Notes:  Bacula already has a working form of automatic tape label
351           creation, but it is very crude. The design for the complete
352           tape labeling project is already documented in the manual.
353
354
355 Item 6:   Write a regression script.
356 Started
357
358   What:   This is an automatic script that runs and tests as many features
359           of Bacula as possible. The output is compared to previous
360           versions of Bacula and any differences are reported.
361
362   Why:    This is an enormous help in preventing introduction of new
363           errors in parts of the program that already work correctly.
364
365   Notes:  This probably should be ranked higher, it's something the typical
366           user doesn't see.  Depending on how it's implemented, it may
367           make sense to defer it until the archival tape format and
368           user interface mature.
369
370
371 Item 7:   GUI for interactive restore
372 Item 8:   GUI for interactive backup
373
374   What:   The current interactive restore is implemented with a tty
375           interface. It would be much nicer to be able to "see" the
376           list of files backed up in typical GUI tree format.
377           The same mechanism could also be used for creating 
378           ad-hoc backup FileSets (item 8).
379
380   Why:    Ease of use -- especially for the end user.
381
382   Notes:  Rather than implementing in Gtk, we probably should go directly
383           for a Browser implementation, even if doing so meant the
384           capability wouldn't be available until much later.  Not only
385           is there the question of Windows sites, most
386           Solaris/HP/IRIX, etc,  shops can't currently run Gtk programs
387           without installing lots of stuff admins are very wary about.
388           Real sysadmins will always use the command line anyway, and
389           the user who's doing an interactive restore or backup of his
390           own files will in most cases be on a Windows machine running
391           Exploder.
392
393
394 Item 9:   Add SSL to daemon communications.
395
396   What:   This provides for secure communications between the daemons.
397
398   Why:    This would allow doing backup across the Internet without
399           privacy concerns (or with much less concern).
400
401   Notes:  The vast majority of near term potential users will be backing up
402           a single site over a LAN and, correctly or not, they probably
403           won't be concerned with security, at least not enough to go to
404           the trouble to set up keys, etc. to screw things down.  We suspect
405           that many users genuinely interested in multi-site backup
406           already run some form of VPN software in their internetwork
407           connections, and are willing to delegate security to that layer.
408
409
410 Item 10:  Define definitive tape format.
411 Done (version 1.27)
412
413   What:   Define that definitive tape format that will not change 
414           for the next millennium.
415
416   Why:    Stability, security.
417
418   Notes:  See notes for item 11 below.
419
420
421 Item 11:  New daemon communication protocol.
422
423   What:   The current daemon to daemon protocol is basically an ASCII
424           printf() and sending the buffer. On the receiving end, the
425           buffer is sscanf()ed to unpack it. The new scheme would
426           be a binary format that allows quick packing and unpacking
427           of any data type with named fields.
428
429   Why:    Using binary packing would be faster. Named fields will permit
430           error checking to ensure that what is sent is what the 
431           receiver really wants.
432
433   Notes:  These are internal improvements in the interest of the
434           long-term stability and evolution of the program.  On the one
435           hand, the sooner they're done, the less code we have to rip
436           up when the time comes to install them.  On the other hand, they
437           don't bring an immediately perceptible benefit to potential
438           users.  Item 10 and possibly item 11 should be deferred until Bacula
439           is well established with a growing user community more or
440           less happy with the feature set.  At that time, it will make a
441           good "next generation" upgrade in the interest of data
442           immortality.
443
444
445
446
447 ======================================================
448         Base Jobs design
449 It is somewhat like a Full save becomes an incremental since
450 the Base job (or jobs) plus other non-base files.
451 Need:
452 - New BaseFile table that contains:
453     JobId, BaseJobId, FileId (from Base).
454   i.e. for each base file that exists but is not saved because
455   it has not changed, the File daemon sends the JobId, BaseId,
456   and FileId back to the Director who creates the DB entry.
457 - To initiate a Base save, the Director sends the FD 
458   the FileId, and full filename for each file in the Base.
459 - When the FD finds a Base file, he requests the Director to
460   send him the full File entry (stat packet plus MD5), or
461   conversely, the FD sends it to the Director and the Director
462   says yes or no. This can be quite rapid if the FileId is kept
463   by the FD for each Base Filename.          
464 - It is probably better to have the comparison done by the FD
465   despite the fact that the File entry must be sent across the
466   network.
467 - An alternative would be to send the FD the whole File entry
468   from the start. The disadvantage is that it requires a lot of
469   space. The advantage is that it requires less communications
470   during the save.
471 - The Job record must be updated to indicate that one or more
472   Bases were used.
473 - At end of Job, FD returns:   
474    1. Count of base files/bytes not written to tape (i.e. matches)
475    2. Count of base file that were saved i.e. had changed.
476 - No tape record would be written for a Base file that matches, in the
477   same way that no tape record is written for Incremental jobs where
478   the file is not saved because it is unchanged.
479 - On a restore, all the Base file records must explicitly be
480   found from the BaseFile tape. I.e. for each Full save that is marked
481   to have one or more Base Jobs, search the BaseFile for all occurrences
482   of JobId.
483 - An optimization might be to make the BaseFile have:
484      JobId
485      BaseId
486      FileId
487   plus
488      FileIndex
489   This would avoid the need to explicitly fetch each File record for
490   the Base job.  The Base Job record will be fetched to get the
491   VolSessionId and VolSessionTime.
492 =========================================================  
493
494 ========================================================== 
495     Unsaved File design
496 For each Incremental job that is run, there may be files that
497 were found but not saved because they were locked (this applies
498 only to Windows). Such a system could send back to the Director
499 a list of Unsaved files.
500 Need:
501 - New UnSavedFiles table that contains:
502   JobId
503   PathId
504   FilenameId
505 - Then in the next Incremental job, the list of Unsaved Files will be
506   feed to the FD, who will ensure that they are explicitly chosen even
507   if standard date/time check would not have selected them.
508 =============================================================
509
510   
511
512 =============================================================
513
514                 Request For Comments For File Backup Options
515                    10 November 2002
516
517 Subject: File Backup Options
518
519 Problem: 
520   A few days ago, a Bacula user who is backing up to file volumes and
521   using compression asked if it was possible to suppress compressing
522   all .gz files since it was a waste of CPU time. Although Bacula
523   currently permits using different options (compression, ...) on
524   a directory by directory basis, it cannot do it on a file by 
525   file basis, which is clearly what was desired.   
526
527 Proposed Implementation:
528   To solve this problem, I propose the following:
529
530   - Add a new Director resource type called FileOptions.  
531
532   - The FileOptions resource will have records for all
533     options that can currently be specified on the Include record 
534     (in a FileSet).  Examples below.
535
536   - The FileOptions resource will permit an exclude option as well
537     as a number of additional options.
538
539   - The heart of the FileOptions resource is the ability to
540     supply any number of ApplyTo records which specify POSIX
541     regular expressions.  These ApplyTo regular expressions are
542     applied to the fully qualified filename (path and all). If
543     one matches, then the FileOptions will be used.
544
545   - When an ApplyTo specification matches an included file, the
546     options specified in the FileOptions resource will override
547     the default options specified on the Include record.
548
549   - Include records will be modified to permit referencing one or
550     more FileOptions resources.  The FileOptions will be used
551     in the order listed on the Include record and the first
552     one that matches will be applied.
553
554   - Options (or specifications) currently supplied on the Include
555     record will be deprecated (i.e. removed in a later version a
556     year or so from now).
557
558   - The Exclude record will be deprecated as the same functionality
559     can be obtained by using an Exclude = yes in the FileOptions.
560
561 FileOptions records:
562   The following records can appear in the FileOptions resource. An
563   asterisk preceding the name indicates a feature not currently
564   implemented.
565
566   For Backup Jobs:
567     - Compression= (GZIP, ...)
568     - Signature=   (MD5, SHA1, ...)
569     - *Encryption=
570     - OneFs=      (yes/no)    - remain on one filesystem
571     - Recurse=    (yes/no)    - recurse into subdirectories
572     - Sparse=     (yes/no)    - do sparse file backup
573     - *Exclude=   (yes/no)    - exclude file from being saved
574     - *Reader=    (filename)  - external read (backup) program
575     - *Plugin=    (filename)  - read/write plugin module
576
577   For Verify Jobs:
578     - verify=     (ipnougsamc5) - verify options
579
580   For Restore Jobs:
581     - replace= (always/ifnewer/ifolder/never) - replace options currently
582                                                 implemented in 1.27
583     - *Writer= (filename)   - external write (restore) program
584
585
586 Implementation:
587   Currently options specifying compression, MD5 signatures, recursion,
588   ... of a FileSet are supplied on the Include record. These will now
589   all be collected into a FileOptions resource, which will be
590   specified on the Include in place of the options. Multiple FileOptions
591   may be specified.  Since the FileOptions contain regular expressions
592   that are applied to the full filename, this will give the ability
593   to specify backup options on a file by file basis to whatever level
594   of detail you wish.
595
596 Example:
597
598   Today:
599
600     FileSet {
601       Name = "FullSet"
602       Include = compression=GZIP signature=MD5 {
603         /
604       }
605     }
606
607   Proposal:
608
609     FileSet {
610       Name = "FullSet"
611       Include = FileOptions=Opts {
612         /
613       }
614     }
615     FileOptions {
616       Name = Opts
617       Compression = GZIP
618       Signature = MD5
619       ApplyTo = /*.?*/
620     }
621
622   That's a lot more to do the same thing, but it gives the ability to
623   apply options on a file by file basis.  For example, suppose you
624   want to compress all files but not any file with extensions .gz or .Z.
625   You could do so as follows:
626
627     FileSet {
628       Name = "FullSet"
629       Include = FileOptions=NoCompress FileOptions=Opts {
630         /
631       }
632     }
633     FileOptions {
634       Name = Opts
635       Compression = GZIP
636       Signature = MD5
637       ApplyTo = /*.?*/   # matches all files
638     }
639     FileOptions {
640       Name = NoCompress
641       Signature = MD5
642       # Note multiple ApplyTos are ORed
643       ApplyTo = /*.gz/   # matches .gz files */
644       ApplyTo = /*.Z/    # matches .Z files */
645     }
646
647   Now, since the NoCompress FileOptions is specified first on the
648   Include line, any *.gz or *.Z file will have an MD5 signature computed,
649   but will not be compressed. For all other files, the NoCompress will not
650   match, so the Opts options will be used which will include GZIP
651   compression.
652
653 Questions:
654   - Is it necessary to provide some means of ANDing regular expressions
655     and negation?  (not currently planned)
656
657     e.g.  ApplyTo = /*.gz/ && !/big.gz/
658
659   - I see that Networker has a "null" module which, if specified, does not 
660     backup the file, but does make an record of the file in the catalog
661     so that the catalog will reflect an exact picture of the filesystem.
662     The result is that the file can be "seen" when "browsing" the save
663     sets, but it cannot be restored.
664     
665     Is this really useful?  Should it be implemented in Bacula?
666   
667 Results:
668   After implementing the above, the user will be able to specify
669   on a file by file basis (using regular expressions) what options are
670   applied for the backup.
671 ====================================
672
673 =========================================
674 Proposal by Bill Sellers
675
676 Return-Path: <w.a.sellers@larc.nasa.gov>
677 Received: from post.larc.nasa.gov (post.larc.nasa.gov [128.155.4.45]) by matou.sibbald.com (8.11.6/8.11.6) with ESMTP id h0ELUIm07622 for <kern@sibbald.com>; Tue, 14 Jan 2003 22:30:18 +0100
678 Received: from Baron.larc.nasa.gov (baron.larc.nasa.gov [128.155.40.132]) by post.larc.nasa.gov (pohub4.6) with ESMTP id QAA09768 for <kern@sibbald.com>; Tue, 14 Jan 2003 16:30:14 -0500 (EST)
679 Message-Id: <5.1.0.14.2.20030114153452.028dbae8@pop.larc.nasa.gov>
680 X-Sender: w.a.sellers@pop.larc.nasa.gov
681 X-Mailer: QUALCOMM Windows Eudora Version 5.1
682 Date: Tue, 14 Jan 2003 16:30:18 -0500
683 To: Kern Sibbald <kern@sibbald.com>
684 From: Bill Sellers <w.a.sellers@larc.nasa.gov>
685 Subject: Re: [Bacula-users] Bacula remote storage?
686 In-Reply-To: <1042565382.1845.177.camel@rufus>
687 References: <5.1.0.14.2.20030114113004.0293a210@pop.larc.nasa.gov> <5.1.0.14.2.20030113170650.028dad88@pop.larc.nasa.gov> <5.1.0.14.2.20030113170650.028dad88@pop.larc.nasa.gov> <5.1.0.14.2.20030114113004.0293a210@pop.larc.nasa.gov>
688 Mime-Version: 1.0
689 Content-Type: text/plain; charset="us-ascii"; format=flowed
690 X-Annoyance-Filter-Junk-Probability: 0
691 X-Annoyance-Filter-Classification: Mail
692 At 06:29 PM 1/14/2003 +0100, you wrote:
693 >Hello Bill,
694 >
695 >Well, if you cannot put a Bacula client on the machine,
696 >then it is a big problem.  If you know of some software
697 >that can do what you want, let me know, because I
698 >really just don't know how to do it -- at least not
699 >directly.
700
701
702 Hi Kern,
703
704 We have been able to get Amanda to use the HSM as a storage 
705 device.  Someone here wrote a driver for Amanda.  BUT, Amanda doesn't 
706 handle Windows systems very well (or at all without Samba).  So I am 
707 looking for a backup system that has a Windows client.  I really like the 
708 Windows integration of Bacula.
709
710 From the command line, its rather trivial to move the data around.  We use 
711 something like-
712
713 tar cf - ./files | gzip -c | rsh hsm dd of=path/file.tgz
714
715 or if you use GNU tar:
716
717 tar czf hsm:path/file.tgz ./files
718
719 One idea for you to consider; Sendmail offers pipes in the aliases file; 
720 (mailpipe:  "|/usr/bin/vacation root")  and Perl supports pipes in the 
721 "open" statement (open FILE, "|/bin/nroff -man";)  Could you could make a 
722 pipe available, as a storage device? Then we could use any command that 
723 handles stdin as a  storage destination.
724
725 Something like-
726
727 Storage {
728         Name = HSM-RSH
729         Address = hsm
730         #Password is not used in rsh, but might be used in ftp.
731         Device = "| gzip -c | rsh hsm dd of=path/file.tgz"
732         MediaType = Pipe
733 }
734
735 Storage {
736         Name = HSM-FTP
737         Address = hsm
738         Password = "foobar&-"
739         Device = "| ncftpput -c hsm /path/file.bacula"
740         MediaType = Pipe
741 }
742
743 >If you have some local storage available, you could
744 >use Bacula to backup to disk volumes, then use some
745 >other software (ftp, scp) to move them to the HSM
746 >machine. However, this is a bit kludgy.
747
748
749 It is, but maybe worth a try.  Is there some function in Bacula to put 
750 variables in filenames?  i.e. backup.2003-01-15.root
751
752 Thanks!
753 Bill
754
755 ---
756 Bill Sellers
757 w.a.sellers@larc.nasa.gov
758
759 ==============================================
760    The Project for the above
761
762 I finally realized that this is not at all
763 the same as reader/writer programs or plugins,
764 which are alternate ways of accessing the 
765 files to be backed up. Rather, it is an alternate
766 form of storage device, and I have always planned
767 that Bacula should be able to handle all sorts
768 of storage devices.
769
770 So, I propose the following phases:
771
772 1. OK from you to invest some time in testing
773    this as I implement it (requires that you
774    know how to download from the SourceForge
775    cvs -- which I imagine is a piece of cake
776    for you).
777
778 2. Dumb implementation by allowing a device to
779    be a fifo for write only.
780    Reason: easy to implement, proof of concept.
781
782 3. Try reading from fifo but with fixed block
783    sizes.
784    Reason: proof of concept, easy to implement.
785
786 4. Extend reading from fifo (restores) to handle
787    variable blocks.
788    Reason: requires some delicate low level coding
789    which could destabilize all of Bacula.
790
791 5. Implementation of above but to a program. E.g.
792     Device = "|program"  (not full pipeline).
793    Reason: routines already exist, and program can
794    be a shell script which contains anything.
795
796 6. Add full pipeline as a possibility. E.g.
797     Device = "| gzip -c | rsh hsm dd of=path/file.tgz"
798    Reason: needs additional coding to implement full
799    pipeline (must fire off either a shell or all
800    programs and connect their pipes).
801
802 There are a good number of details in each step
803 that I have left out, but I will specify them at
804 every stage, and there may be a few changes as things
805 evolve. I expect that to get to stage 5 will take a
806 few weeks, and at that point, you will have 
807 everything you need (just inside a script).
808 Stage 6 will probably take longer, but if this
809 project pleases you, what we do for 5 should 
810 be adequate for some time.
811
812
813
814 =============================================
815
816 Done: (see kernsdone for more)
817 - Look into Pruning/purging problems or why there seem to
818   be so many files listed each night.
819 - Fix cancel in find_one -- need jcr.
820 - Cancel does not work for restore in FD.
821 - Write SetJobStatus() function so cancel status not lost.
822 - Add include list to end of chain in findlib
823 - Zap sd_auth_key after use
824 - Add Bar code reading capabilities (new mtx-changer)
825 - Figure out some way to automatically backup all local partitions
826 - Make hash table for linked files in findlib/find_one.c:161
827   (not necessary)
828 - Rewrite find_one.c to use only pool_memory instead of 
829   alloca and malloc (probably not necessary).
830 - Make sure btraceback goes into /sbin not sysconf directory.
831 - InitVerify is getting pruned and it shouldn't (document it)
832 - Make 1.28c release ??? NO do 1.29 directly
833 - Set timeout on opening fifo for save or restore (findlib)
834 - Document FIFO storage device.
835 - Document fifo and | and <
836 ====== 1.30 =======
837 - Implement SHA1
838 - Get correct error status from run_program or open_bpipe().    
839 - Restrict permissions on File Volumes (now 0640).                   
840 - Umasked 022 daemons
841 - Fix restore of hard linked file.
842 - Figure out how to allow multiple simultaneous file Volumes on a single device.
843 - Implement multiple simultaneous file Volumes on a single device.
844 - Cleanup db_update_media and db_update_pool
845 - Flush all the daemon messages at the end of every job.
846 - Change stat1= fgets()!=NULL to stat1=fgest()==NULL; in 
847   run_program -- bpipe.c