Hello, I've been using Bacula for some time for home use, and trying to get a working "TimeMachine" type configuration working.
That is I'd like to configure bacula to store to an external hard disk using a number of fixed sizes files, occupying up to a certain amount of disk space. In my case 100 x 2GB files. I'd like to auto label new files and purge old ones automatically to make space if needed. This sounds like a simple recipe which is appropriate for a large number of SOHO type situations. I know Bacula can do more, but to minimise intervention this looks nice. However, I don't quite get this to work. I've had issues with getting the auto-label to always work, and also the auto-expire. I wonder if anyone can look at my configuration or offer an alternative to do this? So currently I'm getting errors like this (taken a few days ago): 01-Dec 06:05 mad06-sd JobId 1869: Job mad06-job.2009-11-29_23.05.00_02 waiting. Cannot find any appendable volumes. Please use the "label" command to create a new Volume for: Storage: "FileStorage1" (/bacula/2) Pool: DISK_POOL Media type: File *status dir mad06-dir Version: 3.0.1 (30 April 2009) x86_64-redhat-linux-gnu redhat Daemon started 29-Nov-09 09:53, 0 Jobs run since started. Heap: heap=249,856 smbytes=99,692 max_bytes=125,113 bufs=378 max_bufs=379 Scheduled Jobs: Level Type Pri Scheduled Name Volume =================================================================================== Incremental Backup 10 01-Dec-09 23:05 mad06-job *unknown* Full Backup 11 01-Dec-09 23:10 BackupCatalog *unknown* Incremental Backup 10 02-Dec-09 11:05 mad06-job *unknown* ==== Running Jobs: Console connected at 01-Dec-09 19:50 JobId Level Name Status ====================================================================== 1869 Differe mad06-job.2009-11-29_23.05.00_02 is waiting for an appendable Volume 1870 Full BackupCatalog.2009-11-29_23.10.00_03 is waiting execution 1871 Increme mad06-job.2009-11-30_11.05.00_04 is waiting execution 1872 Increme mad06-job.2009-11-30_23.05.00_05 is waiting execution 1873 Full BackupCatalog.2009-11-30_23.10.00_06 is waiting execution 1874 Increme mad06-job.2009-12-01_11.05.00_07 is waiting execution ==== Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 1857 Full 0 0 Error 24-Nov-09 08:35 BackupCatalog 1848 Incr 0 0 Error 24-Nov-09 08:35 mad06-job 1854 Full 0 0 Error 24-Nov-09 08:35 BackupCatalog 1853 Diff 0 0 Error 24-Nov-09 08:35 mad06-job 1852 Full 0 0 Error 24-Nov-09 08:35 BackupCatalog 1850 Incr 0 0 Error 24-Nov-09 08:35 mad06-job 1849 Full 0 0 Error 24-Nov-09 08:35 BackupCatalog 1851 Incr 0 0 Error 24-Nov-09 08:35 mad06-job 1855 Incr 0 0 Error 24-Nov-09 08:35 mad06-job 1856 Incr 0 0 Error 24-Nov-09 08:35 mad06-job ==== * # ls -l /bacula/2 ### this is where the disks are located, on an external NAS mounted by NFS. total 28705668 -rw-r-----+ 1 bacula disk 372483112 Nov 13 11:10 VOL-0372 -rw-r-----+ 1 bacula disk 386571201 Nov 13 23:11 VOL-0373 -rw-r-----+ 1 bacula disk 293973535 Nov 13 23:11 VOL-0374 -rw-r-----+ 1 bacula disk 2147475063 Nov 13 23:49 VOL-0375 -rw-r-----+ 1 bacula disk 2147475420 Nov 14 00:02 VOL-0376 -rw-r-----+ 1 bacula disk 2147475589 Nov 14 00:16 VOL-0377 -rw-r-----+ 1 bacula disk 2147475440 Nov 14 00:27 VOL-0378 -rw-r-----+ 1 bacula disk 2147475617 Nov 14 00:33 VOL-0379 -rw-r-----+ 1 bacula disk 2147475509 Nov 14 00:43 VOL-0380 -rw-r-----+ 1 bacula disk 2147475488 Nov 14 00:54 VOL-0381 -rw-r-----+ 1 bacula disk 2147475609 Nov 14 01:02 VOL-0382 -rw-r-----+ 1 bacula disk 2147475560 Nov 14 01:11 VOL-0383 -rw-r-----+ 1 bacula disk 2147475469 Nov 14 01:21 VOL-0384 -rw-r-----+ 1 bacula disk 2147475584 Nov 14 01:30 VOL-0385 -rw-r-----+ 1 bacula disk 2147475594 Nov 14 01:38 VOL-0386 -rw-r-----+ 1 bacula disk 2147475098 Nov 19 09:21 VOL-0387 -rw-r-----+ 1 bacula disk 395513973 Nov 24 08:32 VOL-0388 My config is below. If you can see what's wrong please point me in the right direction or to a howto to setup this up. $ rpm -q centos-release centos-release-5-3.el5.centos.1 $ uname -a Linux mad06.wl0.org 2.6.18-128.7.1.el5 #1 SMP Mon Aug 24 08:21:56 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux $ rpm -qa | grep bacula bacula-mysql-3.0.1-1 bacula-mtx-3.0.1-1 bacula-gconsole-2.4.2-1 # df -h /bacula/2 Filesystem Size Used Avail Use% Mounted on n5200:/raid0/data/backup 2.7T 180G 2.5T 7% /bacula/2 -------------------- bacula-sd.conf --------------- Storage { # definition of myself Name = mad06-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run" Maximum Concurrent Jobs = 20 } # # List Directors who are permitted to contact Storage daemon # Director { Name = mad06-dir Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" } # # Restricted Director, used by tray-monitor to get the # status of the storage daemon # Director { Name = mad06-mon Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Monitor = yes } # # Devices supported by this Storage daemon # To connect, the Director's bacula-dir.conf must have the # same Name and MediaType. # Device { Name = FileStorage2 Media Type = File Archive Device = /bacula/2 LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; LabelMedia = yes; # label media automatically } # # Send all messages to the Director, # mount messages also are sent to the email address # Messages { Name = Standard director = mad06-dir = all } ---------------- bacula-fd.conf ------------------------ # # List Directors who are permitted to contact this File daemon # Director { Name = mad06-dir Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # password for FileDaemon } # # Restricted Director, used by tray-monitor to get the # status of the file daemon # Director { Name = mad06-mon Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Monitor = yes } # # "Global" File daemon configuration specifications # FileDaemon { # this is me Name = mad06-fd FDport = 9102 # where we listen for the director WorkingDirectory = /var/lib/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } # Send all messages except skipped files back to Director Messages { Name = Standard director = mad06-dir = all, !skipped, !restored } ------------------ bacula-dir.conf ------------------------- Director { # define myself Name = mad06-dir DIRport = 9101 # where we listen for UA connections QueryFile = "/usr/lib64/bacula/query.sql" WorkingDirectory = "/var/lib/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Messages = Daemon } JobDefs { Name = "JobDefsDefault" Type = Backup Level = Incremental Client = mad06-fd FileSet = "mad06-Full Set" Schedule = "WeeklyCycle" Storage = File Messages = Standard Pool = DISK_POOL Priority = 10 } # mad06 backup Job { Name = "mad06-job" Type = Backup Client = mad06-fd FileSet = "mad06-Full Set" Schedule = "WeeklyCycle" Storage = File Messages = Standard Pool = DISK_POOL Full Backup Pool = DISK_POOL Incremental Backup Pool = DISK_POOL Differential Backup Pool = DISK_POOL Write Bootstrap = "/var/lib/bacula/mad06-job.bsr" Priority = 10 } # Backup the catalog database (after the nightly save) Job { Name = "BackupCatalog" JobDefs = "JobDefsDefault" Level = Full FileSet = "Catalog" Schedule = "WeeklyCycleAfterBackup" # This creates an ASCII copy of the catalog RunBeforeJob = "/usr/lib64/bacula/make_catalog_backup bacula bacula XXXXXXXX" # This deletes the copy of the catalog RunAfterJob = "/usr/lib64/bacula/delete_catalog_backup" Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" Priority = 11 # run after main backup } # # Standard Restore template, to be changed by Console program # Only one such job is needed for all Jobs/Clients/Storage ... # Job { Name = "RestoreFiles" Type = Restore Client = mad06-fd FileSet = "mad06-Full Set" Storage = File Pool = Default Messages = Standard Where = /bacula-restores } # List of files to be backed up FileSet { Name = "mad06-Full Set" Include { Options { signature = MD5 compression = GZIP } File = / File = /boot File = /boot2 File = /export/... File = /export/home File = /export/mirror File = /export/... File = /export/photos File = /export/... File = /home/sjmudd File = /openpkg File = /vmware File = /vmware/... File = /vmware/... File = /vmware/... File = /vmware/... } Exclude { File = /proc File = /tmp File = /var/tmp File = /.journal File = /.fsck File = /bacula File = /bacula-restores } } # # When to do the backups, full backup on first sunday of the month, # differential (i.e. incremental since full) every other sunday, # and incremental backups other days Schedule { Name = "WeeklyCycle" Run = Level=Full 1st sun at 23:05 Run = Level=Differential 2nd-5th sun at 23:05 # 2 incrementals a day Run = Level=Incremental mon-sat at 23:05 Run = Level=Incremental mon-sat at 11:05 } # This schedule does the catalog. It starts after the WeeklyCycle Schedule { Name = "WeeklyCycleAfterBackup" Run = Level=Full sun-sat at 23:10 } # This is the backup of the catalog FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = /var/lib/bacula/bacula.sql } } # Client (File Services) to backup Client { Name = mad06-fd Address = mad06 FDPort = 9102 Catalog = MyCatalog Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # password for FileDaemon File Retention = 20 days # 30 days Job Retention = 32 days # six months AutoPrune = yes # Prune expired Jobs/Files } # Definition of file storage device Storage { Name = File Address = mad06 # N.B. Use a fully qualified name here SDPort = 9103 Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Device = FileStorage1 Media Type = File } # Generic catalog service Catalog { Name = MyCatalog dbname = bacula; user = bacula; password = "XXXXXXXX" } # Reasonable message delivery -- send most everything to email address # and to the console Messages { Name = Standard mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" mail = r...@mad06.wl0.org = all, !skipped operator = r...@mad06.wl0.org = mount console = all, !skipped, !saved append = "/var/lib/bacula/log" = all, !skipped, !saved } # # Message delivery for daemon messages (no job). Messages { Name = Daemon mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r" mail = r...@mad06.wl0.org = all, !skipped console = all, !skipped, !saved append = "/var/lib/bacula/log" = all, !skipped } # Default pool definition Pool { Name = Default Pool Type = Backup Maximum Volume Bytes = 2G Recycle = yes AutoPrune = yes Label Format = VOL- Maximum Volumes = 100 } ################################################################################### #### taken from http://www.bacula.org/en/rel-manual/Automated_Disk_Backup.html # This is to replace what I did before. I want to have a max of 100x files of # 2GB. Thus no explicit expiration. Whatever fits. Pool { Name = DISK_POOL Pool Type = Backup Maximum Volume Bytes = 2G Recycle = yes AutoPrune = yes Maximum Volume Jobs = 1 Label Format = VOL- Maximum Volumes = 100 } ################################################################################### # Scratch pool definition Pool { Name = Scratch Pool Type = Backup } # # Restricted console used by tray-monitor to get the status of the director # Console { Name = mad06-mon Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" CommandACL = status, .status } ------------ -end ------------------ Thanks for any help you can provide, Simon ------------------------------------------------------------------------------ Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users