]> arthur.barton.de Git - bup.git/blob - Documentation/bup-index.md
index: Correct inconsitency in documentation of modes
[bup.git] / Documentation / bup-index.md
1 % bup-index(1) Bup %BUP_VERSION%
2 % Avery Pennarun <apenwarr@gmail.com>
3 % %BUP_DATE%
4
5 # NAME
6
7 bup-index - print and/or update the bup filesystem index
8
9 # SYNOPSIS
10
11 bup index \<-p|-m|-s|-u|\--clear|\--check\> [-H] [-l] [-x] [\--fake-valid]
12 [\--no-check-device] [\--fake-invalid] [-f *indexfile*] [\--exclude *path*]
13 [\--exclude-from *filename*] [\--exclude-rx *pattern*]
14 [\--exclude-rx-from *filename*] [-v] \<filenames...\>
15
16 # DESCRIPTION
17
18 `bup index` prints and/or updates the bup filesystem index,
19 which is a cache of the filenames, attributes, and sha-1
20 hashes of each file and directory in the filesystem.  The
21 bup index is similar in function to the `git`(1) index, and
22 can be found in `$BUP_DIR/bupindex`.
23
24 Creating a backup in bup consists of two steps: updating
25 the index with `bup index`, then actually backing up the
26 files (or a subset of the files) with `bup save`.  The
27 separation exists for these reasons:
28
29 1. There is more than one way to generate a list of files
30 that need to be backed up.  For example, you might want to
31 use `inotify`(7) or `dnotify`(7).
32
33 2. Even if you back up files to multiple destinations (for
34 added redundancy), the file names, attributes, and hashes
35 will be the same each time.  Thus, you can save the trouble
36 of repeatedly re-generating the list of files for each
37 backup set.
38
39 3. You may want to use the data tracked by bup index for
40 other purposes (such as speeding up other programs that
41 need the same information).
42
43 # NOTES
44
45 At the moment, bup will ignore Linux attributes (cf. chattr(1) and
46 lsattr(1)) on some systems (any big-endian systems where sizeof(long)
47 < sizeof(int)).  This is because the Linux kernel and FUSE currently
48 disagree over the type of the attr system call arguments, and so on
49 big-endian systems there's no way to get the results without the risk
50 of stack corruption (http://lwn.net/Articles/575846/).  In these
51 situations, bup will print a warning the first time Linux attrs are
52 relevant during any index/save/restore operation.
53
54 bup makes accommodations for the expected "worst-case" filesystem
55 timestamp resolution -- currently one second; examples include VFAT,
56 ext2, ext3, small ext4, etc.  Since bup cannot know the filesystem
57 timestamp resolution, and could be traversing multiple filesystems
58 during any given run, it always assumes that the resolution may be no
59 better than one second.
60
61 As a practical matter, this means that index updates are a bit
62 imprecise, and so `bup save` may occasionally record filesystem
63 changes that you didn't expect.  That's because, during an index
64 update, if bup encounters a path whose actual timestamps are more
65 recent than one second before the update started, bup will set the
66 index timestamps for that path (mtime and ctime) to exactly one second
67 before the run, -- effectively capping those values.
68
69 This ensures that no subsequent changes to those paths can result in
70 timestamps that are identical to those in the index.  If that were
71 possible, bup could overlook the modifications.
72
73 You can see the effect of this behavior in this example (assume that
74 less than one second elapses between the initial file creation and
75 first index run):
76
77     $ touch src/1 src/2
78     # A "sleep 1" here would avoid the unexpected save.
79     $ bup index src
80     $ bup save -n src src  # Saves 1 and 2.
81     $ date > src/1
82     $ bup index src
83     $ date > src/2         # Not indexed.
84     $ bup save -n src src  # But src/2 is saved anyway.
85
86 Strictly speaking, bup should not notice the change to src/2, but it
87 does, due to the accommodations described above.
88
89 # MODES
90
91 -u, \--update
92 :   recursively update the index for the given filenames and
93     their descendants.  One or more filenames must be
94     given.  If no mode option is given, this is the
95     default.
96
97 -p, \--print
98 :   print the contents of the index.  If filenames are
99     given, shows the given entries and their descendants. 
100     If no filenames are given, shows the entries starting
101     at the current working directory (.).
102     
103 -m, \--modified
104 :   prints only files which are marked as modified (ie.
105     changed since the most recent backup) in the index. 
106     Implies `-p`.
107
108 -s, \--status
109 :   prepend a status code (A, M, D, or space) before each
110     filename.  Implies `-p`.  The codes mean, respectively,
111     that a file is marked in the index as added, modified,
112     deleted, or unchanged since the last backup.
113
114 \--check
115 :   carefully check index file integrity before and after
116     updating.  Mostly useful for automated tests.
117
118 \--clear
119 :   clear the default index.
120
121
122 # OPTIONS
123
124 -H, \--hash
125 :   for each file printed, prepend the most recently
126     recorded hash code.  The hash code is normally
127     generated by `bup save`.  For objects which have not yet
128     been backed up, the hash code will be
129     0000000000000000000000000000000000000000.  Note that
130     the hash code is printed even if the file is known to
131     be modified or deleted in the index (ie. the file on
132     the filesystem no longer matches the recorded hash). 
133     If this is a problem for you, use `--status`.
134     
135 -l, \--long
136 :   print more information about each file, in a similar
137     format to the `-l` option to `ls`(1).
138
139 -x, \--xdev, \--one-file-system
140 :   don't cross filesystem boundaries when recursing through the
141     filesystem -- though as with tar and rsync, the mount points
142     themselves will still be indexed.  Only applicable if you're using
143     `-u`.
144     
145 \--fake-valid
146 :   mark specified filenames as up-to-date even if they
147     aren't.  This can be useful for testing, or to avoid
148     unnecessarily backing up files that you know are
149     boring.
150     
151 \--fake-invalid
152 :   mark specified filenames as not up-to-date, forcing the
153     next "bup save" run to re-check their contents.
154
155 -f, \--indexfile=*indexfile*
156 :   use a different index filename instead of
157     `$BUP_DIR/bupindex`.
158
159 \--exclude=*path*
160 :   exclude *path* from the backup (may be repeated).
161
162 \--exclude-from=*filename*
163 :   read --exclude paths from *filename*, one path per-line (may be
164     repeated).  Ignore completely empty lines.
165
166 \--exclude-rx=*pattern*
167 :   exclude any path matching *pattern*, which must be a Python regular
168     expression (http://docs.python.org/library/re.html).  The pattern
169     will be compared against the full path, without anchoring, so
170     "x/y" will match "ox/yard" or "box/yards".  To exclude the
171     contents of /tmp, but not the directory itself, use
172     "^/tmp/.". (may be repeated)
173
174     Examples:
175
176       * '/foo$' - exclude any file named foo
177       * '/foo/$' - exclude any directory named foo
178       * '/foo/.' - exclude the content of any directory named foo
179       * '^/tmp/.' - exclude root-level /tmp's content, but not /tmp itself
180
181 \--exclude-rx-from=*filename*
182 :   read --exclude-rx patterns from *filename*, one pattern per-line
183     (may be repeated).  Ignore completely empty lines.
184
185 \--no-check-device
186 :   don't mark a an entry invalid if the device number (stat(2)
187     st_dev) changes.  This can be useful when indexing remote,
188     automounted, or (LVM) snapshot filesystems.
189
190 -v, \--verbose
191 :   increase log output during update (can be used more
192     than once).  With one `-v`, print each directory as it
193     is updated; with two `-v`, print each file too.
194
195
196 # EXAMPLES
197     bup index -vux /etc /var /usr
198     
199
200 # SEE ALSO
201
202 `bup-save`(1), `bup-drecurse`(1), `bup-on`(1)
203
204 # BUP
205
206 Part of the `bup`(1) suite.