@@ -91,12 +91,20 @@ def main():
9191def list_snapshots (cfg , configs ):
9292 print ("Listing snapper snapshots:" )
9393 for config in configs :
94+ borg_repo = BorgRepo .create_from_config (config )
9495 snapper_config = SnapperConfig .get (config ["name" ])
9596 print (f"\t Config { snapper_config .name } for subvol { snapper_config .get_path ()} :" )
9697 snapshots = snapper_config .get_snapshots ()
98+ repo_snapshot_ids = borg_repo .list_backup_ids ()
9799 for s in snapshots :
98100 print (
99- f"\t \t Snapshot { s .get_number ()} from { s .get_date ()} is backed up: { s .is_backed_up ()} " )
101+ "\t \t Borg repo {} has backup of snapshot {} from {}: {}" .format (
102+ config ["name" ],
103+ s .get_number (),
104+ s .get_date (),
105+ s .get_snapborg_id () in repo_snapshot_ids ,
106+ )
107+ )
100108
101109
102110def get_configs (cfg , config_arg = None ):
@@ -174,11 +182,13 @@ def backup_config(config, recreate, dryrun):
174182 repo = BorgRepo .create_from_config (config )
175183 # now determine which snapshots need to be backed up
176184 retention_config = repo .get_retention_config ()
185+ backed_up_snapshot_ids = {b for b in repo .list_backup_ids ()}
177186 candidates = [
178187 snapshot
179188 for snapshot in get_retained_snapshots (
180- snapshots , lambda s : s .get_date (),
181- ** retention_config ) if (not snapshot .is_backed_up () or recreate )
189+ snapshots , lambda s : s .get_date (), ** retention_config
190+ )
191+ if snapshot .get_snapborg_id () not in backed_up_snapshot_ids and not recreate
182192 ]
183193
184194 with snapper_config .prevent_cleanup (snapshots = candidates , dryrun = dryrun ):
@@ -191,10 +201,11 @@ def backup_config(config, recreate, dryrun):
191201 if has_error and not config ["fault_tolerant_mode" ]:
192202 raise Exception (f"Error(s) while transferring backups for { snapper_config .name } !" )
193203
204+ repo_snapshot_ids = repo .list_backup_ids ()
194205 if config ["last_backup_max_age" ].total_seconds () > 0 :
195206 # fail if the creation date of the newest snapshot successfully backed up is too old
196207 snapshots = snapper_config .get_snapshots ()
197- backed_up = [ s for s in snapshots if s .is_backed_up () ]
208+ backed_up = [ s for s in snapshots if s .get_snapborg_id () in repo_snapshot_ids ]
198209 if len (snapshots ) > 0 and len (backed_up ) == 0 :
199210 raise Exception ("No snapshots have been transferred to the borg repo!" )
200211 newest_backed_up = max (
@@ -216,9 +227,15 @@ def backup_candidate(snapper_config, borg_repo, candidate, recreate,
216227 if recreate :
217228 borg_repo .delete (backup_name , dryrun = dryrun )
218229 candidate .purge_userdata (dryrun = dryrun )
219- borg_repo .backup (backup_name , path_to_backup , timestamp = candidate .get_date (),
220- exclude_patterns = exclude_patterns , dryrun = dryrun )
221- candidate .set_backed_up (dryrun = dryrun )
230+ snapborg_id = candidate .generate_snapborg_id (dryrun = dryrun )
231+ borg_repo .backup (
232+ backup_name ,
233+ path_to_backup ,
234+ timestamp = candidate .get_date (),
235+ exclude_patterns = exclude_patterns ,
236+ snapborg_id = snapborg_id ,
237+ dryrun = dryrun ,
238+ )
222239 return True
223240 except subprocess .CalledProcessError as e :
224241 LOG .error (f"Error backing up snapshot number { candidate .get_number ()} !\n \t { e } " )
0 commit comments