1RDIFF-BACKUP(1) User Manuals RDIFF-BACKUP(1)
2
3
4
6 rdiff-backup - local/remote mirror and incremental backup
7
9 rdiff-backup [options] [[[user@]host1.foo]::source_directory]
10 [[[user@]host2.foo]::destination_directory]
11
12 rdiff-backup {{ -l | --list-increments } | --remove-older-than time_in‐
13 terval | --list-at-time time | --list-changed-since time | --list-in‐
14 crement-sizes | --verify | --verify-at-time time}
15 [[[user@]host2.foo]::destination_directory]
16
17 rdiff-backup --calculate-average statfile1 statfile2 ...
18
19 rdiff-backup --test-server [user1]@host1.net1::path
20 [[user2]@host2.net2::path] ...
21
22
24 rdiff-backup is a script, written in python(1) that backs up one direc‐
25 tory to another. The target directory ends up a copy (mirror) of the
26 source directory, but extra reverse diffs are stored in a special sub‐
27 directory of that target directory, so you can still recover files lost
28 some time ago. The idea is to combine the best features of a mirror
29 and an incremental backup. rdiff-backup also preserves symlinks, spe‐
30 cial files, hardlinks, permissions, uid/gid ownership, and modification
31 times.
32
33 rdiff-backup can also operate in a bandwidth efficient manner over a
34 pipe, like rsync(1). Thus you can use ssh and rdiff-backup to securely
35 back a hard drive up to a remote location, and only the differences
36 will be transmitted. Using the default settings, rdiff-backup requires
37 that the remote system accept ssh connections, and that rdiff-backup is
38 installed in the user's PATH on the remote system. For information on
39 other options, see the section on REMOTE OPERATION.
40
41 Note that you should not write to the mirror directory except with
42 rdiff-backup. Many of the increments are stored as reverse diffs, so
43 if you delete or modify a file, you may lose the ability to restore
44 previous versions of that file.
45
46 Finally, this man page is intended more as a precise description of the
47 behavior and syntax of rdiff-backup. New users may want to check out
48 the examples.html file included in the rdiff-backup distribution.
49
50
52 --allow-duplicate-timestamps
53 This option is only to be used if you encounter the issue of
54 metadata mirrors with the same timestamp. In such cases, you may
55 use this flag to first recover from the failed backup with some‐
56 thing like rdiff-backup --allow-duplicate-timestamps --check-
57 destination-dir <targetdir> after which you will need to remove
58 those old duplicate entries using the --remove-older-than param‐
59 eter.
60
61 -b, --backup-mode
62 Force backup mode even if first argument appears to be an incre‐
63 ment or mirror file.
64
65 --calculate-average
66 Enter calculate average mode. The arguments should be a number
67 of statistics files. rdiff-backup will print the average of the
68 listed statistics files and exit.
69
70 --carbonfile
71 Enable backup of MacOS X carbonfile information.
72
73 --check-destination-dir
74 If an rdiff-backup session fails, running rdiff-backup with this
75 option on the destination dir will undo the failed directory.
76 This happens automatically if you attempt to back up to a direc‐
77 tory and the last backup failed.
78
79 --compare
80 This is equivalent to '--compare-at-time now'
81
82 --compare-at-time time
83 Compare a directory with the backup set at the given time. This
84 can be useful to see how archived data differs from current
85 data, or to check that a backup is current. This only compares
86 metadata, in the same way rdiff-backup decides whether a file
87 has changed.
88
89 --compare-full
90 This is equivalent to '--compare-full-at-time now'
91
92 --compare-full-at-time time
93 Compare a directory with the backup set at the given time. To
94 compare regular files, the repository data will be copied in its
95 entirety to the source side and compared byte by byte. This is
96 the slowest but most complete compare option.
97
98 --compare-hash
99 This is equivalent to '--compare-hash-at-time now'
100
101 --compare-hash-at-time time
102 Compare a directory with the backup set at the given time. Reg‐
103 ular files will be compared by computing their SHA1 digest on
104 the source side and comparing it to the digest recorded in the
105 metadata.
106
107 --create-full-path
108 Normally only the final directory of the destination path will
109 be created if it does not exist. With this option, all missing
110 directories on the destination path will be created. Use this
111 option with care: if there is a typo in the remote path, the re‐
112 mote filesystem could fill up very quickly (by creating a dupli‐
113 cate backup tree). For this reason this option is primarily
114 aimed at scripts which automate backups.
115
116 --current-time seconds
117 This option is useful mainly for testing. If set, rdiff-backup
118 will use it for the current time instead of consulting the
119 clock. The argument is the number of seconds since the epoch.
120
121 --exclude shell_pattern
122 Exclude the file or files matched by shell_pattern. If a direc‐
123 tory is matched, then files under that directory will also be
124 matched. See the FILE SELECTION section for more information.
125
126 --exclude-device-files
127 Exclude all device files. This can be useful for security/per‐
128 missions reasons or if rdiff-backup is not handling device files
129 correctly.
130
131 --exclude-fifos
132 Exclude all fifo files.
133
134 --exclude-filelist filename
135 Excludes the files listed in filename. If filename is handwrit‐
136 ten you probably want --exclude-globbing-filelist instead. See
137 the FILE SELECTION section for more information.
138
139 --exclude-filelist-stdin
140 Like --exclude-filelist, but the list of files will be read from
141 standard input. See the FILE SELECTION section for more infor‐
142 mation.
143
144 --exclude-globbing-filelist filename
145 Like --exclude-filelist but each line of the filelist will be
146 interpreted according to the same rules as --include and --ex‐
147 clude.
148
149 --exclude-globbing-filelist-stdin
150 Like --exclude-globbing-filelist, but the list of files will be
151 read from standard input.
152
153 --exclude-other-filesystems
154 Exclude files on file systems (identified by device number)
155 other than the file system the root of the source directory is
156 on.
157
158 --exclude-regexp regexp
159 Exclude files matching the given regexp. Unlike the --exclude
160 option, this option does not match files in a directory it
161 matches. See the FILE SELECTION section for more information.
162
163 --exclude-special-files
164 Exclude all device files, fifo files, socket files, and symbolic
165 links.
166
167 --exclude-sockets
168 Exclude all socket files.
169
170 --exclude-symbolic-links
171 Exclude all symbolic links. This option is automatically enabled
172 if the backup source is running on native Windows to avoid back‐
173 ing-up NTFS reparse points.
174
175 --exclude-if-present filename
176 Exclude directories if filename is present. This option needs to
177 come before any other include or exclude options.
178
179 --force
180 Authorize a more drastic modification of a directory than usual
181 (for instance, when overwriting of a destination path, or when
182 removing multiple sessions with --remove-older-than). rdiff-
183 backup will generally tell you if it needs this. WARNING: You
184 can cause data loss if you mis-use this option. Furthermore, do
185 NOT use this option when doing a restore, as it will DELETE
186 FILES, unless you absolutely know what you are doing.
187
188 --group-mapping-file filename
189 Map group names and ids according the the group mapping file
190 filename. See the USERS AND GROUPS section for more informa‐
191 tion.
192
193 --include shell_pattern
194 Similar to --exclude but include matched files instead. Unlike
195 --exclude, this option will also match parent directories of
196 matched files (although not necessarily their contents). See
197 the FILE SELECTION section for more information.
198
199 --include-filelist filename
200 Like --exclude-filelist, but include the listed files instead.
201 If filename is handwritten you probably want --include-globbing-
202 filelist instead. See the FILE SELECTION section for more in‐
203 formation.
204
205 --include-filelist-stdin
206 Like --include-filelist, but read the list of included files
207 from standard input.
208
209 --include-globbing-filelist filename
210 Like --include-filelist but each line of the filelist will be
211 interpreted according to the same rules as --include and --ex‐
212 clude.
213
214 --include-globbing-filelist-stdin
215 Like --include-globbing-filelist, but the list of files will be
216 read from standard input.
217
218 --include-regexp regexp
219 Include files matching the regular expression regexp. Only
220 files explicitly matched by regexp will be included by this op‐
221 tion. See the FILE SELECTION section for more information.
222
223 --include-special-files
224 Include all device files, fifo files, socket files, and symbolic
225 links.
226
227 --include-symbolic-links
228 Include all symbolic links.
229
230 --list-at-time time
231 List the files in the archive that were present at the given
232 time. If a directory in the archive is specified, list only the
233 files under that directory.
234
235 --list-changed-since time
236 List the files that have changed in the destination directory
237 since the given time. See TIME FORMATS for the format of time.
238 If a directory in the archive is specified, list only the files
239 under that directory. This option does not read the source di‐
240 rectory; it is used to compare the contents of two different
241 rdiff-backup sessions.
242
243 -l, --list-increments
244 List the number and date of partial incremental backups con‐
245 tained in the specified destination directory. No backup or re‐
246 store will take place if this option is given.
247
248 --list-increment-sizes
249 List the total size of all the increment and mirror files by
250 time. This may be helpful in deciding how many increments to
251 keep, and when to --remove-older-than. Specifying a subdirec‐
252 tory is allowable; then only the sizes of the mirror and incre‐
253 ments pertaining to that subdirectory will be listed.
254
255 --max-file-size size
256 Exclude files that are larger than the given size in bytes
257
258 --min-file-size size
259 Exclude files that are smaller than the given size in bytes
260
261 --never-drop-acls
262 Exit with error instead of dropping acls or acl entries. Nor‐
263 mally this may happen (with a warning) because the destination
264 does not support them or because the relevant user/group names
265 do not exist on the destination side.
266
267 --no-acls
268 No Access Control Lists - disable backup of ACLs
269
270 --no-carbonfile
271 Disable backup of MacOS X carbonfile information
272
273 --no-compare-inode
274 This option prevents rdiff-backup from flagging a hardlinked
275 file as changed when its device number and/or inode changes.
276 This option is useful in situations where the source filesystem
277 lacks persistent device and/or inode numbering. For example,
278 network filesystems may have mount-to-mount differences in their
279 device number (but possibly stable inode numbers); USB/1394 de‐
280 vices may come up at different device numbers each remount (but
281 would generally have same inode number); and there are filesys‐
282 tems which don't even have the same inode numbers from use to
283 use. Without the option rdiff-backup may generate unnecessary
284 numbers of tiny diff files.
285
286 --no-compression
287 Disable the default gzip compression of most of the .snapshot
288 and .diff increment files stored in the rdiff-backup-data direc‐
289 tory. A backup volume can contain compressed and uncompressed
290 increments, so using this option inconsistently is fine.
291
292 --no-compression-regexp regexp
293 Do not compress increments based on files whose filenames match
294 regexp. The default includes many common audiovisual and ar‐
295 chive files, and may be found in Globals.py.
296
297 --no-eas
298 No Extended Attributes support - disable backup of EAs.
299
300 --no-file-statistics
301 This will disable writing to the file_statistics file in the
302 rdiff-backup-data directory. rdiff-backup will run slightly
303 quicker and take up a bit less space.
304
305 --no-fsync
306 This will disable issuing fsync from rdiff-backup altogether.
307 This option is designed to optimize performance on busy backup
308 systems. Use with caution. This may render your backup unusable
309 in case of filesystem failure.
310
311 --no-hard-links
312 Don't replicate hard links on destination side. If many hard-
313 linked files are present, this option can drastically decrease
314 memory usage. This option is enabled by default if the backup
315 source or restore destination is running on native Windows.
316
317 --null-separator
318 Use nulls (\0) instead of newlines (\n) as line separators,
319 which may help when dealing with filenames containing newlines.
320 This affects the expected format of the files specified by the
321 --{include|exclude}-filelist[-stdin] switches as well as the
322 format of the directory statistics file.
323
324 --parsable-output
325 If set, rdiff-backup's output will be tailored for easy parsing
326 by computers, instead of convenience for humans. Currently this
327 only applies when listing increments using the -l or --list-in‐
328 crements switches, where the time will be given in seconds since
329 the epoch.
330
331 --override-chars-to-quote
332 If the filesystem to which we are backing up is not case-sensi‐
333 tive, automatic 'quoting' of characters occurs. For example, a
334 file 'Developer.doc' will be converted into ';068eveloper.doc'.
335 To override this behavior, you need to specify this option.
336
337 --preserve-numerical-ids
338 If set, rdiff-backup will preserve uids/gids instead of trying
339 to preserve unames and gnames. See the USERS AND GROUPS section
340 for more information.
341
342 --print-statistics
343 If set, summary statistics will be printed after a successful
344 backup. If not set, this information will still be available
345 from the session statistics file. See the STATISTICS section
346 for more information.
347
348 -r, --restore-as-of restore_time
349 Restore the specified directory as it was as of restore_time.
350 See the TIME FORMATS section for more information on the format
351 of restore_time, and see the RESTORING section for more informa‐
352 tion on restoring.
353
354 --remote-cmd cmd
355 Deprecated. Please use --remote-schema instead
356
357 --remote-schema schema
358 Specify an alternate method of connecting to a remote computer.
359 This is necessary to get rdiff-backup not to use ssh for remote
360 backups, or if, for instance, rdiff-backup is not in the PATH on
361 the remote side. See the REMOTE OPERATION section for more in‐
362 formation.
363
364 --remote-tempdir path
365 Adds the --tempdir option with argument path when invoking re‐
366 mote instances of rdiff-backup.
367
368 --remove-older-than time_spec
369 Remove the incremental backup information in the destination di‐
370 rectory that has been around longer than the given time.
371 time_spec can be either an absolute time, like "2002-01-04", or
372 a time interval. The time interval is an integer followed by
373 the character s, m, h, D, W, M, or Y, indicating seconds, min‐
374 utes, hours, days, weeks, months, or years respectively, or a
375 number of these concatenated. For example, 32m means 32 min‐
376 utes, and 3W2D10h7s means 3 weeks, 2 days, 10 hours, and 7 sec‐
377 onds. In this context, a month means 30 days, a year is 365
378 days, and a day is always 86400 seconds.
379
380 rdiff-backup cannot remove-older-than and back up or restore in
381 a single session. In order to both backup a directory and re‐
382 move old files in it, you must run rdiff-backup twice.
383
384 By default, rdiff-backup will only delete information from one
385 session at a time. To remove two or more sessions at the same
386 time, supply the --force option (rdiff-backup will tell you if
387 --force is required).
388
389 Note that snapshots of deleted files are covered by this opera‐
390 tion. Thus if you deleted a file two weeks ago, backed up imme‐
391 diately afterwards, and then ran rdiff-backup with --remove-
392 older-than 10D today, no trace of that file would remain. Fi‐
393 nally, file selection options such as --include and --exclude
394 don't affect --remove-older-than.
395
396 --restrict path
397 Require that all file access be inside the given path. This
398 switch, and the following two, are intended to be used with the
399 --server switch to provide a bit more protection when doing au‐
400 tomated remote backups. They are not intended as your only line
401 of defense so please don't do something silly like allow public
402 access to an rdiff-backup server run with --restrict-read-only.
403
404 --restrict-read-only path
405 Like --restrict, but also reject all write requests.
406
407 --restrict-update-only path
408 Like --restrict, but only allow writes as part of an incremental
409 backup. Requests for other types of writes (for instance,
410 deleting path) will be rejected.
411
412 --server
413 Enter server mode (not to be invoked directly, but instead used
414 by another rdiff-backup process on a remote computer).
415
416 --ssh-no-compression
417 When running ssh, do not use the -C option to enable compres‐
418 sion. --ssh-no-compression is ignored if you specify a new
419 schema using --remote-schema.
420
421 --tempdir path
422 Sets the directory that rdiff-backup uses for temporary files to
423 the given path. The environment variables TMPDIR, TEMP, and TMP
424 can also be used to set the temporary files directory. See the
425 documentation of the Python tempfile module for more informa‐
426 tion.
427
428 --terminal-verbosity [0-9]
429 Select which messages will be displayed to the terminal. If
430 missing the level defaults to the verbosity level.
431
432 --test-server
433 Test for the presence of a compatible rdiff-backup server as
434 specified in the following host::filename argument(s). The
435 filename section will be ignored.
436
437 --use-compatible-timestamps
438 Create timestamps in which the hour/minute/second separator is a
439 - (hyphen) instead of a : (colon). It is safe to use this option
440 on one backup, and then not use it on another; rdiff-backup sup‐
441 ports the intermingling of different timestamp formats. This op‐
442 tion is enabled by default on platforms which require that the
443 colon be escaped.
444
445 --user-mapping-file filename
446 Map user names and ids according to the user mapping file file‐
447 name. See the USERS AND GROUPS section for more information.
448
449 -v[0-9], --verbosity [0-9]
450 Specify verbosity level (0 is totally silent, 3 is the default,
451 and 9 is noisiest). This determines how much is written to the
452 log file.
453
454 --verify
455 This is short for --verify-at-time now
456
457 --verify-at-time now
458 Check all the data in the repository at the given time by com‐
459 puting the SHA1 hash of all the regular files and comparing them
460 with the hashes stored in the metadata file.
461
462 -V, --version
463 Print the current version and exit
464
465
467 RDIFF_BACKUP_VERBOSITY=[0-9]
468 Sets the default verbosity for log file and terminal, can be
469 overwritten by the corresponding options "-v/--verbosity" and
470 "--terminal-verbosity".
471
472
474 There are two ways to tell rdiff-backup to restore a file or directory.
475 Firstly, you can run rdiff-backup on a mirror file and use the -r or
476 --restore-as-of options. Secondly, you can run it on an increment
477 file.
478
479 For example, suppose in the past you have run:
480
481 rdiff-backup /usr /usr.backup
482
483 to back up the /usr directory into the /usr.backup directory, and now
484 want a copy of the /usr/local directory the way it was 3 days ago
485 placed at /usr/local.old.
486
487 One way to do this is to run:
488
489 rdiff-backup -r 3D /usr.backup/local /usr/local.old
490
491 where above the "3D" means 3 days (for other ways to specify the time,
492 see the TIME FORMATS section). The /usr.backup/local directory was se‐
493 lected, because that is the directory containing the current version of
494 /usr/local.
495
496 Note that the option to --restore-as-of always specifies an exact time.
497 (So "3D" refers to the instant 72 hours before the present.) If there
498 was no backup made at that time, rdiff-backup restores the state
499 recorded for the previous backup. For instance, in the above case, if
500 "3D" is used, and there are only backups from 2 days and 4 days ago,
501 /usr/local as it was 4 days ago will be restored.
502
503 The second way to restore files involves finding the corresponding in‐
504 crement file. It would be in the /backup/rdiff-backup-data/incre‐
505 ments/usr directory, and its name would be something like "lo‐
506 cal.2002-11-09T12:43:53-04:00.dir" where the time indicates it is from
507 3 days ago. Note that the increment files all end in ".diff", ".snap‐
508 shot", ".dir", or ".missing", where ".missing" just means that the file
509 didn't exist at that time (finally, some of these may be gzip-com‐
510 pressed, and have an extra ".gz" to indicate this). Then running:
511
512 rdiff-backup /backup/rdiff-backup-data/increments/usr/lo‐
513 cal.<time>.dir /usr/local.old
514
515 would also restore the file as desired.
516
517 If you are not sure exactly which version of a file you need, it is
518 probably easiest to either restore from the increments files as de‐
519 scribed immediately above, or to see which increments are available
520 with -l/--list-increments, and then specify exact times into -r/--re‐
521 store-as-of.
522
523
525 rdiff-backup uses time strings in two places. Firstly, all of the in‐
526 crement files rdiff-backup creates will have the time in their file‐
527 names in the w3 datetime format as described in a w3 note at
528 https://www.w3.org/TR/NOTE-datetime. Basically they look like
529 "2001-07-15T04:09:38-07:00", which means what it looks like. The
530 "-07:00" section means the time zone is 7 hours behind UTC.
531
532 Secondly, the -r, --restore-as-of, and --remove-older-than options take
533 a time string, which can be given in any of several formats:
534
535 1. the string "now" (refers to the current time)
536
537 2. a sequences of digits, like "123456890" (indicating the time in
538 seconds after the epoch)
539
540 3. A string like "2002-01-25T07:00:00+02:00" in datetime format
541
542 4. An interval, which is a number followed by one of the characters
543 s, m, h, D, W, M, or Y (indicating seconds, minutes, hours,
544 days, weeks, months, or years respectively), or a series of such
545 pairs. In this case the string refers to the time that preceded
546 the current time by the length of the interval. For instance,
547 "1h78m" indicates the time that was one hour and 78 minutes ago.
548 The calendar here is unsophisticated: a month is always 30 days,
549 a year is always 365 days, and a day is always 86400 seconds.
550
551 5. A date format of the form YYYY/MM/DD, YYYY-MM-DD, MM/DD/YYYY, or
552 MM-DD-YYYY, which indicates midnight on the day in question,
553 relative to the current timezone settings. For instance,
554 "2002/3/5", "03-05-2002", and "2002-3-05" all mean March 5th,
555 2002.
556
557 6. A backup session specification which is a non-negative integer
558 followed by 'B'. For instance, '0B' specifies the time of the
559 current mirror, and '3B' specifies the time of the 3rd newest
560 increment.
561
562
564 In order to access remote files, rdiff-backup opens up a pipe to a copy
565 of rdiff-backup running on the remote machine. Thus rdiff-backup must
566 be installed on both ends. To open this pipe, rdiff-backup first
567 splits the filename into host_info::pathname. It then substitutes
568 host_info into the remote schema, and runs the resulting command, read‐
569 ing its input and output.
570
571 The default remote schema is 'ssh -C %s rdiff-backup --server' where
572 host_info is substituted for '%s'. So if the host_info is
573 user@host.net, then rdiff-backup runs 'ssh user@host.net rdiff-backup
574 --server'. Using --remote-schema, rdiff-backup can invoke an arbitrary
575 command in order to open up a remote pipe. For instance,
576 rdiff-backup --remote-schema 'cd /usr; %s' foo 'rdiff-backup
577 --server'::bar
578 is basically equivalent to (but slower than)
579 rdiff-backup foo /usr/bar
580
581 Concerning quoting, if for some reason you need to put two consecutive
582 colons in the host_info section of a host_info::pathname argument, or
583 in the pathname of a local file, you can quote one of them by prepend‐
584 ing a backslash. So in 'a\::b::c', host_info is 'a::b' and the path‐
585 name is 'c'. Similarly, if you want to refer to a local file whose
586 filename contains two consecutive colons, like 'strange::file', you'll
587 have to quote one of the colons as in 'strange\::file'. Because the
588 backslash is a quote character in these circumstances, it too must be
589 quoted to get a literal backslash, so 'foo\::\\bar' evaluates to
590 'foo::\bar'. To make things more complicated, because the backslash is
591 also a common shell quoting character, you may need to type in '\\\\'
592 at the shell prompt to get a literal backslash (if it makes you feel
593 better, I had to type in 8 backslashes to get that in this man
594 page...). And finally, to include a literal % in the string specified
595 by --remote-schema, quote it with another %, as in %%.
596
597 Although ssh itself may be secure, using rdiff-backup in the default
598 way presents some security risks. For instance if the server is run as
599 root, then an attacker who compromised the client could then use rdiff-
600 backup to overwrite arbitrary server files by "backing up" over them.
601 Such a setup can be made more secure by using the sshd configuration
602 option command="rdiff-backup --server" possibly along with the --re‐
603 strict* options to rdiff-backup. For more information, see the web
604 page, the wiki, and the entries for the --restrict* options on this man
605 page.
606
607
609 rdiff-backup has a number of file selection options. When rdiff-backup
610 is run, it searches through the given source directory and backs up all
611 the files matching the specified options. This selection system may
612 appear complicated, but it is supposed to be flexible and easy-to-use.
613 If you just want to learn the basics, first look at the selection exam‐
614 ples in the examples.html file included in the package, or on the web
615 at https://rdiff-backup.net/docs/examples.html
616
617 rdiff-backup's selection system was originally inspired by rsync(1),
618 but there are many differences. (For instance, trailing backslashes
619 have no special significance.)
620
621 The file selection system comprises a number of file selection condi‐
622 tions, which are set using one of the following command line options:
623 --exclude, --exclude-filelist, --exclude-device-files, --exclude-fifos,
624 --exclude-sockets, --exclude-symbolic-links, --exclude-globbing-
625 filelist, --exclude-globbing-filelist-stdin, --exclude-filelist-stdin,
626 --exclude-regexp, --exclude-special-files, --include, --include-
627 filelist, --include-globbing-filelist, --include-globbing-filelist-
628 stdin, --include-filelist-stdin, and --include-regexp. Each file se‐
629 lection condition either matches or doesn't match a given file. A
630 given file is excluded by the file selection system exactly when the
631 first matching file selection condition specifies that the file be ex‐
632 cluded; otherwise the file is included. When backing up, if a file is
633 excluded, rdiff-backup acts as if that file does not exist in the
634 source directory. When restoring, an excluded file is considered not
635 to exist in either the source or target directories.
636
637 For instance,
638
639 rdiff-backup --include /usr --exclude /usr /usr /backup
640
641 is exactly the same as
642
643 rdiff-backup /usr /backup
644
645 because the include and exclude directives match exactly the same
646 files, and the --include comes first, giving it precedence. Similarly,
647
648 rdiff-backup --include /usr/local/bin --exclude /usr/local /usr
649 /backup
650
651 would backup the /usr/local/bin directory (and its contents), but not
652 /usr/local/doc.
653
654 The include, exclude, include-globbing-filelist, and exclude-globbing-
655 filelist options accept extended shell globbing patterns. These pat‐
656 terns can contain the special patterns *, **, ?, and [...]. As in a
657 normal shell, * can be expanded to any string of characters not con‐
658 taining "/", ? expands to any character except "/", and [...] expands
659 to a single character of those characters specified (ranges are accept‐
660 able). The new special pattern, **, expands to any string of charac‐
661 ters whether or not it contains "/". Furthermore, if the pattern
662 starts with "ignorecase:" (case insensitive), then this prefix will be
663 removed and any character in the string can be replaced with an upper-
664 or lowercase version of itself.
665
666 If you need to match filenames which contain the above globbing charac‐
667 ters, they may be escaped using a backslash "\". The backslash will
668 only escape the character following it so for ** you will need to use
669 "\*\*" to avoid escaping it to the * globbing character.
670
671 Remember that you may need to quote these characters when typing them
672 into a shell, so the shell does not interpret the globbing patterns be‐
673 fore rdiff-backup sees them.
674
675 The --exclude pattern option matches a file iff:
676
677 1. pattern can be expanded into the file's filename, or
678
679 2. the file is inside a directory matched by the option.
680
681 Conversely, --include pattern matches a file iff:
682
683 1. pattern can be expanded into the file's filename,
684
685 2. the file is inside a directory matched by the option, or
686
687 3. the file is a directory which contains a file matched by the op‐
688 tion.
689
690 For example,
691
692 --exclude /usr/local
693
694 matches /usr/local, /usr/local/lib, and /usr/local/lib/netscape. It is
695 the same as --exclude /usr/local --exclude '/usr/local/**'.
696
697 --include /usr/local
698
699 specifies that /usr, /usr/local, /usr/local/lib, and /usr/lo‐
700 cal/lib/netscape (but not /usr/doc) all be backed up. Thus you don't
701 have to worry about including parent directories to make sure that in‐
702 cluded subdirectories have somewhere to go. Finally,
703
704 --include ignorecase:'/usr/[a-z0-9]foo/*/**.py'
705
706 would match a file like /usR/5fOO/hello/there/world.py. If it did
707 match anything, it would also match /usr. If there is no existing file
708 that the given pattern can be expanded into, the option will not match
709 /usr.
710
711 The --include-filelist, --exclude-filelist, --include-filelist-stdin,
712 and --exclude-filelist-stdin options also introduce file selection con‐
713 ditions. They direct rdiff-backup to read in a file, each line of
714 which is a file specification, and to include or exclude the matching
715 files. Lines are separated by newlines or nulls, depending on whether
716 the --null-separator switch was given. Each line in a filelist is in‐
717 terpreted similarly to the way extended shell patterns are, with a few
718 exceptions:
719
720 1. Globbing patterns like *, **, ?, and [...] are not expanded.
721
722 2. Include patterns do not match files in a directory that is in‐
723 cluded. So /usr/local in an include file will not match
724 /usr/local/doc.
725
726 3. Lines starting with "+ " are interpreted as include directives,
727 even if found in a filelist referenced by --exclude-filelist.
728 Similarly, lines starting with "- " exclude files even if they
729 are found within an include filelist.
730
731 For example, if the file "list.txt" contains the lines:
732
733 /usr/local
734 - /usr/local/doc
735 /usr/local/bin
736 + /var
737 - /var
738
739 then "--include-filelist list.txt" would include /usr, /usr/local, and
740 /usr/local/bin. It would exclude /usr/local/doc, /usr/lo‐
741 cal/doc/python, etc. It neither excludes nor includes /usr/local/man,
742 leaving the fate of this directory to the next specification condition.
743 Finally, it is undefined what happens with /var. A single file list
744 should not contain conflicting file specifications.
745
746 The --include-globbing-filelist and --exclude-globbing-filelist options
747 also specify filelists, but each line in the filelist will be inter‐
748 preted as a globbing pattern the way --include and --exclude options
749 are interpreted (although "+ " and "- " prefixing is still allowed).
750 For instance, if the file "globbing-list.txt" contains the lines:
751
752 dir/foo
753 + dir/bar
754 - **
755
756 Then "--include-globbing-filelist globbing-list.txt" would be exactly
757 the same as specifying "--include dir/foo --include dir/bar --exclude
758 **" on the command line.
759
760 Finally, the --include-regexp and --exclude-regexp allow files to be
761 included and excluded if their filenames match a python regular expres‐
762 sion. Regular expression syntax is too complicated to explain here,
763 but is covered in Python's library reference. Unlike the --include and
764 --exclude options, the regular expression options don't match files
765 containing or contained in matched files. So for instance
766
767 --include '[0-9]{7}(?!foo)'
768
769 matches any files whose full pathnames contain 7 consecutive digits
770 which aren't followed by 'foo'. However, it wouldn't match /home even
771 if /home/ben/1234567 existed.
772
773
775 There can be complications preserving ownership across systems. For
776 instance the username that owns a file on the source system may not ex‐
777 ist on the destination. Here is how rdiff-backup maps ownership on the
778 source to the destination (or vice-versa, in the case of restoring):
779
780
781 1. If the --preserve-numerical-ids option is given, the remote
782 files will always have the same uid and gid, both for ownership
783 and ACL entries. This may cause unames and gnames to change.
784
785 2. Otherwise, attempt to preserve the user and group names for own‐
786 ership and in ACLs. This may result in files having different
787 uids and gids across systems.
788
789 3. If a name cannot be preserved (e.g. because the username does
790 not exist), preserve the original id, but only in cases of user
791 and group ownership. For ACLs, omit any entry that has a bad
792 user or group name.
793
794 4. The --user-mapping-file and --group-mapping-file options over‐
795 ride this behavior. If either of these options is given, the
796 policy described in 2 and 3 above will be followed, but with the
797 mapped user and group instead of the original. If you specify
798 both --preserve-numerical-ids and one of the mapping options,
799 the behavior is undefined.
800
801 The user and group mapping files both have the same form:
802
803 old_name_or_id1:new_name_or_id1
804 old_name_or_id2:new_name_or_id2
805 <etc>
806
807 Each line should contain a name or id, followed by a colon ":", fol‐
808 lowed by another name or id. If a name or id is not listed, they are
809 treated in the default way described above.
810
811 When restoring, the above behavior is also followed, but note that the
812 original source user/group information will be the input, not the al‐
813 ready mapped user/group information present in the backup repository.
814 For instance, suppose you have mapped all the files owned by alice in
815 the source so that they are owned by ben in the repository, and now you
816 want to restore, making sure the files owned originally by alice are
817 still owned by alice. In this case there is no need to use any of the
818 mapping options. However, if you wanted to restore the files so that
819 the files originally owned by alice on the source are now owned by ben,
820 you would have to use the mapping options, even though you just want
821 the unames of the repository's files preserved in the restored files.
822
823
824
826 Every session rdiff-backup saves various statistics into two files, the
827 session statistics file at rdiff-backup-data/session_statis‐
828 tics.<time>.data and the directory statistics file at rdiff-backup-
829 data/directory_statistics.<time>.data. They are both text files and
830 contain similar information: how many files changed, how many were
831 deleted, the total size of increment files created, etc. However, the
832 session statistics file is intended to be very readable and only de‐
833 scribes the session as a whole. The directory statistics file is more
834 compact (and slightly less readable) but describes every directory
835 backed up. It also may be compressed to save space.
836
837 Statistics-related options include --print-statistics and --null-sepa‐
838 rator.
839
840 Also, rdiff-backup will save various messages to the log file, which is
841 rdiff-backup-data/backup.log for backup sessions and rdiff-backup-
842 data/restore.log for restore sessions. Generally what is written to
843 this file will coincide with the messages displayed to stdout or
844 stderr, although this can be changed with the --terminal-verbosity op‐
845 tion.
846
847 The log file is not compressed and can become quite large if rdiff-
848 backup is run with high verbosity.
849
850
852 If rdiff-backup finishes successfully, the exit status will be 0. If
853 there is an unrecoverable (critical) error, it will be non-zero (usu‐
854 ally 1, but don't depend on this specific value). When setting up
855 rdiff-backup to run automatically (as from cron(8) or similar) it is
856 probably a good idea to check the exit code.
857
858
860 The gzip library in versions 2.2 and earlier of python (but fixed in
861 2.3a1) has trouble producing files over 2GB in length. This bug will
862 prevent rdiff-backup from producing large compressed increments (snap‐
863 shots or diffs). A workaround is to disable compression for large in‐
864 compressible files.
865
866
868 Ben Escoto <ben@emerose.org>
869
870 Feel free to ask me questions or send me bug reports, but you may want
871 to see the web page, mentioned below, first.
872
873
875 python(1), rdiff(1), rsync(1), ssh(1). The main rdiff-backup web page
876 is at https://rdiff-backup.net/. It has more information, links to the
877 mailing list and CVS, etc.
878
879
880
881Version 2.0.5 January 2022 RDIFF-BACKUP(1)