f7ea346aedf796251638c74aea9d307160c42e9e
[dragonfly.git] / sbin / hammer / hammer.8
1 .\" Copyright (c) 2007 The DragonFly Project.  All rights reserved.
2 .\" 
3 .\" This code is derived from software contributed to The DragonFly Project
4 .\" by Matthew Dillon <dillon@backplane.com>
5 .\" 
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in
14 .\"    the documentation and/or other materials provided with the
15 .\"    distribution.
16 .\" 3. Neither the name of The DragonFly Project nor the names of its
17 .\"    contributors may be used to endorse or promote products derived
18 .\"    from this software without specific, prior written permission.
19 .\" 
20 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 .\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 .\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
24 .\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 .\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 .\" SUCH DAMAGE.
32 .\" 
33 .\" $DragonFly: src/sbin/hammer/hammer.8,v 1.31 2008/07/07 00:27:22 dillon Exp $
34 .Dd June 26, 2008
35 .Dt HAMMER 8
36 .Os
37 .Sh NAME
38 .Nm hammer
39 .Nd HAMMER file system utility
40 .Sh SYNOPSIS
41 .Nm
42 .Op Fl hrv
43 .Op Fl c Ar cyclefile
44 .Op Fl f Ar blkdev[:blkdev]*
45 .Op Fl s Ar linkpath
46 .Op Fl t Ar timeout
47 .Ar command
48 .Ar ...
49 .Sh DESCRIPTION
50 The
51 .Nm
52 utility provides miscellaneous functions related to managing a HAMMER
53 filesystem.
54 .Pp
55 The options are as follows:
56 .Bl -tag -width indent
57 .It Fl h
58 Get help
59 .It Fl r
60 Specify recursion for those commands which support it.
61 .It Fl c Ar cyclefile
62 When pruning and reblocking you can instruction HAMMER to start at the
63 object id stored in the specified file.  If the file does not exist
64 HAMMER will start at the beginning.  If HAMMER is told to run for a
65 specific period of time and is unable to complete the operation it will
66 write out the current obj_id so the next run can pick up where it left
67 off.  If HAMMER runs to completion it will delete the cyclefile.
68 .It Fl f Ar blkdev[:blkdev]*
69 Specify the volumes making up a HAMMER filesystem.
70 .It Fl s Ar linkpath
71 When pruning a filesystem you can instruct HAMMER to create softlinks
72 to available snapshots.
73 .It Fl t Ar timeout
74 When pruning and reblocking you can tell the utility to stop after a
75 certain period of time.  This option is used along with the cycle file
76 option to prune or reblock a portion of the filesystem incrementally.
77 .It Fl v
78 Increase verboseness.  May be specified multiple times.
79 .El
80 .Pp
81 The commands are as follows:
82 .Bl -tag -width indent
83 .It Ar synctid Ar filesystem Op quick
84 Generates a guaranteed, formal 64 bit transaction id representing the
85 current state of the specified HAMMER filesystem.  The filesystem will
86 be synced to the media.
87 .Pp
88 If the
89 .Ar quick
90 keyword is specified the filesystem will be soft-synced, meaning that a
91 crash might still undo the state of the filesystem as of the transaction
92 id returned but any new modifications will occur after the returned
93 transaction id as expected.
94 .It Ar bstats Op interval
95 Output HAMMER B-Tree statistics until interrupted.  The default interval
96 is one second.
97 .It Ar iostats Op interval
98 Output HAMMER I/O statistics until interrupted.  The default interval
99 is one second.
100 .It Ar history Ar path
101 Show the modification history for a HAMMER file's inode and data.
102 .It Ar show Op vol_no[:clu_no]
103 Dump the B-Tree starting at the specified volume and cluster, or
104 at the root volume if not specified.
105 The B-Tree is dumped recursively if the
106 .Fl r
107 option is specified.
108 .It Ar blockmap
109 Dump the btree, record, large-data, and small-data blockmaps, showing
110 physical block assignments and free space percentages.
111 .It Ar namekey Ar filename
112 Generate a HAMMER 64 bit directory hash for the specified file name.
113 The low 32 bits are used as an iterator for hash collisions and will be
114 output as 0.
115 .It Ar namekey32 Ar filename
116 Generate the top 32 bits of a HAMMER 64 bit directory hash for the specified
117 file name.
118 .It Ar prune Ar softlink-dir
119 Prune the filesystem based on previously created snapshot softlinks.
120 The target directory is expected to contain softlinks pointing to
121 snapshots of the filesystems you wish to retain.  The directory is scanned
122 non-recursively and the mount points and transaction ids stored in the
123 softlinks are extracted and sorted.
124 The filesystem is then explicitly pruned according to what is found.
125 Cleaning out portions of the filesystem is as simple as removing a softlink
126 and then running the
127 .Ar prune
128 command.
129 .Pp
130 As a safety measure pruning only occurs if one or more softlinks are found
131 containing the @@ snapshot id extension.
132 .Pp
133 Currently the scanned softlink directory must contain softlinks pointing
134 to a single HAMMER mount.  The softlinks may specify absolute or relative
135 paths.  Softlinks must use 20-character (@@0x%016llx) transaction ids,
136 as might be returned from 'hammer synctid <filesystem>'.
137 .Pp
138 Example, lets say your snapshot directory contains the following links:
139 .Bd -literal
140 lrwxr-xr-x  1 root  wheel  29 May 31 17:57 snap1 ->
141 /usr/obj/@@0x10d2cd05b7270d16
142
143 lrwxr-xr-x  1 root  wheel  29 May 31 17:58 snap2 ->
144 /usr/obj/@@0x10d2cd13f3fde98f
145
146 lrwxr-xr-x  1 root  wheel  29 May 31 17:59 snap3 ->
147 /usr/obj/@@0x10d2cd222adee364
148 .Ed
149 .Pp
150 If you were to run the prune command on this directory, then the HAMMER
151 .Pa /usr/obj
152 mount will be pruned to retain the above three snapshots.
153 In addition, modifications made to the filesystem older than the oldest
154 snapshot will be destroyed and potentially fine-grained modifications made
155 to the filesystem more recently than the most recent snapshot will be
156 retained.
157 .Pp
158 If you then delete the snap2 softlink and rerun the prune command,
159 modifications pertaining to that snapshot would be destroyed.
160 .It Ar prune-everything Ar filesystem
161 This command will remove all historical records from the filesystem.
162 This directive is not normally used on a production system.
163 .Pp
164 Note that pruning a filesystem may not immediately free-up space,
165 though typically some space will be freed if a large number of records are
166 pruned out.  The filesystem must be reblocked to completely recover all
167 available space.
168 .It Ar snapshot Ar snapshot-dir
169 .It Ar snapshot Ar filesystem snapshot-dir
170 Takes a snapshot of the filesystem either explicitly given by
171 .Ar filesystem
172 or implicitly derived from the
173 .Ar snapshot-dir
174 argument and creates a symlink in the directory provided by
175 .Ar snapshot-dir
176 pointing to the snapshot.
177 If
178 .Ar snapshot-dir
179 is no directory, it is assumed to be a format string
180 passed to
181 .Xr strftime 3
182 with the current time as parameter.
183 If
184 .Ar snapshot-dir
185 refers to an existing directory, a default format string of "snap-%Y%d%m-%H%M"
186 is assumed and used as name for the newly created symlink.
187 Assuming that
188 .Pa /mysnapshots
189 is on filesystem
190 .Pa /
191 and that
192 .Pa /obj
193 is a filesystem on its own, the following invocations:
194 .Bd -literal
195 hammer snapshot /mysnapshots
196
197 hammer snapshot /mysnapshots/%Y-%m-%d
198
199 hammer snapshot /obj /mysnapshots/obj-%Y-%m-%d
200 .Ed
201 .Pp
202 would create symlinks similar to:
203 .Bd -literal
204 /mysnapshots/snap-20080627-1210 -> /@@0x10d2cd05b7270d16
205
206 /mysnapshots/2008-06-27 -> /@@0x10d2cd05b7270d16
207
208 /mysnapshots/obj-2008-06-27 -> /obj@@0x10d2cd05b7270d16
209 .Ed
210 .It Ar reblock Ar filesystem Op Ar fill_percentage
211 .It Ar reblock-btree Ar filesystem Op Ar fill_percentage
212 .It Ar reblock-inodes Ar filesystem Op Ar fill_percentage
213 .It Ar reblock-dirs Ar filesystem Op Ar fill_percentage
214 .It Ar reblock-data Ar filesystem Op Ar fill_percentage
215 Attempt to defragment and free space for reuse by reblocking a live
216 HAMMER filesystem.
217 Big blocks cannot be reused by HAMMER until they are completely free.
218 This command also has the effect of reordering all elements, effectively
219 defragmenting the filesystem.
220 .Pp
221 The default fill percentage is 100% and will cause the filesystem to be
222 completely defragmented.  All specified element types will be reallocated
223 and rewritten.  If you wish to quickly free up space instead try specifying
224 a smaller fill percentage, such as 90% or 80% (the '%' suffix is not needed).
225 .Pp
226 Since this command may rewrite the entire contents of the disk it is
227 best to do it incrementally from a cron job along with the
228 .Fl c Ar cyclefile
229 and
230 .Fl t Ar timeout
231 options to limit the run time.
232 The filesystem would thus be defragmented over long period of time.
233 .Pp
234 It is recommended that separate invocations be used for each data type.
235 Btree nodes, inodes, and directories are typically the most important
236 elements needing defragmentation.  Data can be defragmented over a longer
237 period of time.
238 .It Ar pfs-status Ar dirpath
239 Retrieve the mirroring configuration parameters for the specified
240 HAMMER filesystem or pseudo-filesystem.
241 .It Ar pfs-create Ar dirpath Op options
242 Create a pseudo-filesystem inside a HAMMER filesystem.  Up to 65535 such
243 filesystems can be created.  Each one uses an independant inode numbering
244 space making it suitable for use as a replication source or target.
245 .Pp
246 Note that rm -rf'ing a pseudo-fs will not allow the pseudo-id to be reused
247 until all historical data has been pruned out and the pseudo-fs is truely
248 empty.
249 .It Ar pfs-update Ar dirpath Op options
250 Update the configuration parameters for an existing HAMMER filesystem
251 or pseudo-filesystem.  Options that may be specified:
252 .Pp
253 .Bl -tag -width indent
254 .It sync-beg-tid=0x16llx
255 This is the automatic snapshot access TID for mirroring slaves.
256 This parameter is normally updated automatically by the
257 .Ar mirror-write
258 directive.
259 .Pp
260 It is important to note that accessing a mirroring slave
261 with a transaction id greater then the last fully synchronized transaction
262 id can result in an unreliable snapshot since you will be accessing
263 data that is still undergoing synchronization.
264 .Pp
265 Manually modifying this field is dangerous and can result in a broken
266 mirror.
267 .It sync-end-tid=0x16llx
268 This is the current synchronization target for mirroring slaves.
269 This parameter is normally updated automatically by the
270 .Ar mirror-write
271 directive.
272 .Pp
273 Manually modifying this field is dangerous and can result in a broken
274 mirror.
275 .It shared-uuid=<uuid>
276 Set the shared uuid for this filesystem.  All mirrors must have the same
277 shared uuid.  For safety purposes the mirror-write directives will refuse
278 to operate on a target with a different shared uuid.
279 .Pp
280 Changing the shared uuid on an existing, non-empty mirroring target,
281 including an empty but not completely pruned target, can lead
282 to corruption of the mirroring target.
283 .It unique-uuid=<uuid>
284 Set the unique uuid for this filesystem.  This uuid should not be used
285 anywhere else, even on exact copies of the filesystem.
286 .It master=<num>
287 Set the master id for multi-master mirroring.  Only values between 0 and 15
288 inclusive may be specified.  All masters sharing the same
289 .Ar shared-uuid
290 must have different ids.
291 Up to 16 masters will eventually be supported.
292 Multi-master mirroring is not supported yet and the master id should be
293 set to 0 on the single master when mirroring to one or more slaves.
294 .It no-mirror
295 This disables the ability to use this filesystem as a mirroring source
296 or target.  You can still do full scans with mirror-read but incremental
297 scans will not work.
298 .It slave
299 Sets slave mode, allowing the mirror to be used as a slave.  Except for
300 the mirror-write directive all accesses to the mirror will be made read-only
301 and will be as-of the
302 .Ar sync_beg_tid .
303 .It label=<string>
304 Set a descriptive label for this filesystem.
305 .El
306 .It Ar mirror-read Ar filesystem Op Ar <begin-tid>
307 Generate a mirroring stream to stdout.
308 .It Ar mirror-write Ar filesystem Op Ar
309 Take a mirroring stream on stdin and output it to stdout.
310 .Pp
311 This command will fail if the
312 .Ar shared_uuid
313 configuration field for the two filesystems do not match.
314 .It Ar mirror-dump
315 A mirror-read can be piped into a mirror-dump to dump an ascii
316 representation of the mirroring stream.
317 .It Ar mirror-copy Ar [[user@]host:]filesystem Ar [[user@]host:]filesystem
318 This is a shortcut which pipes a mirror-read command to a mirror-write
319 command.  If a remote host specification is made the program forks an
320 ssh and execs the mirror-read and/or mirror-write on the appropriate host.
321 .El
322 .\".Sh EXAMPLES
323 .Sh DIAGNOSTICS
324 .Ex -std
325 .Sh SEE ALSO
326 .Xr newfs_hammer 8
327 .Sh HISTORY
328 The
329 .Nm
330 utility first appeared in
331 .Dx 1.11 .
332 .Sh AUTHORS
333 .An Matthew Dillon Aq dillon@backplane.com