Re: Suggestions for secondary cloud backups

Phil Stracchino <[email protected]> Fri, 3 Jul 2026 11:58:21 -0400
Newsgroups gmane.comp.bacula.user
Organization Fenian House Publishing
Message-ID <[email protected]>
On 7/3/26 10:38, Andrea Venturoli wrote:
>> Job {
>>    Name=CloudBackupFoo
>>    Schedule=Weekly
>>    JobDefs="DefaultJob"
>>    FileSet=Foo
>>    Type=Copy
>>    Selection Type=SQLQuery
>>    Selection Pattern="SELECT jobid FROM job WHERE name='BackupFoo' AND (level='F' OR level='D') AND jobstatus='T' AND poolid!=14 AND poolid!=15 ORDER BY endtime DESC LIMIT 1"
>>    Full Backup Pool=Full
>>    Differential Backup Pool=Diff
>> }
> 
> This sort of works, but there are a few problems.
> 
> A) All copy jobs end up in the "CloudFull" pool; no matter if they were
> a copy of a full or diff job; "CloudDiff" is never used.
> This will prevent keeping fulls for, say, 4 months, and diffs for a
> shorter time, thus wasting cloud space.

Because your query does not distinguish between Full and Differential 
jobs.  If you want to store them separately, you need to select them 
separately.
> B) If host "foo" does a full, the full gets copied; but if it skips the
> next diff, the full will be copied twice, thus, again, wasting space for
> nothing.

Because you didn't tell it not to.  You told it to use the most recent 
job, whatever it is.


This is my SQL selection query for copy jobs:

   Selection Pattern = "SELECT DISTINCT J.JobId
                        FROM Job J
                        JOIN Pool P ON P.PoolId = J.PoolId
                        LEFT JOIN Job J2 ON J2.PriorJobId = J.JobId
                        WHERE P.Name = 'Full-Disk'
                        AND J2.JobId IS NULL
                        AND J.Type = 'B'
                        AND J.JobStatus IN ('T','W')
                        AND J.JobBytes > 0
                        AND J.StartTime > now() - interval 7 day"

Notice that it selects copies only within a specified time window, and 
only jobs that have not already been copied.  (That's what the J2 join 
is for:  "No later Job points at this Job as its prior.")  It also 
selects only one Job type at a time (though I do it by Pool), where 
yours mixes Full and Differential together.



-- 
   Phil Stracchino
   Fenian House Publishing
   [email protected]
   [email protected]
   Landline: +1.603.293.8485
   Mobile:   +1.603.998.6958