Merge pull request #189 from attie/nosync
added ability to skip datasets... simply set syncoid:no-sync=true
This commit is contained in:
commit
eeedf38d57
26
README.md
26
README.md
|
@ -118,6 +118,32 @@ If ZFS supports resumeable send/receive streams on both the source and target th
|
||||||
|
|
||||||
As of 1.4.18, syncoid also automatically supports and enables resume of interrupted replication when both source and target support this feature.
|
As of 1.4.18, syncoid also automatically supports and enables resume of interrupted replication when both source and target support this feature.
|
||||||
|
|
||||||
|
##### Syncoid Dataset Properties
|
||||||
|
|
||||||
|
+ syncoid:sync
|
||||||
|
|
||||||
|
Available values:
|
||||||
|
|
||||||
|
+ `true` (default if unset)
|
||||||
|
|
||||||
|
This dataset will be synchronised to all hosts.
|
||||||
|
|
||||||
|
+ `false`
|
||||||
|
|
||||||
|
This dataset will not be synchronised to any hosts - it will be skipped. This can be useful for preventing certain datasets from being transferred when recursively handling a tree.
|
||||||
|
|
||||||
|
+ `host1,host2,...`
|
||||||
|
|
||||||
|
A comma separated list of hosts. This dataset will only be synchronised by hosts listed in the property.
|
||||||
|
|
||||||
|
_Note_: this check is performed by the host running `syncoid`, thus the local hostname must be present for inclusion during a push operation // the remote hostname must be present for a pull.
|
||||||
|
|
||||||
|
_Note_: this will also prevent syncoid from handling the dataset if given explicitly on the command line.
|
||||||
|
|
||||||
|
_Note_: syncing a child of a no-sync dataset will currently result in a critical error.
|
||||||
|
|
||||||
|
_Note_: empty properties will be handled as if they were unset.
|
||||||
|
|
||||||
##### Syncoid Command Line Options
|
##### Syncoid Command Line Options
|
||||||
|
|
||||||
+ [source]
|
+ [source]
|
||||||
|
|
17
syncoid
17
syncoid
|
@ -184,6 +184,23 @@ sub syncdataset {
|
||||||
|
|
||||||
if ($debug) { print "DEBUG: syncing source $sourcefs to target $targetfs.\n"; }
|
if ($debug) { print "DEBUG: syncing source $sourcefs to target $targetfs.\n"; }
|
||||||
|
|
||||||
|
my $sync = getzfsvalue($sourcehost,$sourcefs,$sourceisroot,'syncoid:sync');
|
||||||
|
|
||||||
|
if ($sync eq 'true' || $sync eq '-' || $sync eq '') {
|
||||||
|
# empty is handled the same as unset (aka: '-')
|
||||||
|
# definitely sync this dataset - if a host is called 'true' or '-', then you're special
|
||||||
|
} elsif ($sync eq 'false') {
|
||||||
|
if (!$quiet) { print "INFO: Skipping dataset (syncoid:sync=false): $sourcefs...\n"; }
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
my $hostid = hostname();
|
||||||
|
my @hosts = split(/,/,$sync);
|
||||||
|
if (!(grep $hostid eq $_, @hosts)) {
|
||||||
|
if (!$quiet) { print "INFO: Skipping dataset (syncoid:sync doesn't include $hostid): $sourcefs...\n"; }
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# make sure target is not currently in receive.
|
# make sure target is not currently in receive.
|
||||||
if (iszfsbusy($targethost,$targetfs,$targetisroot)) {
|
if (iszfsbusy($targethost,$targetfs,$targetisroot)) {
|
||||||
warn "Cannot sync now: $targetfs is already target of a zfs receive process.\n";
|
warn "Cannot sync now: $targetfs is already target of a zfs receive process.\n";
|
||||||
|
|
Loading…
Reference in New Issue