Subversion Repositories zfs_utils

Rev

Rev 4 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 7
Line 1... Line 1...
1
replication is a script which is designed to manage replicating two sets of
1
replicate is a script which is designed to manage replicating two sets of
2
ZFS snapshots. There are tons of them out there, and this is pretty
2
ZFS snapshots. There are tons of them out there, and this is pretty
3
simplistic, especially as compared to some of the more throurough ones like
3
simplistic, especially as compared to some of the more throurough ones like
-
 
4
repl, etc... If you need more than just replication, look at those.
-
 
5
 
-
 
6
I wrote replication to handle a specific problem. I wanted separate scripts
-
 
7
for replication, pruning and snapshot creation so I could have greater
-
 
8
control over what happened on each machine. In one case, we had 'production'
-
 
9
backing up to 'backup' which was then backed up to 'airgap', each on a
-
 
10
different schedule, and with different retention policies.
-
 
11
 
-
 
12
replicate was designed to be a simple command to call that would do one
-
 
13
single dataset replication (recursive, if desired). As such, it can be
-
 
14
called from a crontab simply as
-
 
15
 
-
 
16
replicate source target # positional invocation
-
 
17
or
-
 
18
replicate -s source -t target # using flags
-
 
19
 
-
 
20
For more complex operations, the included sample script, sync, will 
-
 
21
read a configuration file and process each dataset in turn. See sync.md for
-
 
22
more information on that. It is mainly a "howto" to help you build your
-
 
23
own script.
-
 
24
 
-
 
25
replicate has two modes, a simplistic positional mode similar to cp
-
 
26
replicate source target
-
 
27
 
-
 
28
However, there are many flags that can be invoked to do additional things.
-
 
29
When flags and positional are combined, the flags will override the
-
 
30
positions, so
-
 
31
replicate -s source1 source2
-
 
32
will replicate from source1, not from source2
-
 
33
 
-
 
34
Flags
-
 
35
flags gan be passed as single characters (except bwlimit) and combined, thus
4
repl, etc...
36
replicate -nrv
-
 
37
is the same as
-
 
38
replicate -n -r -v
-
 
39
 
-
 
40
--source or -s  
-
 
41
define the source, the thing to be replicated from
-
 
42
 
-
 
43
--target or -t
-
 
44
The target system, which will be syncronized from --source, only as limited
-
 
45
by --filter
-
 
46
 
-
 
47
--filter or -f
-
 
48
Filter (regex) to limit source snapshots to process. This is a Perl regular
-
 
49
expression, with all of the power that gives you. The default is "something
-
 
50
that looks like a datetimestamp, ie
-
 
51
(\d{4}.\d{2}.\d{2}.\d{2}.\d{2})
-
 
52
which is 5 fields containing 4, 2, 2, 2, 2 digits each, with any character
-
 
53
inbetween. This will match 2025/04/26_18:25. Unfortunately, it will also
-
 
54
match 2025104526218625. However, it will work for most applications.
-
 
55
 
-
 
56
--dryrun or -n
-
 
57
Only displays command(s) to be run. When in this mode, if pv is installed,
-
 
58
it will place a pv command (pv -petrs ###) between the source and target to
-
 
59
display an estimated completion if you run the command from the CLI
-
 
60
 
-
 
61
--recurse or -r
-
 
62
Process dataset and all child datasets. I thought about making this the
-
 
63
default, but decided not to. I assume this flag would be used more
-
 
64
consistently than any of the others. Without it, will will only replicate
-
 
65
the single dataset, ignoring all children
-
 
66
 
-
 
67
--verbose or -v
-
 
68
Increase verbosity of output. Without this flag, no output is produced
-
 
69
(except for --dryrun). Adding this flag once will return a brief, easily
-
 
70
parseable output saying how many bytes were in the source datasets snapshots
-
 
71
(and any children), so an approximation of how much data must be
-
 
72
transferred. A second field shows the number of seconds the replication
-
 
73
took.
-
 
74
 
-
 
75
-vv: using verbose twice will return all output from the local part of the 
-
 
76
replicate command (adding a -v to either send or receive)
-
 
77
 
-
 
78
--bwlimit
-
 
79
Limit the speed of the connect to # bytes/s. You can use the modifiers K, M,
-
 
80
G, T after the number. The multipliers are 1024 (si).
-
 
81
 
-
 
82
This is only available if the unix command pv is installed and accessible to
-
 
83
the script. It will be ignored otherwise. The --si flag is passed to pv
-
 
84
also. Note that this is bytes per second, not bits, so if you want to use
-
 
85
half of a 10Mb/s line, you'll have to divide by 8 (integers only, so either
-
 
86
1M, which would be 8Mb/s, or 2, resulting in 16Mb/s.
5
 
87
 
6
I wrote replication to handle a specific problem. I wanted an 'Air Gap'
-
 
7
server for backup. When the server was turned on, it would contact its
-
 
8
upstream server, sync, then shut down. The key to unlock the encrypted file
-
 
9
server is stored external to the Air Gap server and, if not found, the
-
 
10
server shuts itself off immediately.
-
 
11
 
88
 
12
The script to do that is included (sync) showing how to call replication.
-
 
13
 
89
 
14
sync requires a configuration file, sync.yaml. There is a sample (with
-
 
15
comments) included (sync.sample.yaml).
-