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