Added -F (--force) to allow 1:1 replication.
This commit is contained in:
		| @ -14,7 +14,7 @@ import os.path | ||||
| class ZfsAutobackup: | ||||
|     """main class""" | ||||
|  | ||||
|     VERSION = "3.1.2-rc1" | ||||
|     VERSION = "3.1.2-rc2" | ||||
|     HEADER = "zfs-autobackup v{} - (c)2021 E.H.Eefting (edwin@datux.nl)".format(VERSION) | ||||
|  | ||||
|     def __init__(self, argv, print_arguments=True): | ||||
| @ -87,6 +87,8 @@ class ZfsAutobackup: | ||||
|         parser.add_argument('--rollback', action='store_true', | ||||
|                             help='Rollback changes to the latest target snapshot before starting. (normally you can ' | ||||
|                                  'prevent changes by setting the readonly property on the target_path to on)') | ||||
|         parser.add_argument('--force', '-F', action='store_true', | ||||
|                             help='Use zfs -F option to force overwrite/rollback. (Usefull with --strip-path=1, but use with care)') | ||||
|         parser.add_argument('--destroy-incompatible', action='store_true', | ||||
|                             help='Destroy incompatible snapshots on target. Use with care! (implies --rollback)') | ||||
|         parser.add_argument('--destroy-missing', metavar="SCHEDULE", type=str, default=None, | ||||
| @ -438,7 +440,7 @@ class ZfsAutobackup: | ||||
|                                               destroy_incompatible=self.args.destroy_incompatible, | ||||
|                                               send_pipes=send_pipes, recv_pipes=recv_pipes, | ||||
|                                               decrypt=self.args.decrypt, encrypt=self.args.encrypt, | ||||
|                                               zfs_compressed=self.args.zfs_compressed) | ||||
|                                               zfs_compressed=self.args.zfs_compressed, force=self.args.force) | ||||
|             except Exception as e: | ||||
|                 fail_count = fail_count + 1 | ||||
|                 source_dataset.error("FAILED: " + str(e)) | ||||
|  | ||||
| @ -585,7 +585,7 @@ class ZfsDataset: | ||||
|  | ||||
|         return output_pipe | ||||
|  | ||||
|     def recv_pipe(self, pipe, features, recv_pipes, filter_properties=None, set_properties=None, ignore_exit_code=False): | ||||
|     def recv_pipe(self, pipe, features, recv_pipes, filter_properties=None, set_properties=None, ignore_exit_code=False, force=False): | ||||
|         """starts a zfs recv for this snapshot and uses pipe as input | ||||
|  | ||||
|         note: you can it both on a snapshot or filesystem object. The | ||||
| @ -626,6 +626,9 @@ class ZfsDataset: | ||||
|         # verbose output | ||||
|         cmd.append("-v") | ||||
|  | ||||
|         if force: | ||||
|             cmd.append("-F") | ||||
|  | ||||
|         if 'extensible_dataset' in features and "-s" in self.zfs_node.supported_recv_options: | ||||
|             # support resuming | ||||
|             self.debug("Enabled resume support") | ||||
| @ -656,7 +659,7 @@ class ZfsDataset: | ||||
|  | ||||
|     def transfer_snapshot(self, target_snapshot, features, prev_snapshot, show_progress, | ||||
|                           filter_properties, set_properties, ignore_recv_exit_code, resume_token, | ||||
|                           raw, send_properties, write_embedded, send_pipes, recv_pipes, zfs_compressed): | ||||
|                           raw, send_properties, write_embedded, send_pipes, recv_pipes, zfs_compressed, force): | ||||
|         """transfer this snapshot to target_snapshot. specify prev_snapshot for | ||||
|         incremental transfer | ||||
|  | ||||
| @ -697,7 +700,7 @@ class ZfsDataset: | ||||
|         pipe = self.send_pipe(features=features, show_progress=show_progress, prev_snapshot=prev_snapshot, | ||||
|                               resume_token=resume_token, raw=raw, send_properties=send_properties, write_embedded=write_embedded, send_pipes=send_pipes, zfs_compressed=zfs_compressed) | ||||
|         target_snapshot.recv_pipe(pipe, features=features, filter_properties=filter_properties, | ||||
|                                   set_properties=set_properties, ignore_exit_code=ignore_recv_exit_code, recv_pipes=recv_pipes) | ||||
|                                   set_properties=set_properties, ignore_exit_code=ignore_recv_exit_code, recv_pipes=recv_pipes, force=force) | ||||
|  | ||||
|     def abort_resume(self): | ||||
|         """abort current resume state""" | ||||
| @ -994,7 +997,7 @@ class ZfsDataset: | ||||
|  | ||||
|     def sync_snapshots(self, target_dataset, features, show_progress, filter_properties, set_properties, | ||||
|                        ignore_recv_exit_code, holds, rollback, decrypt, encrypt, also_other_snapshots, | ||||
|                        no_send, destroy_incompatible, send_pipes, recv_pipes, zfs_compressed): | ||||
|                        no_send, destroy_incompatible, send_pipes, recv_pipes, zfs_compressed, force): | ||||
|         """sync this dataset's snapshots to target_dataset, while also thinning | ||||
|         out old snapshots along the way. | ||||
|  | ||||
| @ -1079,7 +1082,9 @@ class ZfsDataset: | ||||
|                                                   filter_properties=active_filter_properties, | ||||
|                                                   set_properties=active_set_properties, | ||||
|                                                   ignore_recv_exit_code=ignore_recv_exit_code, | ||||
|                                                   resume_token=resume_token, write_embedded=write_embedded, raw=raw, send_properties=send_properties, send_pipes=send_pipes, recv_pipes=recv_pipes, zfs_compressed=zfs_compressed) | ||||
|                                                   resume_token=resume_token, write_embedded=write_embedded, raw=raw, | ||||
|                                                   send_properties=send_properties, send_pipes=send_pipes, | ||||
|                                                   recv_pipes=recv_pipes, zfs_compressed=zfs_compressed, force=force) | ||||
|  | ||||
|                 resume_token = None | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user