Hi all, I have a client with ~2TB of data. A full backup job takes about 15 hours. Once the backup finishes, a Copy Job is triggered (Selection Type = PoolUncopiedJobs) to replicate the volume to a remote Storage Daemon — which takes another 15 hours per volume in the best-case scenario. Finally, for each backup, I run a Restore job on a replica server (same client setup), which adds yet another 15 hours.
The trivial approach to parallelize these jobs (Backup, Copy, Restore) has been to define a separate Storage + Device pair for each Job. The only difference between them is the Name. All Devices share the same Archive Device path — which I'm unsure is a good practice. Is there a better way to parallelize Backup, Copy, and Restore jobs on the same Pool/Volumes without defining a separate Storage/Device for each Job? What would be considered a best-practice setup here? TL;DR I need to run Backup, Copy, and Restore jobs in parallel for the same client (Restore happens on a replica server). Ideally without creating separate Storage/Device/Pool for each job. Bacula Version: 15.0.2 (21 March 2024) This is the config that currently allows me to parallelize only Backup and Restore. Following this logic, I’d need to create additional Storage + Device just for the Copy jobs. Client { Name = "mongodb01-fd" Address = xx.xx.xx.xx FDPort = 9102 Catalog = MyCatalog Password = "PASSWORD" File Retention = 11 days Job Retention = 2 months AutoPrune = yes Heartbeat Interval = 1m TLS Require = yes TLS PSK Enable = yes } Job { Name = "mongodb01-Backup" JobDefs = "MongoDef" Pool = "mongodb01-baculaserver01-Pool" Level = Full Client = "mongodb01-fd" Storage = "mongodb01_baculaserver01_Storage" Schedule = "DisabledSchedule" # This is how I disable this client so it doesn't affect others using the same JobDef with valid Schedules. I launch the backup manually using a bconsole command. @"/opt/bacula/etc/bacula-dir.conf.d/jobdefs/RunCopyToServer.jd" # This is how I trigger Copy Jobs for clients with small backups. It works well within a 24-hour window. For this client, I should remove this line. } Pool { Name = "mongodb01-baculaserver01-Pool" Use Volume Once = yes Pool Type = Backup LabelFormat = "mongodb01-" AutoPrune = yes Recycle = yes VolumeRetention = 30 days Maximum Volumes = 365 Maximum Volume Jobs = 1 Recycle Oldest Volume = yes Next Pool = "mongodb01-baculaserver02-Pool" # All copies go from server01 to server02 } Pool { Name = "mongodb01-baculaserver02-Pool" Use Volume Once = yes Pool Type = Backup LabelFormat = "mongodb01-" AutoPrune = yes Recycle = yes VolumeRetention = 30 days Maximum Volumes = 365 Maximum Volume Jobs = 1 Recycle Oldest Volume = yes Storage = "mongodb01_baculaserver02_Storage" Next Pool = "mongodb01-baculaserver01-Pool" # If backup runs on server02, the copy goes to server01. Normally, all main backups are done on server01. } Storage { Name = "mongodb01_baculaserver01_Storage" Address = "baculaserver01.domain" SDPort = 9103 Password = "xxxxxxxxxxxxxxxxxxxxxxx" Device = "mongodb01_baculaserver01_Device" Media Type = File1 Maximum Concurrent Jobs = "10" Heartbeat Interval = 10 } Storage { Name = "mongodb01_baculaserver01_Storage_2" Address = "baculaserver01.domain" SDPort = 9103 Password = "xxxxxxxxxxxxxxxxxxxxxxxx" Device = "mongodb01_baculaserver01_Device_2" Media Type = File1 Maximum Concurrent Jobs = "10" Heartbeat Interval = 10 } Storage { Name = "mongodb01_baculaserver02_Storage" Address = "baculaserver02.domain" SDPort = 9103 Password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" Device = "mongodb01_baculaserver02_Device" Media Type = File1 Maximum Concurrent Jobs = "10" Heartbeat Interval = 10 } Device { Name = "mongodb01_baculaserver01_Device" Media Type = File1 Archive Device = "/backup/bacula-storage/mongodb01/" Maximum Concurrent Jobs = 10 LabelMedia = yes Random Access = Yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = yes } Device { Name = "mongodb01_baculaserver01_Device_2" Media Type = File1 Archive Device = "/backup/bacula-storage/mongodb01/" Maximum Concurrent Jobs = 10 LabelMedia = yes Random Access = Yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = yes } #This Device is stored in baculaserver02 where only a storage daemon is running (not bacula-dir) Device { Name = "mongodb01_baculaserver02_Device" Media Type = File1 Archive Device = "/backup/bacula-storage/mongodb01/" LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Backup is launched via cron every 3 days using: echo 'run job=mongodb01-Backup storage="mongodb01_baculaserver01_Storage_2" yes' | docker exec -i bacula-dir /opt/bacula/bin/bconsole Restore is triggered by another cron using the default Storage defined in the Job. Any advice or shared experience would be greatly appreciated. Thanks,
_______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users