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