diff options
author | LOLi <[email protected]> | 2018-02-21 21:32:06 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-02-21 12:32:06 -0800 |
commit | faa97c1619e5d7b51b2077db18fb92c5279b9db3 (patch) | |
tree | 008822d20f9ce2c832fff79b89564c0cb76806a8 /cmd/zfs | |
parent | b0918402dc9a0f81dd52880fbd4e4f4f2133764b (diff) |
Want 'zfs send -b'
This change implements 'zfs send -b' which can be used to send only
received property values whether or not they are overridden by local
settings.
This can be very useful during "restore" operations from a backup pool
because it allows to send only the property values originally sent
from the backup source, even though they were later modified on the
destination either by a 'zfs set' operation, explicit 'zfs inherit' or
overridden during the receive process via 'zfs receive -o|-x'.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: loli10K <[email protected]>
Closes #7156
Diffstat (limited to 'cmd/zfs')
-rw-r--r-- | cmd/zfs/zfs_main.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c index b9c3a5cf3..718ceea50 100644 --- a/cmd/zfs/zfs_main.c +++ b/cmd/zfs/zfs_main.c @@ -288,9 +288,9 @@ get_usage(zfs_help_t idx) case HELP_ROLLBACK: return (gettext("\trollback [-rRf] <snapshot>\n")); case HELP_SEND: - return (gettext("\tsend [-DnPpRvLecr] [-[i|I] snapshot] " + return (gettext("\tsend [-DnPpRvLecwb] [-[i|I] snapshot] " "<snapshot>\n" - "\tsend [-Lecr] [-i snapshot|bookmark] " + "\tsend [-nvPLecw] [-i snapshot|bookmark] " "<filesystem|volume|snapshot>\n" "\tsend [-nvPe] -t <receive_resume_token>\n")); case HELP_SET: @@ -3944,11 +3944,12 @@ zfs_do_send(int argc, char **argv) {"resume", required_argument, NULL, 't'}, {"compressed", no_argument, NULL, 'c'}, {"raw", no_argument, NULL, 'w'}, + {"backup", no_argument, NULL, 'b'}, {0, 0, 0, 0} }; /* check options */ - while ((c = getopt_long(argc, argv, ":i:I:RDpvnPLet:cw", long_options, + while ((c = getopt_long(argc, argv, ":i:I:RDpvnPLet:cwb", long_options, NULL)) != -1) { switch (c) { case 'i': @@ -3968,6 +3969,9 @@ zfs_do_send(int argc, char **argv) case 'p': flags.props = B_TRUE; break; + case 'b': + flags.backup = B_TRUE; + break; case 'P': flags.parsable = B_TRUE; flags.verbose = B_TRUE; @@ -4048,7 +4052,7 @@ zfs_do_send(int argc, char **argv) if (resume_token != NULL) { if (fromname != NULL || flags.replicate || flags.props || - flags.dedup) { + flags.backup || flags.dedup) { (void) fprintf(stderr, gettext("invalid flags combined with -t\n")); usage(B_FALSE); @@ -4090,7 +4094,8 @@ zfs_do_send(int argc, char **argv) char frombuf[ZFS_MAX_DATASET_NAME_LEN]; if (flags.replicate || flags.doall || flags.props || - flags.dedup || (strchr(argv[0], '@') == NULL && + flags.backup || flags.dedup || + (strchr(argv[0], '@') == NULL && (flags.dryrun || flags.verbose || flags.progress))) { (void) fprintf(stderr, gettext("Error: " "Unsupported flag with filesystem or bookmark.\n")); |