diff --git a/zfs_autobackup b/zfs_autobackup index 0c966ee..10fa91d 100755 --- a/zfs_autobackup +++ b/zfs_autobackup @@ -1344,10 +1344,24 @@ class ZfsAutobackup: # target_node.run(["/root/outputtest"], readonly=True) self.set_title("Selecting") - source_datasets=source_node.selected_datasets - if not source_datasets: + selected_source_datasets=source_node.selected_datasets + if not selected_source_datasets: abort("No source filesystems selected, please do a 'zfs set autobackup:{0}=true' on {1}".format(self.args.backup_name, self.args.ssh_source)) + + source_datasets=[] + + #filter out already replicated stuff? + if not self.args.ignore_replicated: + source_datasets=selected_source_datasets + else: + for selected_source_dataset in selected_source_datasets: + if selected_source_dataset.is_changed(): + source_datasets.append(selected_source_dataset) + else: + selected_source_dataset.verbose("Ignoring, already replicated") + + if not self.args.no_snapshot: self.set_title("Snapshotting") source_node.consistent_snapshot(source_datasets, source_node.new_snapshotname(), allow_empty=self.args.allow_empty) @@ -1374,18 +1388,15 @@ class ZfsAutobackup: for source_dataset in source_datasets: try: - if self.args.ignore_replicated and not source_dataset.is_changed(): - source_dataset.verbose("Already replicated") - else: - #determine corresponding target_dataset - target_name=self.args.target_path + "/" + source_dataset.lstrip_path(self.args.strip_path) - target_dataset=ZfsDataset(target_node, target_name) + #determine corresponding target_dataset + target_name=self.args.target_path + "/" + source_dataset.lstrip_path(self.args.strip_path) + target_dataset=ZfsDataset(target_node, target_name) - #ensure parents exists - if not target_dataset.parent.exists: - target_dataset.parent.create_filesystem(parents=True) + #ensure parents exists + if not target_dataset.parent.exists: + target_dataset.parent.create_filesystem(parents=True) - source_dataset.sync_snapshots(target_dataset, show_progress=self.args.progress, resume=self.args.resume, filter_properties=filter_properties, set_properties=set_properties, ignore_recv_exit_code=self.args.ignore_transfer_errors, source_holds= not self.args.no_holds, rollback=self.args.rollback) + source_dataset.sync_snapshots(target_dataset, show_progress=self.args.progress, resume=self.args.resume, filter_properties=filter_properties, set_properties=set_properties, ignore_recv_exit_code=self.args.ignore_transfer_errors, source_holds= not self.args.no_holds, rollback=self.args.rollback) except Exception as e: source_dataset.error(str(e)) if self.args.debug: