HAMMER Utilities: Feature add
[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.13 2008/05/10 17:54:59 dillon Exp $
34 .Dd December 31, 2007
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 hrx
43 .Op Fl f Ar blkdev[:blkdev]*
44 .Op Fl s Ar linkpath
45 .Op Fl t Ar timeout
46 .Ar command
47 .Ar ...
48 .Sh DESCRIPTION
49 The
50 .Nm
51 utility provides miscellaneous functions related to managing a HAMMER
52 filesystem.
53 .Pp
54 The options are as follows:
55 .Bl -tag -width indent
56 .It Fl h
57 Get help
58 .It Fl r
59 Specify recursion for those commands which support it.
60 .It Fl f Ar blkdev[:blkdev]*
61 Specify the volumes making up a HAMMER filesystem.
62 .It Fl s Ar linkpath
63 When pruning a filesystem you can instruct HAMMER to create softlinks
64 to available snapshots.
65 .It Fl t Ar timeout
66 When pruning and reblocking you can tell the utility to stop after a
67 certain period of time.
68 This option is typically used to limit the time spent reblocking.
69 .It Fl v
70 Increase verboseness.  May be specified multiple times.
71 .It Fl x
72 Do not call sync() when running commands which sync() by default.
73 Timestamp commands such as 'hammer now' sync() by default.  This also
74 disables any sleeps the timestamp commands would otherwise perform.
75 .El
76 .Pp
77 The commands are as follows:
78 .Bl -tag -width indent
79 .It Ar now
80 Generate a timestamp suitable for use in the @@ filename extension,
81 representing right now.
82 Unless
83 .Fl x
84 is specified, this command will automatically sync() and
85 wait for the seconds hand to turn over (sleep for up to one second) prior
86 to generating a seconds-denominated timestamp.
87 .It Ar now64
88 Generate a full 64 bit timestamp.
89 Unless
90 .Fl x
91 is specified, this command will automatically sync(), but not sleep,
92 prior to generating the timestamp.
93 .It Ar stamp
94 Generate a timestamp suitable for use in the @@ filename extension.
95 This command does not sync() or sleep and care should be taken if
96 generating timestamps for data which may not yet be synced to disk.
97 A time specification of
98 .Pf yyyymmdd Oo :hhmmss Oc Ns Op .fractional
99 specifies an exact as-of timestamp in local (not UTC) time.
100 Set the TZ environment variable prior to running
101 .Nm
102 if you wish to specify the time by some other means.
103 .It Ar stamp64
104 Same as the
105 .Ar stamp
106 command but generates a 64 bit timestamp.
107 .It Ar history Ar path
108 Show the modification history for a HAMMER file's inode and data.
109 .It Ar show Op vol_no[:clu_no]
110 Dump the B-Tree starting at the specified volume and cluster, or
111 at the root volume if not specified.
112 The B-Tree is dumped recursively if the
113 .Fl r
114 option is specified.
115 .It Ar blockmap
116 Dump the btree, record, large-data, and small-data blockmaps, showing
117 physical block assignments and free space percentages.
118 .It Ar namekey Ar filename
119 Generate a HAMMER 64 bit directory hash for the specified file name.
120 The low 32 bits are used as an iterator for hash collisions and will be
121 output as 0.
122 .It Ar namekey32 Ar filename
123 Generate the top 32 bits of a HAMMER 64 bit directory hash for the specified
124 file name.
125 .It Ar prune Ar filesystem Ar from Ar #{smhdMy} Ar to Ar #{smhdMy} Ar every Ar #{smhdMy}
126 .It Ar prune Ar filesystem Ar from Ar #{smhdMy} Ar everything
127 .It Ar prune Ar filesystem Ar everything
128 .It Ar prune Ar filesystem Op Ar using Ar filename
129 Prune the filesystem, removing deleted records to free up physical disk
130 space.  Specify a time range between the nearest modulo 0 boundary
131 and prune the tree to the specified granularity within that range.
132 .Pp
133 The filesystem specification should be the root of any mounted HAMMER
134 filesystem.  This command uses a filesystem ioctl to issue the pruning
135 operation.  If you specify just the filesystem with no other parameters
136 all prune directives matching that filesystem in the /etc/hammer.conf file
137 will be used.  If you specify a
138 .Ar using
139 file then those directives contained in the file matching
140 .Ar filesystem
141 will be used.  Multiple directives may be specified when extracting from
142 a file.  The directives must be in the same format: "prune ....", in
143 ascending time order (per filesystem).  Matching prune elements must not
144 have overlapping time specifications.
145 .Pp
146 Both the "from" and the "to" value must be an integral multiple
147 of the "every" value, and the "to" value must be an integral multiple
148 of the "from" value.  When you have multiple pruning rules you must
149 take care to ensure that the range being pruned does not overlap ranges
150 pruned later on, when the retained data is older.  If they do the retained
151 data can wind up being destroyed.  For example, if you prune your data
152 on a 30 minute granularity for the last 24 hours any later pruning must
153 use a granularity that is a multiple of 30 minutes.  If you prune your
154 data on a 30 minute boundary, then a 1 day boundary in a later pruning (on
155 older data), then a pruning beyond that would have to be a multiple of
156 1 day.  And so forth.
157 .Pp
158 The "prune <filesystem> from ... everything" command will remove all
159 historical records older then the specified date.  It is a way of saying
160 that you do not want to retain any deleted information past a certain point.
161 .Pp
162 The "prune <filesystem> everything" command will remove all historical records
163 from the filesystem.  The long keyword is designed to prevent accidental use.
164 This option is not recommended.
165 .Pp
166 Example: "hammer prune /mnt from 1h to 1d every 30m"
167 .El
168 .Sh EXAMPLES
169 .Sh DIAGNOSTICS
170 Exit status is 0 on success and 1 on error.
171 .Sh SEE ALSO
172 .Xr newfs_hammer 8
173 .Sh HISTORY
174 The
175 .Nm
176 utility first appeared in
177 .Dx 1.11 .
178 .Sh AUTHORS
179 .An Matthew Dillon Aq dillon@backplane.com