12.0.3  [sanoid]    reverted DST handling and improved it as quickfix (@phreaker0)
2
32.0.2  [overall]   documentation updates, new dependencies, small fixes, more warnings (@benyanke, @matveevandrey, @RulerOf, @klemens-u, @johnramsden, @danielewood, @g-a-c, @hartzell, @fryfrog, @phreaker0)
4       [sanoid]    changed and simplified DST handling (@shodanshok)
5       [syncoid]   reset partially resume state automatically (@phreaker0)
6       [syncoid]   handle some zfs erros automatically by parsing the stderr outputs (@phreaker0)
7       [syncoid]   fixed ordering of snapshots with the same creation timestamp (@phreaker0)
8       [syncoid]   don't use hardcoded paths (@phreaker0)
9       [syncoid]   fix for special setup with listsnapshots=on (@phreaker0)
10       [syncoid]   check ssh connection on startup (@phreaker0)
11       [syncoid]   fix edge case with initial send and no-stream option (@phreaker0)
12       [syncoid]   fallback to normal replication if clone recreation fails (@phreaker0)
13       [packaging] ebuild for gentoo (@thehaven)
14       [syncoid]   support for zfs bookmark creation (@phreaker0)
15       [syncoid]   fixed bookmark edge cases (@phreaker0)
16       [syncoid]   handle invalid dataset paths nicely (@phreaker0)
17       [syncoid]   fixed resume support check to be zpool based (@phreaker0)
18       [sanoid]    added hotspare template  (@jimsalterjrs)
19       [syncoid]   support for advanced zfs send/recv options (@clinta, @phreaker0)
20       [syncoid]   option to change mbuffer size (@TerraTech)
21       [tests]     fixes for FreeBSD (@phreaker0)
22       [sanoid]    support for zfs recursion (@jMichaelA, @phreaker0)
23       [syncoid]   fixed bookmark handling for volumens (@ppcontrib)
24       [sanoid]    allow time units for monitoring warn/crit values (@phreaker0)
25
262.0.1  [sanoid]    fixed broken monthly warn/critical monitoring values in default template (@jimsalterjrs)
27       [sanoid]    flag to force pruning while filesystem is in an active zfs send/recv (@shodanshok)
28       [syncoid]   flags to disable rollbacks (@shodanshok)
29
302.0.0  [overall]   documentation updates, small fixes, more warnings (@sparky3387, @ljwobker, @phreaker0)
31       [syncoid]   added force delete flag (@phreaker0)
32       [sanoid]    removed sleeping between snapshot taking (@phreaker0)
33       [syncoid]   added '--no-privilege-elevation' option to bypass root check (@lopsided98)
34       [sanoid]    implemented weekly period (@phreaker0)
35       [syncoid]   implemented support for zfs bookmarks as fallback (@phreaker0)
36       [sanoid]    support for pre, post and prune snapshot scripts (@jouir, @darkbasic, @phreaker0)
37       [sanoid]    ignore snapshots types that are set to 0 (@muff1nman)
38       [packaging] split snapshot taking/pruning into separate systemd units for debian package (@phreaker0)
39       [syncoid]   replicate clones (@phreaker0)
40       [syncoid]   added compression algorithms: lz4, xz (@spheenik, @phreaker0)
41       [sanoid]    added option to defer pruning based on the available pool capacity (@phreaker0)
42       [sanoid]    implemented frequent snapshots with configurable period (@phreaker0)
43       [syncoid]   prevent a perl warning on systems which doesn't output estimated send size information (@phreaker0)
44       [packaging] dependency fixes (@rodgerd, mabushey)
45       [syncoid]   implemented support for excluding children of a specific dataset (@phreaker0)
46       [sanoid]    monitor-health command additionally checks vdev members for io and checksum errors (@phreaker0)
47       [syncoid]   added ability to skip datasets by a custom dataset property 'syncoid:no-sync' (@attie)
48       [syncoid]   don't die on some critical replication errors, but continue with the remaining datasets (@phreaker0)
49       [syncoid]   return a non zero exit code if there was a problem replicating datasets (@phreaker0)
50       [syncoid]   make local source bwlimit work (@phreaker0)
51       [syncoid]   fix 'resume support' detection on FreeBSD (@pit3k)
52       [sanoid]    updated INSTALL with missing dependency
53       [sanoid]    fixed monitor-health command for pools containing cache and log devices (@phreaker0)
54       [sanoid]    quiet flag suppresses all info output (@martinvw)
55       [sanoid]    check for empty lockfile which lead to sanoid failing on start (@jasonblewis)
56       [sanoid]    added dst handling to prevent multiple invalid snapshots on time shift (@phreaker0)
57       [sanoid]    cache improvements, makes sanoid much faster with a huge amount of datasets/snapshots (@phreaker0)
58       [sanoid]    implemented monitor-capacity flag for checking zpool capacity limits (@phreaker0)
59       [syncoid]   Added support for ZStandard compression.(@danielewood)
60       [syncoid]   implemented support for excluding datasets from replication with regular expressions (@phreaker0)
61       [syncoid]   correctly parse zfs column output, fixes resumeable send with datasets containing spaces (@phreaker0)
62       [syncoid]   added option for using extra identification in the snapshot name for replication to multiple targets (@phreaker0)
63       [syncoid]   added option for skipping the parent dataset in recursive replication (@phreaker0)
64       [syncoid]   typos (@UnlawfulMonad, @jsavikko, @phreaker0)
65       [sanoid]    use UTC by default in unit template and documentation (@phreaker0)
66       [syncoid]   don't prune snapshots if instructed to not create them either (@phreaker0)
67       [syncoid]   documented compatibility issues with (t)csh shells (@ecoutu)
68
691.4.18 implemented special character handling and support of ZFS resume/receive tokens by default in syncoid,
70       thank you @phreaker0!
71
721.4.17 changed die to warn when unexpectedly unable to remove a snapshot - this
73       allows sanoid to continue taking/removing other snapshots not affected by
74       whatever lock prevented the first from being taken or removed
75
761.4.16 merged @hrast01's extended fix to support -o option1=val,option2=val passthrough to SSH. merged @JakobR's
77       off-by-one fix to stop unnecessary extra snapshots being taken under certain conditions. merged @stardude900's
78       update to INSTALL for FreeBSD users re:symlinks. Implemented @LordAro's update to change DIE to WARN when
79       encountering a dataset with no snapshots and --no-sync-snap set during recursive replication. Implemented
80       @LordAro's update to sanoid.conf to add an ignore template which does not snap, prune, or monitor.
81
821.4.15 merged @hrast01's -o option to pass ssh CLI options through. Currently only supports a single -o=option argument -
83       in the near future, need to add some simple parsing to expand -o=option1,option2 on the CLI to
84       -o option1 -o option2 as passed to SSH.
85
861.4.14 fixed significant regression in syncoid - now pulls creation AND guid on each snap; sorts by
87       creation and matches by guid. regression reported in #112 by @da-me, thank you!
88
891.4.13 Syncoid will now continue trying to replicate other child datasets after one dataset fails replication
90       when called recursively. Eg syncoid -r source/parent target/parent when source/parent/child1 has been
91       deleted and replaced with an imposter will no longer prevent source/parent/child2 from successfully
92       replicating to target/parent/child2.  This could still use some cleanup TBH; syncoid SHOULD exit 3
93       if any of these errors happen (to assist detection of errors in scripting) but now would exit 0.
94
951.4.12 Sanoid now strips trailing whitespace in template definitions in sanoid.conf, per Github #61
96
971.4.11 enhanced Syncoid to use zfs `guid` property rather than `creation` property to ensure snapshots on source
98       and target actually match. This immediately prevents conflicts due to timezone differences on source and target,
99       and also paves the way in the future for Syncoid to find matching snapshots even after `zfs rename` on source
100       or target. Thank you Github user @mailinglists35 for the idea!
101
1021.4.10 added --compress=pigz-fast and --compress=pigz-slow. On a Xeon E3-1231v3, pigz-fast is equivalent compression
103       to --compress=gzip but with compressed throughput of 75.2 MiB/s instead of 18.1 MiB/s. pigz-slow is around 5%
104       better compression than compress=gzip with roughly equivalent compressed throughput. Note that pigz-fast produces
105       a whopping 20+% better compression on the test data (a linux boot drive) than lzop does, while still being fast
106       enough to saturate or nearly saturate a real-world gigabit LAN link.  The down side: pigz chews through 100% util
107       of all available system threads, if not bottlenecked by the network link speed.
108
109      Default compression remains lzop for SSH transport, with compression automatically set to none if there's no transport
110      (ie syncoid replication from dataset to dataset on the local machine only).
111
1121.4.9 added -c option to manually specify the SSH cipher used.  Must use a cipher supported by both source and target! Thanks
113      Tamas Papp.
114
1151.4.8 added --no-stream argument to syncoid: allows use of -i incrementals (do not replicate a full snapshot stream, only a
116      direct incremental update from oldest to most recent snapshot) instead of the normal -I incrementals which include
117      all intermediate snapshots.
118
119      added --no-sync-snap, which has syncoid replicate using only the newest PRE-EXISTING snapshot on source,
120      instead of default behavior in which syncoid creates a new, ephemeral syncoid snapshot.
121
1221.4.7a (syncoid only) added standard invocation output when called without source or target
123       as per @rriley and @fajarnugraha suggestions
124
1251.4.7 reverted Perl shebangs to #!/usr/bin/perl - sorry FreeBSD folks, shebanged to /usr/bin/env perl bare calls to syncoid
126      or sanoid (without explicit calls to Perl) don't work on EITHER of our systems.  I'm not OK with that, this is going to be
127      an OS localization issue that can either be addressed with BSD-specific packaging, or you can individually address it
128      by editing the shebangs on your own systems OR by doing a one-time ln -s /usr/local/bin/perl to /usr/bin/perl, which will
129      fix the issue for this particular script AND all other Perl scripts developed on non-BSD systems.
130
131      also temporarily dyked out the set readonly functionality in syncoid - it was causing more problems than it prevented, and
132      using the -F argument with receive prevents incautious writes (including just cd'ing into mounted datasets, if atimes are on)
133      from interrupting syncoid runs anyway.
134
1351.4.6c merged @gusson's pull request to add -sshport argument
136
1371.4.6b updated default cipherlist for syncoid to
138       chacha20-poly1305@openssh.com,arcfour - arcfour isn't supported on
139       newer SSH (in Ubuntu Xenial and FreeBSD), chacha20 isn't supported on
140       some older SSH versions (Ubuntu Precise< I think?)
141
1421.4.6a due to bug in ZFS on Linux which frequently causes errors to return from `zfs set readonly`,
143       changed ==0 or die in setzfsvalue() to ==0 or [complain] - it's not worth causing replication
144       to fail while this ZFS on Linux bug exists.
145
1461.4.6 added a mollyguard to syncoid to help newbies who try to zfs create a new target dataset
147      before doing an initial replication, instead of letting the replication itself create
148      the target.
149
150      added "==0 or die" to all system() calls in sanoid and syncoid that didn't already have them.
151
1521.4.5 altered shebang to '#!/usr/bin/env perl' for enhanced FreeBSD compatibility
153
1541.4.4 merged pull requests from jjlawren for OmniOS compatibility, added --configdir=/path/to/configs CLI option to sanoid at jjlawrens' request presumably for same
155
1561.4.3 added SSH persistence to syncoid - using socket speeds up SSH overhead 300%! =)
157      one extra commit to get rid of the "Exit request sent." SSH noise at the end.
158
1591.4.2 removed -r flag for zfs destroy of pruned snapshots in sanoid, which unintentionally caused same-name
160      child snapshots to be deleted - thank you Lenz Weber!
161
1621.4.1 updated check_zpool() in sanoid to parse zpool list properly both pre- and post- ZoL v0.6.4
163
1641.4.0 added findoid tool - find and list all versions of a given file in all available ZFS snapshots.
165      use: findoid /path/to/file
166
1671.3.1 whoops - prevent process_children_only from getting set from blank value in defaults
168
1691.3.0 changed monitor_children_only to process_children_only. which keeps sanoid from messing around with
170      empty parent datasets at all. also more thoroughly documented features in default config files.
171
1721.2.0 added monitor_children_only parameter to sanoid.conf for use with recursive definitions - in cases where container dataset is kept empty
173
1741.1.0 woooo - working recursive definitions in Sanoid!  Also intelligent config errors in Sanoid; will die with errors if unknown config value is set.
175
1761.0.20 greatly cleaned up config parsing in sanoid, got rid of 'hardcoded defaults' in favor of /etc/sanoid/sanoid.defaults.conf
177
1781.0.19 working recursive sync (sync specified dataset and all child datasets, ie pool/ds, pool/ds/1, pool, ds/1/a, pool/ds/2 ...) with --recursive or -r in syncoid!
179
1801.0.18 updated syncoid to break sync out of main routine and into syncdataset(). this will allow doing recursive sync, in next update :)
181
1821.0.17 updated syncoid to use sudo when necessary if it isn't already root - working user needs NOPASSWD for /sbin/zfs in /etc/sudoers
183       updated syncoid to throw errors on unknown arguments
184
1851.0.16 updated sanoid to use VASTLY improved CLI argument parsing, throw errors on unknown arguments, etc
186
1871.0.15 updated syncoid to accept compression engine flags - --compress=lzo|gzip|none
188
1891.0.14 updated syncoid to reduce output when fetching snapshot list - thank you github user @0xFate.
190
1911.0.13 removed monitor_version again - sorry for the feature instability, forgot I removed it in the first place because I didn't like pulling
192       in so many dependencies for such a trivial feature
193
1941.0.12 patched default sanoid.conf provided to set yearly_mon and yearly_mday correctly
195
1961.0.11 patched bug in yearly snapshots - thank you @stevenolen for the bug report!
197
1981.0.10 added --monitor-version to check installed version against current version in trunk on GitHub
199
2001.0.9 added CR/LF after --monitor-health message output to make CLI usage cleaner looking
201
2021.0.8 added --version checking in sanoid and syncoid
203
2041.0.7 got rid of unnecessary sudo commands in sanoid's --monitor-health
205
2061.0.6 added 'or die' to make sure /var/cache/sanoidsnapshots.txt is writeable
207
2081.0.5 fixed another ps BSD-ism bug in sanoid
209
2101.0.4 updated ps usage in sanoid to comply with BSDisms
211
2121.0.3 nerfed references to $debug (not implemented yet) in sanoid
213
2141.0.2 implemented iszfsbusy check to the thinning routine in sanoid
215
2161.0.1 ported slightly modified iszfsbusy sub from syncoid to sanoid (to keep from thinning snapshots during replications)
217
2181.0.0 initial commit to Github
219