Hi Robert! Thanks for your time and input! What you suggested was exactly what came to my mind yesterday. I tested it and saw something very strange: I was able to start one Backup Job and 5 Copy Jobs in parallel, and everything looked fine at first. However, on the remote SD, the file sizes stopped growing independently, and a new file appeared that seems to be aggregating all 5 Copy Jobs into a single volume:
-rw-r----- 1 root root 4.6T Jul 16 12:35 mongodb01-2510 ← this should be 1.5T max, seems to be merging copies -rw-r----- 1 root root 190K Jul 15 20:05 mongodb01-2499 -rw-r----- 1 root root 127K Jul 15 20:04 mongodb01-2495 -rw-r----- 1 root root 64K Jul 15 20:04 mongodb01-2452 -rw-r----- 1 root root 318 Jul 15 20:04 mongodb01-2441 -rw-r----- 1 root root 44G Jul 15 20:03 mongodb01-2439 -rw-r----- 1 root root 1.5T Jun 29 18:43 mongodb01-2273 ← expected result -rw-r----- 1 root root 1.5T Jun 29 00:55 mongodb01-2268 ← expected result So it seems the volumes from the parallel Copy Jobs are being merged unintentionally. I added an Autochanger with 5 Devices, declared a Storage using the Autochanger, and pointed my Copy Jobs to this new Storage resource. You can find my config here: https://gist.github.com/lean2206/54b37b8d599243f4b95e047fa4a8b47a Any idea what might be causing this behavior? Meanwhile, until I find a better approach, I'll run the Restore Job using a RunAfterJob from the Backup, and trigger the Copy Jobs via cron — both using separate Devices, in parallel. So far, this setup would require 2 Devices. Thanks again! On Tue, Jul 15, 2025 at 2:03 PM Rob Gerber <r...@craeon.net> wrote: > Leandro, > > The following assumes you are using disk based backup, where the "drives" > and "autochangers" are virtual. > > I would suggest creating multiple "drive" devices in your bacula-sd.conf > for each SD destination, then tie them together with a single autochanger > resource in those respective bacula-sd.conf files. In your bacula-dir.conf, > in your storage resources, reference the respective autochanger resources. > If your jobs are ran with the same priority, and all the various daemons > have enough "allow simultaneous jobs" specified (not the actual option, I > can't recall the exact wording used by Bacula), then you should see better > parallelism. I believe you will then be limited by your disk / netwoek > bandwidth, and single core performance on various Bacula tasks like hashing > files. > > At least, unless I misunderstand something. > > I would provide config examples, but I am afk right now. > > Robert Gerber > 402-237-8692 > r...@craeon.net > > On Tue, Jul 15, 2025, 9:51 AM Leandro Saldivar via Bacula-users < > bacula-users@lists.sourceforge.net> wrote: > >> 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 >> >
_______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users