xref: /dflybsd-src/bin/cpdup/BACKUPS (revision bbb35c81f71fe2a0880a1f8bb77876ee98b63338)
1d05b679bSMatthew Dillon			    INCREMENTAL BACKUP HOWTO
2d05b679bSMatthew Dillon
3d05b679bSMatthew Dillon    This document describes one of several ways to set up a LAN backup and
4d05b679bSMatthew Dillon    an off-site WAN backup system using cpdup's hardlinking capabilities.
5d05b679bSMatthew Dillon
6d05b679bSMatthew Dillon    The features described in this document are also encapsulated in scripts
7d05b679bSMatthew Dillon    which can be found in the scripts/ directory.  These scripts can be used
8d05b679bSMatthew Dillon    to automate all backup steps except for the initial preparation of the
9d05b679bSMatthew Dillon    backup and off-site machine's directory topology.  Operation of these
10d05b679bSMatthew Dillon    scripts is described in the last section of this document.
11d05b679bSMatthew Dillon
12d05b679bSMatthew Dillon
13d05b679bSMatthew Dillon		    PART 1 - PREPARE THE LAN BACKUP BOX
14d05b679bSMatthew Dillon
15d05b679bSMatthew Dillon    The easiest way to create a LAN backup box is to NFS mount all your
16d05b679bSMatthew Dillon    backup clients onto the backup box.  It is also possible to use cpdup's
17d05b679bSMatthew Dillon    remote host feature to access your client boxes but that requires root
18293141b7SMatthew Dillon    access to the client boxes and is not described here.  (But see the
19293141b7SMatthew Dillon    sections "OFF-SITE BACKUPS" and "SSH SECURITY TIPS" below.)
20d05b679bSMatthew Dillon
21d05b679bSMatthew Dillon    Create a directory on the backup machine called /nfs, a subdirectory
22d05b679bSMatthew Dillon    foreach remote client, and subdirectories for each partition on each
23d05b679bSMatthew Dillon    client.  Remember that cpdup does not cross mount points so you will
24d05b679bSMatthew Dillon    need a mount for each partition you wish to backup.  For example:
25d05b679bSMatthew Dillon
26d05b679bSMatthew Dillon	[ ON LAN BACKUP BOX ]
27d05b679bSMatthew Dillon
28d05b679bSMatthew Dillon	mkdir /nfs
29d05b679bSMatthew Dillon	mkdir /nfs/box1
30d05b679bSMatthew Dillon	mkdir /nfs/box1/home
31d05b679bSMatthew Dillon	mkdir /nfs/box1/var
32d05b679bSMatthew Dillon
33d05b679bSMatthew Dillon    Before you actually do the NFS mount, create a dummy file for each
34d05b679bSMatthew Dillon    mount point that can be used by scripts to detect when an NFS mount
35d05b679bSMatthew Dillon    has not been done.  Scripts can thus avoid a common failure scenario
36*bbb35c81SSascha Wildner    and not accidentally cpdup an empty mount point to the backup partition
37d05b679bSMatthew Dillon    (destroying that day's backup in the process).
38d05b679bSMatthew Dillon
39d05b679bSMatthew Dillon	touch /nfs/box1/home/NOT_MOUNTED
40d05b679bSMatthew Dillon	touch /nfs/box1/var/NOT_MOUNTED
41d05b679bSMatthew Dillon
42d05b679bSMatthew Dillon    Once the directory structure has been set up, do your NFS mounts and
43d05b679bSMatthew Dillon    also add them to your fstab.  Since you will probably wind up with a
44d05b679bSMatthew Dillon    lot of mounts it is a good idea to use 'ro,bg' (readonly, background
45d05b679bSMatthew Dillon    mount) in the fstab entries.
46d05b679bSMatthew Dillon
47d05b679bSMatthew Dillon	mount box1:/home /nfs/box1/home
48d05b679bSMatthew Dillon	mount box1:/var /nfs/box1/var
49d05b679bSMatthew Dillon
50d05b679bSMatthew Dillon    You should create a huge /backup partition on your backup machine which
51d05b679bSMatthew Dillon    is capable of holding all your mirrors.  Create a subdirectory called
52d05b679bSMatthew Dillon    /backup/mirrors in your huge backup partition.
53d05b679bSMatthew Dillon
54d05b679bSMatthew Dillon	mount <huge_disk> /backup
55d05b679bSMatthew Dillon	mkdir /backup/mirrors
56d05b679bSMatthew Dillon
57d05b679bSMatthew Dillon
58d05b679bSMatthew Dillon			PART 2 - DOING A LEVEL 0 BACKUP
59d05b679bSMatthew Dillon
60d05b679bSMatthew Dillon    (If you use the supplied scripts, a level 0 backup can be accomplished
61d05b679bSMatthew Dillon    simply by running the 'do_mirror' script with an argument of 0).
62d05b679bSMatthew Dillon
63d05b679bSMatthew Dillon    Create a level 0 backup using a standard cpdup with no special arguments
64d05b679bSMatthew Dillon    other then -i0 -s0 (tell it not to ask questions and turn off the
65d05b679bSMatthew Dillon    file-overwrite-with-directory safety feature).  Name the mirror with
66d05b679bSMatthew Dillon    the date in a string-sortable format.
67d05b679bSMatthew Dillon
68d05b679bSMatthew Dillon	set date = `date "+%Y%m%d"`
69d05b679bSMatthew Dillon	mkdir /backup/mirrors/box1.${date}
70d05b679bSMatthew Dillon	cpdup -i0 -s0 /nfs/box1/home /backup/mirrors/box1.${date}/home
71d05b679bSMatthew Dillon	cpdup -i0 -s0 /nfs/box1/var /backup/mirrors/box1.${date}/var
72d05b679bSMatthew Dillon
73d05b679bSMatthew Dillon    Create a softlink to the most recently completed backup, which is your
74a05b5f9bSMatthew Dillon    level 0 backup.  Note that using 'ln -sf' will create a link in the
75a05b5f9bSMatthew Dillon    subdirectory pointed to by the current link, not replace the current
76a05b5f9bSMatthew Dillon    link. 'ln -shf' can be used to replace the link but is not portable.
77a05b5f9bSMatthew Dillon    'mv -f' has the same problem.
78d05b679bSMatthew Dillon
79d05b679bSMatthew Dillon	sync
80a05b5f9bSMatthew Dillon	rm -f /backup/mirrors/box1
81a05b5f9bSMatthew Dillon	ln -s /backup/mirrors/box1.${date} /backup/mirrors/box1
82d05b679bSMatthew Dillon
83d05b679bSMatthew Dillon			PART 3 - DO AN INCREMENTAL BACKUP
84d05b679bSMatthew Dillon
85d05b679bSMatthew Dillon    An incremental backup is exactly the same as a level 0 backup EXCEPT
86d05b679bSMatthew Dillon    you use the -H option to specify the location of the most recent
87d05b679bSMatthew Dillon    completed backup.  We simply maintain the handy softlink pointing at
88d05b679bSMatthew Dillon    the most recent completed backup and the cpdup required to do this
89d05b679bSMatthew Dillon    becomes trivial.
90d05b679bSMatthew Dillon
91d05b679bSMatthew Dillon    Each day's incremental backup will reproduce the ENTIRE directory topology
92d05b679bSMatthew Dillon    for the client, but cpdup will hardlink files from the most recent backup
93d05b679bSMatthew Dillon    instead of copying them and this is what saves you all the disk space.
94d05b679bSMatthew Dillon
95d05b679bSMatthew Dillon	set date = `date "+%Y%m%d"`
96d05b679bSMatthew Dillon	mkdir /backup/mirrors/box1.${date}
97d05b679bSMatthew Dillon	if ( "`readlink /backup/mirrors/box1`" == "box1.${date}" ) then
98d05b679bSMatthew Dillon	    echo "silly boy, an incremental already exists for today"
99d05b679bSMatthew Dillon	    exit 1
100d05b679bSMatthew Dillon	endif
101d05b679bSMatthew Dillon	cpdup -H /backup/mirrors/box1 \
102d05b679bSMatthew Dillon	      -i0 -s0 /nfs/box1/home /backup/mirrors/box1.${date}/home
103d05b679bSMatthew Dillon
104d05b679bSMatthew Dillon    Be sure to update your 'most recent backup' softlink, but only do it
105d05b679bSMatthew Dillon    if the cpdup's for all the partitions for that client have succeeded.
106d05b679bSMatthew Dillon    That way the next incremental backup will be based on the previous one.
107d05b679bSMatthew Dillon
108a05b5f9bSMatthew Dillon	rm -f /backup/mirrors/box1
109a05b5f9bSMatthew Dillon	ln -s /backup/mirrors/box1.${date} /backup/mirrors/box1
110d05b679bSMatthew Dillon
111d05b679bSMatthew Dillon    Since these backups are mirrors, locating a backup is as simple
112d05b679bSMatthew Dillon    as CDing into the appropriate directory.  If your filesystem has a
113d05b679bSMatthew Dillon    hardlink limit and cpdup hits it, cpdup will 'break' the hardlink
114d05b679bSMatthew Dillon    and copy the file instead.  Generally speaking only a few special cases
115d05b679bSMatthew Dillon    will hit the hardlink limit for a filesystem.  For example, the
116d05b679bSMatthew Dillon    CVS/Root file in a checked out cvs repository is often hardlinked, and
117d05b679bSMatthew Dillon    the sheer number of hardlinked 'Root' files multiplied by the number
118d05b679bSMatthew Dillon    of backups can often hit the filesystem hardlink limit.
119d05b679bSMatthew Dillon
120d05b679bSMatthew Dillon		    PART 4 - DO AN INCREMENTAL VERIFIED BACKUP
121d05b679bSMatthew Dillon
122d05b679bSMatthew Dillon    Since your incremental backups use hardlinks heavily the actual file
123d05b679bSMatthew Dillon    might exist on the physical /backup disk in only one place even though
124d05b679bSMatthew Dillon    it may be present in dozens of daily mirrors.  To ensure that the
125d05b679bSMatthew Dillon    file being hardlinked does not get corrupted cpdup's -f option can be
1263f5e28f4SSascha Wildner    used in conjunction with -H to force cpdup to validate the contents
127d05b679bSMatthew Dillon    of the file, even if all the stat info looks identical.
128d05b679bSMatthew Dillon
129d05b679bSMatthew Dillon	cpdup -f -H /backup/mirrors/box1 ...
130d05b679bSMatthew Dillon
13156be8454SSascha Wildner    You can create completely redundant (non-hardlinked-dependent) backups
132d05b679bSMatthew Dillon    by doing the equivalent of your level 0, i.e. not using -H.  However I
133d05b679bSMatthew Dillon    do NOT recommend that you do this, or that you do it very often (maybe
134d05b679bSMatthew Dillon    once every 6 months at the most), because each mirror created this way
135d05b679bSMatthew Dillon    will have a distinct copy of all the file data and you will quickly
136d05b679bSMatthew Dillon    run out of space in your /backup partition.
137d05b679bSMatthew Dillon
138*bbb35c81SSascha Wildner		    MAINTENANCE OF THE "/backup" DIRECTORY
139d05b679bSMatthew Dillon
140d05b679bSMatthew Dillon    Now, clearly you are going to run out of space in /backup if you keep
141d05b679bSMatthew Dillon    doing this, but you may be surprised at just how many daily incrementals
142d05b679bSMatthew Dillon    you can create before you fill up your /backup partition.
143d05b679bSMatthew Dillon
144d05b679bSMatthew Dillon    If /backup becomes full, simply start rm -rf'ing older mirror directories
145d05b679bSMatthew Dillon    until enough space is freed up.   You do not have to remove the oldest
146d05b679bSMatthew Dillon    directory first.  In fact, you might want to keep it around and remove
147d05b679bSMatthew Dillon    a day's backup here, a day's backup there, etc, until you free up enough
148d05b679bSMatthew Dillon    space.
149d05b679bSMatthew Dillon
150d05b679bSMatthew Dillon				OFF-SITE BACKUPS
151d05b679bSMatthew Dillon
152d05b679bSMatthew Dillon    Making an off-site backup involves similar methodology, but you use
153d05b679bSMatthew Dillon    cpdup's remote host capability to generate the backup.  To avoid
154d05b679bSMatthew Dillon    complications it is usually best to take a mirror already generated on
155d05b679bSMatthew Dillon    your LAN backup box and copy that to the remote box.
156d05b679bSMatthew Dillon
157d05b679bSMatthew Dillon    The remote backup box does not use NFS, so setup is trivial.  Just
158d05b679bSMatthew Dillon    create your super-large /backup partition and mkdir /backup/mirrors.
159d05b679bSMatthew Dillon    Your LAN backup box will need root access via ssh to your remote backup
160293141b7SMatthew Dillon    box.  See the section "SSH SECURITY TIPS" below.
161d05b679bSMatthew Dillon
162d05b679bSMatthew Dillon    You can use the handy softlink to get the latest 'box1.date' mirror
163d05b679bSMatthew Dillon    directory and since the mirror is all in one partition you can just
164d05b679bSMatthew Dillon    cpdup the entire machine in one command.  Use the same dated directory
165d05b679bSMatthew Dillon    name on the remote box, so:
166d05b679bSMatthew Dillon
167d05b679bSMatthew Dillon        # latest will wind up something like 'box1.20060915'
168d05b679bSMatthew Dillon	set latest = `readlink /backup/mirrors/box1`
169d05b679bSMatthew Dillon	cpdup -i0 -s0 /backup/mirrors/$latest remote.box:/backup/mirrors/$latest
170d05b679bSMatthew Dillon
171d05b679bSMatthew Dillon    As with your LAN backup, create a softlink on the backup box denoting the
172d05b679bSMatthew Dillon    latest mirror for any given site.
173d05b679bSMatthew Dillon
174d05b679bSMatthew Dillon	if ( $status == 0 ) then
175d05b679bSMatthew Dillon	    ssh remote.box -n \
176a05b5f9bSMatthew Dillon		"rm -f /backup/mirrors/box1; ln -s /backup/mirrors/$latest /backup/mirrors/box1"
177d05b679bSMatthew Dillon	endif
178d05b679bSMatthew Dillon
179d05b679bSMatthew Dillon    Incremental backups can be accomplished using the same cpdup command,
180d05b679bSMatthew Dillon    but adding the -H option to the latest backup on the remote box.  Note
181d05b679bSMatthew Dillon    that the -H path is relative to the remote box, not the LAN backup box
182d05b679bSMatthew Dillon    you are running the command from.
183d05b679bSMatthew Dillon
184d05b679bSMatthew Dillon	set latest = `readlink /backup/mirrors/box1`
185d05b679bSMatthew Dillon	set remotelatest = `ssh remote.box -n "readlink /backup/mirrors/box1"`
186d05b679bSMatthew Dillon	if ( "$latest" == "$remotelatest" ) then
187d05b679bSMatthew Dillon	    echo "silly boy, you already made a remote incremental backup today"
188d05b679bSMatthew Dillon	    exit 1
189d05b679bSMatthew Dillon	endif
190d05b679bSMatthew Dillon	cpdup -H /backup/mirrors/$remotelatest \
191d05b679bSMatthew Dillon	      -i0 -s0 /backup/mirrors/$latest remote.box:/backup/mirrors/$latest
192d05b679bSMatthew Dillon	if ( $status == 0 ) then
193d05b679bSMatthew Dillon	    ssh remote.box -n \
194a05b5f9bSMatthew Dillon		"rm -f /backup/mirrors/box1; ln -s /backup/mirrors/$latest /backup/mirrors/box1"
195d05b679bSMatthew Dillon	endif
196d05b679bSMatthew Dillon
197d05b679bSMatthew Dillon    Cleaning out the remote directory works the same as cleaning out the LAN
198d05b679bSMatthew Dillon    backup directory.
199d05b679bSMatthew Dillon
200d05b679bSMatthew Dillon
201d05b679bSMatthew Dillon			    RESTORING FROM BACKUPS
202d05b679bSMatthew Dillon
203d05b679bSMatthew Dillon    Each backup is a full filesystem mirror, and depending on how much space
204d05b679bSMatthew Dillon    you have you should be able to restore it simply by cd'ing into the
205d05b679bSMatthew Dillon    appropriate backup directory and using 'cpdup blah box1:blah' (assuming
206d05b679bSMatthew Dillon    root access), or you can export the backup directory via NFS to your
207d05b679bSMatthew Dillon    client boxes and use cpdup locally on the client to extract the backup.
208d05b679bSMatthew Dillon    Using NFS is probably the most efficient solution.
209d05b679bSMatthew Dillon
210d05b679bSMatthew Dillon
211d05b679bSMatthew Dillon			PUTTING IT ALL TOGETHER - SOME SCRIPTS
212d05b679bSMatthew Dillon
213d05b679bSMatthew Dillon    Please refer to the scripts in the script/ subdirectory.  These scripts
214d05b679bSMatthew Dillon    are EXAMPLES ONLY.  If you want to use them, put them in your ~root/adm
215d05b679bSMatthew Dillon    directory on your backup box and set up a root crontab.
216d05b679bSMatthew Dillon
217d05b679bSMatthew Dillon    First follow the preparation rules in PART 1 above.  The scripts do not
218d05b679bSMatthew Dillon    do this automatically.  Edit the 'params' file that the scripts use
219d05b679bSMatthew Dillon    to set default paths and such.
220d05b679bSMatthew Dillon
221d05b679bSMatthew Dillon	** FOLLOW DIRECTIONS IN PART 1 ABOVE TO SET UP THE LAN BACKUP BOX **
222d05b679bSMatthew Dillon
223d05b679bSMatthew Dillon    Copy the scripts to ~/adm.  Do NOT install a crontab yet (but an example
224d05b679bSMatthew Dillon    can be found in scripts/crontab).
225d05b679bSMatthew Dillon
226d05b679bSMatthew Dillon    Do a manual lavel 0 LAN BACKUP using the do_mirror script.
227d05b679bSMatthew Dillon
228d05b679bSMatthew Dillon	cd ~/adm
229d05b679bSMatthew Dillon	./do_mirror 0
230d05b679bSMatthew Dillon
231d05b679bSMatthew Dillon    Once done you can do incremental backups using './do_mirror 1' to do a
232d05b679bSMatthew Dillon    verified incremental, or './do_mirror 2' to do a stat-optimized
233d05b679bSMatthew Dillon    incremental.  You can enable the cron jobs that run do_mirror and
234d05b679bSMatthew Dillon    do_cleanup now.
235d05b679bSMatthew Dillon
236d05b679bSMatthew Dillon    --
237d05b679bSMatthew Dillon
238d05b679bSMatthew Dillon    Setting up an off-site backup box is trivial.  The off-site backup box
239d05b679bSMatthew Dillon    needs to allow root ssh logins from the LAN backup box (at least for
240d05b679bSMatthew Dillon    now, sorry!).  Set up the off-site backup directory, typically
241d05b679bSMatthew Dillon    /backup/mirrors.  Then do a level 0 backup from your LAN backup box
242d05b679bSMatthew Dillon    to the off-site box using the do_remote script.
243d05b679bSMatthew Dillon
244d05b679bSMatthew Dillon	cd ~/adm
245d05b679bSMatthew Dillon	./do_remote 0
246d05b679bSMatthew Dillon
247d05b679bSMatthew Dillon    Once done you can do incremental backups using './do_remote 1' to do a
248d05b679bSMatthew Dillon    verified incremental, or './do_mirror 2' to do a stat-optimized
249d05b679bSMatthew Dillon    incremental.  You can enable the cron jobs that run do_remote now.
250d05b679bSMatthew Dillon
251d05b679bSMatthew Dillon    NOTE!  It is NOT recommended that you use verified-incremental backups
252d05b679bSMatthew Dillon    over a WAN, as all related data must be copied over the wire every single
253d05b679bSMatthew Dillon    day.  Instead, I recommend sticking with stat-optimized backups
254d05b679bSMatthew Dillon    (./do_mirror 2).
255d05b679bSMatthew Dillon
256d05b679bSMatthew Dillon    You will also need to set up a daily cleaning script on the off-site
257d05b679bSMatthew Dillon    backup box.
258d05b679bSMatthew Dillon
259d05b679bSMatthew Dillon    SCRIPT TODOS - the ./do_cleanup script is not very smart.  We really
260d05b679bSMatthew Dillon    should do a tower-of-hanoi removal
261d05b679bSMatthew Dillon
262d05b679bSMatthew Dillon
263293141b7SMatthew Dillon			      SSH SECURITY TIPS
264293141b7SMatthew Dillon
265293141b7SMatthew Dillon    To allow root access via ssh, add the following line to your sshd
266293141b7SMatthew Dillon    configuration on the client boxes (typically /etc/ssh/sshd_config):
267293141b7SMatthew Dillon
268293141b7SMatthew Dillon	PermitRootLogin forced-commands-only
269293141b7SMatthew Dillon
270293141b7SMatthew Dillon    If your OpenSSH version is too old to recognize that setting, you
271293141b7SMatthew Dillon    should update to a more recent version immediately.
272c0538630SMatthew Dillon    Restart sshd for the settings to take effect.
273293141b7SMatthew Dillon
274293141b7SMatthew Dillon    On the backup machine, create a special backup key for root:
275293141b7SMatthew Dillon
276293141b7SMatthew Dillon	mkdir /root/.ssh	# if it doesn't already exist
277293141b7SMatthew Dillon	cd /root/.ssh
278293141b7SMatthew Dillon	ssh-keygen -t dsa -N "" -f backup-key
279293141b7SMatthew Dillon
280293141b7SMatthew Dillon    You now have a key pair, consisting of a secret key called "backup-key"
281293141b7SMatthew Dillon    and a public key called "backup-key.pub".  The secret key must *NEVER*
282293141b7SMatthew Dillon    leave the backup machine nor be disclosed in any way!  Note that we
283293141b7SMatthew Dillon    haven't procted the secret key with a passphrase (-N "") because it
284293141b7SMatthew Dillon    will be used by cron jobs where no passphrase can be entered.
285293141b7SMatthew Dillon
286293141b7SMatthew Dillon    On the client boxes, create a file /root/.ssh/authorized_keys.
287293141b7SMatthew Dillon    It should contain just this line:
288293141b7SMatthew Dillon
289293141b7SMatthew Dillon	command="/usr/local/bin/cpdup -S",from="<BAKHOST>",no-pty,
290293141b7SMatthew Dillon	no-port-forwarding,no-X11-forwarding,no-agent-forwarding <PUBKEY>
291293141b7SMatthew Dillon
292293141b7SMatthew Dillon    This must be on one long line; it has been broken up here for
293293141b7SMatthew Dillon    readability only.  Note that the options must be separated by commas
294293141b7SMatthew Dillon    *ONLY* (no spaces).  Replace <BAKHOST> with the IP address or DNS name
295293141b7SMatthew Dillon    of the backup machine.  Replace <PUBKEY> with the contents of the
296293141b7SMatthew Dillon    file /root/.ssh/backup-key.pub from the backup machine (the public key,
297293141b7SMatthew Dillon    not the secret key!).  It typically starts with "ssh-dss" followed by
298293141b7SMatthew Dillon    a long character sequence that looks like line noise, followed by a
299293141b7SMatthew Dillon    comment that typically indicates who created the key.
300293141b7SMatthew Dillon
301293141b7SMatthew Dillon    The format of the authorized_keys file is documented in the sshd(8)
302293141b7SMatthew Dillon    manual page.  Please refer to it for more details.
303293141b7SMatthew Dillon
304293141b7SMatthew Dillon    If you have done all of the above correctly, then the root user on the
305293141b7SMatthew Dillon    backup machine will be able to log into the client boxes as root and
306293141b7SMatthew Dillon    execute "/usr/local/bin/cpdup -S", but nothing else.
307293141b7SMatthew Dillon
308c0538630SMatthew Dillon    To further improve security, you can place the slave cpdup on the client
309c0538630SMatthew Dillon    machine into read-only mode by adding the -R option.  In this case, the
310c0538630SMatthew Dillon    line from the authorized_keys file should begin as follows:
311c0538630SMatthew Dillon
312c0538630SMatthew Dillon	command="/usr/local/bin/cpdup -RS",from="<BAKHOST>",etc...
313c0538630SMatthew Dillon
314c0538630SMatthew Dillon    If you do that, your backup server can only pull backups from the client
315c0538630SMatthew Dillon    machine, but it won't be able to change anything on it.  That is, you
316c0538630SMatthew Dillon    cannot use the client machine as a remote target.  So, if an attacker
317c0538630SMatthew Dillon    manages to be able to execute commands on your backup machine, he won't
318c0538630SMatthew Dillon    be able to do any harm to your clients.  This also protects against
319c0538630SMatthew Dillon    human errors, e.g. accidentally swapping source and destination.
320c0538630SMatthew Dillon
321c0538630SMatthew Dillon    By the way, it doesn't really matter much whether you specify the -R
322c0538630SMatthew Dillon    option when running cpdup on the backup machine.  If you do it, then
323c0538630SMatthew Dillon    the -R option will be passed to the slave, but the command="..." entry
324c0538630SMatthew Dillon    from the authorized_keys file overides it anyway, so the slave always
325c0538630SMatthew Dillon    runs with the -R option.
326c0538630SMatthew Dillon
327293141b7SMatthew Dillon    When using cpdup on the backup machine, make sure that the right key is
328293141b7SMatthew Dillon    used by passing the -i option to the ssh command:
329293141b7SMatthew Dillon
330293141b7SMatthew Dillon	cpdup -F -i/root/.ssh/backup-key ...
331293141b7SMatthew Dillon
332293141b7SMatthew Dillon    If one or both of the machines involved has a slow processor, it might
333293141b7SMatthew Dillon    be worthwhile to use a faster encryption algorithm, for example:
334293141b7SMatthew Dillon
335293141b7SMatthew Dillon	cpdup -F -cblowfish-cbc ...
336293141b7SMatthew Dillon
337293141b7SMatthew Dillon    If your OpenSSH version has been patched to support unencrypted transfers
338293141b7SMatthew Dillon    *AND* you trust the physical network between the machines involved, you
339*bbb35c81SSascha Wildner    might want to disable encryption altogether:
340293141b7SMatthew Dillon
341293141b7SMatthew Dillon	cpdup -F -cnone ...
342