xref: /dflybsd-src/share/man/man5/hammer.5 (revision 4e3c62a338be7edfdffb198d98f43a04e9205560)
15025869bSSascha Wildner.\"
25025869bSSascha Wildner.\" Copyright (c) 2008
35025869bSSascha Wildner.\"	The DragonFly Project.  All rights reserved.
45025869bSSascha Wildner.\"
55025869bSSascha Wildner.\" Redistribution and use in source and binary forms, with or without
65025869bSSascha Wildner.\" modification, are permitted provided that the following conditions
75025869bSSascha Wildner.\" are met:
85025869bSSascha Wildner.\"
95025869bSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
105025869bSSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
115025869bSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
125025869bSSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
135025869bSSascha Wildner.\"    the documentation and/or other materials provided with the
145025869bSSascha Wildner.\"    distribution.
155025869bSSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
165025869bSSascha Wildner.\"    contributors may be used to endorse or promote products derived
175025869bSSascha Wildner.\"    from this software without specific, prior written permission.
185025869bSSascha Wildner.\"
195025869bSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
205025869bSSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
215025869bSSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
225025869bSSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
235025869bSSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
245025869bSSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
255025869bSSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
265025869bSSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
275025869bSSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
285025869bSSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
295025869bSSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
305025869bSSascha Wildner.\" SUCH DAMAGE.
315025869bSSascha Wildner.\"
32*4e3c62a3SThomas Nikolajsen.\" $DragonFly: src/share/man/man5/hammer.5,v 1.7 2008/07/21 21:20:52 thomas Exp $
335025869bSSascha Wildner.\"
340257b9daSSascha Wildner.Dd July 18, 2008
355025869bSSascha Wildner.Os
365025869bSSascha Wildner.Dt HAMMER 5
375025869bSSascha Wildner.Sh NAME
385025869bSSascha Wildner.Nm HAMMER
395025869bSSascha Wildner.Nd HAMMER file system
405025869bSSascha Wildner.Sh SYNOPSIS
41f9f627d2SSascha WildnerTo compile this driver into the kernel,
42f9f627d2SSascha Wildnerplace the following line in your
43f9f627d2SSascha Wildnerkernel configuration file:
44f9f627d2SSascha Wildner.Bd -ragged -offset indent
455025869bSSascha Wildner.Cd options HAMMER
46f9f627d2SSascha Wildner.Ed
47f9f627d2SSascha Wildner.Pp
48f9f627d2SSascha WildnerAlternatively, to load the driver as a
49f9f627d2SSascha Wildnermodule at boot time, place the following line in
50f9f627d2SSascha Wildner.Xr loader.conf 5 :
51f9f627d2SSascha Wildner.Bd -literal -offset indent
52f9f627d2SSascha Wildnerhammer_load="YES"
53f9f627d2SSascha Wildner.Ed
545025869bSSascha Wildner.Pp
55cd8f292bSSascha WildnerTo mount via
565025869bSSascha Wildner.Xr fstab 5 :
57cd8f292bSSascha Wildner.Bd -literal -offset indent
58cd8f292bSSascha Wildner/dev/ad0s1d[:/dev/ad1s1d:...]	/mnt hammer rw 2 0
595025869bSSascha Wildner.Ed
605025869bSSascha Wildner.Sh DESCRIPTION
615025869bSSascha WildnerThe
625025869bSSascha Wildner.Nm
63*4e3c62a3SThomas Nikolajsenfile system provides facilities to store file system data onto disk devices
645025869bSSascha Wildnerand is intended to replace UFS as the default file system for
655025869bSSascha Wildner.Dx .
66*4e3c62a3SThomas NikolajsenAmong its features are instant crash recovery,
67*4e3c62a3SThomas Nikolajsenlarge file systems spanning multiple volumes,
68*4e3c62a3SThomas Nikolajsenfine grained history retention,
69*4e3c62a3SThomas Nikolajsenmirroring capability, and pseudo file systems.
700257b9daSSascha WildnerFor a more detailed introduction, see the paper listed in the
710257b9daSSascha Wildner.Sx SEE ALSO
720257b9daSSascha Wildnersection.
735025869bSSascha Wildner.Pp
74ab3617eeSSascha WildnerAll functions related to managing
755025869bSSascha Wildner.Nm
76ab3617eeSSascha Wildnerfile systems are provided by the
77ab3617eeSSascha Wildner.Xr newfs_hammer 8 ,
78ab3617eeSSascha Wildner.Xr mount_hammer 8 ,
79ab3617eeSSascha Wildner.Xr hammer 8 ,
805025869bSSascha Wildnerand
815025869bSSascha Wildner.Xr undo 1
825025869bSSascha Wildnerutilities.
835025869bSSascha Wildner.Ss Transaction IDs
845025869bSSascha WildnerThe
855025869bSSascha Wildner.Nm
865025869bSSascha Wildnerfile system uses 64 bit, hexadecimal transaction IDs to refer to historical
875025869bSSascha Wildnerfile or directory data.
885025869bSSascha WildnerAn ID has the format
895025869bSSascha Wildner.Li 0x%016llx ,
905025869bSSascha Wildnersuch as
915025869bSSascha Wildner.Li 0x00000001061a8ba6 .
920257b9daSSascha Wildner.Pp
930257b9daSSascha WildnerRelated
940257b9daSSascha Wildner.Xr hammer 8
950257b9daSSascha Wildnercommands:
960257b9daSSascha Wildner.Ar synctid
97*4e3c62a3SThomas Nikolajsen.Ss Instant Crash Recovery
98*4e3c62a3SThomas NikolajsenAfter a non-gracefull system shutdown,
99*4e3c62a3SThomas Nikolajsen.Nm
100*4e3c62a3SThomas Nikolajsenfile systems will be brought back into a fully coherent state
101*4e3c62a3SThomas Nikolajsenwithin a few seconds, at system startup.
102*4e3c62a3SThomas NikolajsenThis is accomplished by mounting the file system,
103*4e3c62a3SThomas Nikolajsenno special utility needs to be run.
104*4e3c62a3SThomas Nikolajsen.Ss Large File Systems & Multi Volume
105*4e3c62a3SThomas NikolajsenA
106*4e3c62a3SThomas Nikolajsen.Nm
107*4e3c62a3SThomas Nikolajsenfile system can span up to 256 volumes.
108*4e3c62a3SThomas NikolajsenEach volume occupies a
109*4e3c62a3SThomas Nikolajsen.Dx
110*4e3c62a3SThomas Nikolajsendisk slice or partition, or another special file,
111*4e3c62a3SThomas Nikolajsenit can be up to 4096 TB in size.
112*4e3c62a3SThomas NikolajsenFor volumes over 2 TB in size,
113*4e3c62a3SThomas Nikolajsen.Xr gpt 8
114*4e3c62a3SThomas Nikolajsenand
115*4e3c62a3SThomas Nikolajsen.Xr disklabel64 8
116*4e3c62a3SThomas Nikolajsennormally needs to be used.
1170257b9daSSascha Wildner.Ss History
1180257b9daSSascha WildnerHistory metadata on the media is written with every sync operation.
1195025869bSSascha WildnerPrior versions of files or directories are accessible by appending
1205025869bSSascha Wildner.Li @@
1215025869bSSascha Wildnerand a transaction ID to the name.
1225025869bSSascha Wildner.Ss Snapshots
123e328ac93SSascha WildnerSnapshots are symbolic links to specific versions of directories or files,
124e328ac93SSascha Wildnerprior or current.
125e328ac93SSascha WildnerTheir data will be retained across prune operations for as long as the
126e328ac93SSascha Wildnersymbolic link exists.
1275025869bSSascha WildnerRemoving the symbolic link enables the file system to reclaim the space
1280257b9daSSascha Wildneragain upon the next reblock operation.
1290257b9daSSascha Wildner.Pp
1300257b9daSSascha WildnerRelated
1310257b9daSSascha Wildner.Xr hammer 8
1320257b9daSSascha Wildnercommands:
1330257b9daSSascha Wildner.Ar snapshot
1340257b9daSSascha Wildner.Ss Reblocking & Pruning
1350257b9daSSascha WildnerReblocking will reorder all elements and thus defragment the file system and
1360257b9daSSascha Wildnerfree space for reuse.
1370257b9daSSascha WildnerPruning a
1380257b9daSSascha Wildner.Nm
1390257b9daSSascha Wildnerfile system free all historical records no longer used by any snapshots.
1400257b9daSSascha Wildner.Pp
1410257b9daSSascha WildnerRelated
1420257b9daSSascha Wildner.Xr hammer 8
1430257b9daSSascha Wildnercommands:
1440257b9daSSascha Wildner.Ar reblock ,
1450257b9daSSascha Wildner.Ar reblock-btree ,
1460257b9daSSascha Wildner.Ar reblock-inodes ,
1470257b9daSSascha Wildner.Ar reblock-dirs ,
1480257b9daSSascha Wildner.Ar reblock-data ,
1490257b9daSSascha Wildner.Ar prune ,
1500257b9daSSascha Wildner.Ar prune-everything
1510257b9daSSascha Wildner.Ss Mirroring & Pseudo File Systems
1520257b9daSSascha WildnerIn order to allow inode numbers to be duplicated on the slaves
1530257b9daSSascha Wildner.Nm Ap s
1540257b9daSSascha Wildnermirroring feature uses
1550257b9daSSascha Wildner.Dq Pseudo File Systems
1560257b9daSSascha Wildner(PFSs).
1570257b9daSSascha WildnerA
1580257b9daSSascha Wildner.Nm
1590257b9daSSascha Wildnerfile system supports up to 65536 PFSs.
1600257b9daSSascha WildnerMultiple slaves per master are supported, but multiple masters per slave
1610257b9daSSascha Wildnerare not.
1620257b9daSSascha WildnerSlaves are always read-only.
1630257b9daSSascha WildnerUpgrading slaves to masters and downgrading masters to slaves are supported.
1640257b9daSSascha Wildner.Pp
1650257b9daSSascha WildnerRelated
1660257b9daSSascha Wildner.Xr hammer 8
1670257b9daSSascha Wildnercommands:
1680257b9daSSascha Wildner.Ar pfs-master ,
1690257b9daSSascha Wildner.Ar pfs-slave ,
1700257b9daSSascha Wildner.Ar pfs-status ,
1710257b9daSSascha Wildner.Ar pfs-update ,
1720257b9daSSascha Wildner.Ar pfs-destroy ,
1730257b9daSSascha Wildner.Ar pfs-upgrade ,
1740257b9daSSascha Wildner.Ar pfs-downgrade ,
1750257b9daSSascha Wildner.Ar mirror-copy ,
1760257b9daSSascha Wildner.Ar mirror-read ,
1770257b9daSSascha Wildner.Ar mirror-write ,
1780257b9daSSascha Wildner.Ar mirror-dump
179ab3617eeSSascha Wildner.Sh EXAMPLES
180*4e3c62a3SThomas Nikolajsen.Ss Preparing the File System
181ab3617eeSSascha WildnerTo create and mount a
182ab3617eeSSascha Wildner.Nm
183ab3617eeSSascha Wildnerfile system use the
184ab3617eeSSascha Wildner.Xr newfs_hammer 8
185ab3617eeSSascha Wildnerand
186ab3617eeSSascha Wildner.Xr mount_hammer 8
187ab3617eeSSascha Wildnercommands.
188ab3617eeSSascha WildnerNote that all
189ab3617eeSSascha Wildner.Nm
190ab3617eeSSascha Wildnerfile systems must have a unique name on a per-machine basis.
191ab3617eeSSascha Wildner.Bd -literal
192ab3617eeSSascha Wildnernewfs_hammer -L Home /dev/ad0s1d
193ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /home
194ab3617eeSSascha Wildner.Ed
195ab3617eeSSascha Wildner.Pp
196cd8f292bSSascha WildnerSimilarly, multi volume file systems can be created and mounted by
197cd8f292bSSascha Wildnerspecifying additional arguments.
198ab3617eeSSascha Wildner.Bd -literal
199ab3617eeSSascha Wildnernewfs_hammer -L MultiHome /dev/ad0s1d /dev/ad1s1d
200ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /dev/ad1s1d /home
201ab3617eeSSascha Wildner.Ed
202ab3617eeSSascha Wildner.Pp
203ab3617eeSSascha WildnerOnce created and mounted,
204ab3617eeSSascha Wildner.Nm
205ab3617eeSSascha Wildnerfile systems need to be reblocked periodically in order not to fill up
206ab3617eeSSascha Wildnerover time, either manually or with a
207ab3617eeSSascha Wildner.Xr cron 8
208ab3617eeSSascha Wildnerjob.
209ab3617eeSSascha WildnerIt is recommended that the
210ab3617eeSSascha Wildner.Xr hammer 8
211ab3617eeSSascha Wildnerutility's
212ab3617eeSSascha Wildner.Fl c
213ab3617eeSSascha Wildnerand
214ab3617eeSSascha Wildner.Fl t
215*4e3c62a3SThomas Nikolajsenoptions be used for this job;
216*4e3c62a3SThomas Nikolajsenfor example, to reblock the
217*4e3c62a3SThomas Nikolajsen.Pa /home
218*4e3c62a3SThomas Nikolajsenfile system every night at 2:15 for up to 5 minutes:
219ab3617eeSSascha Wildner.Bd -literal
220cd8f292bSSascha Wildner15 2 * * * hammer -c /var/run/Home -t 300 reblock /home >/dev/null 2>&1
221ab3617eeSSascha Wildner.Ed
222e328ac93SSascha Wildner.Ss Snapshots
223e328ac93SSascha WildnerThe
224e328ac93SSascha Wildner.Xr hammer 8
225e328ac93SSascha Wildnerutility's
226e328ac93SSascha Wildner.Ar snapshot
227e328ac93SSascha Wildnercommand provides several ways of taking snapshots.
228e328ac93SSascha WildnerThey all assume a directory where snapshots are kept.
229e328ac93SSascha Wildner.Bd -literal
230e328ac93SSascha Wildnermkdir /snaps
231e328ac93SSascha Wildnerhammer snapshot /home /snaps/snap1
2320257b9daSSascha Wildner(...after some changes in /home...)
2330257b9daSSascha Wildnerhammer snapshot /home /snaps/snap2
2340257b9daSSascha Wildner.Ed
2350257b9daSSascha Wildner.Ss Pruning
2360257b9daSSascha WildnerA snapshot directory is also the argument to the
2370257b9daSSascha Wildner.Xr hammer 8 Ap s
2380257b9daSSascha Wildner.Ar prune
2390257b9daSSascha Wildnercommand which frees historical data from the file system that is no longer
2400257b9daSSascha Wildnerpointed to by any snapshot link.
2410257b9daSSascha Wildner.Bd -literal
2420257b9daSSascha Wildnerrm /snaps/snap1
2430257b9daSSascha Wildnerhammer prune /snaps
2440257b9daSSascha Wildner.Ed
2450257b9daSSascha Wildner.Pp
2460257b9daSSascha WildnerUnless the file system is mounted with the
2470257b9daSSascha Wildner.Ar nohistory
2480257b9daSSascha Wildneroption, it might be advisable to also set up
2490257b9daSSascha Wildner.Xr cron 8
2500257b9daSSascha Wildnerjobs for pruning no longer used historical data regularly.
2510257b9daSSascha Wildner.Ss Mirroring
2520257b9daSSascha WildnerMirroring can be set up using
2530257b9daSSascha Wildner.Nm Ap s
2540257b9daSSascha Wildnerpseudo file systems.
2550257b9daSSascha WildnerTo associate the slave with the master its shared UUID should be set to
2560257b9daSSascha Wildnerthe master's shared UUID as output by the
2570257b9daSSascha Wildner.Nm hammer Ar pfs-master
2580257b9daSSascha Wildnercommand.
2590257b9daSSascha Wildner.Bd -literal
2600257b9daSSascha Wildnerhammer pfs-master /home/master
2610257b9daSSascha Wildnerhammer pfs-slave /home/slave shared-uuid=<master's shared uuid>
2620257b9daSSascha Wildner.Ed
2630257b9daSSascha Wildner.Pp
2640257b9daSSascha WildnerThe
2650257b9daSSascha Wildner.Pa /home/slave
2660257b9daSSascha Wildnerlink is unusable for as long as no mirroring operation has taken place.
2670257b9daSSascha Wildner.Pp
2680257b9daSSascha WildnerTo mirror the master's data, either pipe a
2690257b9daSSascha Wildner.Fa mirror-read
2700257b9daSSascha Wildnercommand into a
2710257b9daSSascha Wildner.Fa mirror-write
2720257b9daSSascha Wildneror, as a short-cut, use the
2730257b9daSSascha Wildner.Fa mirror-copy
2740257b9daSSascha Wildnercommand (which works across a
2750257b9daSSascha Wildner.Xr ssh 1
2760257b9daSSascha Wildnerconnection as well).
2770257b9daSSascha Wildner.Bd -literal
2780257b9daSSascha Wildnerhammer mirror-copy /home/master /home/slave
279e328ac93SSascha Wildner.Ed
2805025869bSSascha Wildner.Sh SEE ALSO
2815025869bSSascha Wildner.Xr undo 1 ,
282*4e3c62a3SThomas Nikolajsen.Xr disklabel64 8 ,
283*4e3c62a3SThomas Nikolajsen.Xr gpt 8 ,
2845025869bSSascha Wildner.Xr hammer 8 ,
2855025869bSSascha Wildner.Xr mount_hammer 8 ,
2865025869bSSascha Wildner.Xr newfs_hammer 8
2875025869bSSascha Wildner.Rs
2885025869bSSascha Wildner.%A Matthew Dillon
2895025869bSSascha Wildner.%D June 2008
2905025869bSSascha Wildner.%T "The HAMMER Filesystem"
2915025869bSSascha Wildner.Re
2925025869bSSascha Wildner.Sh HISTORY
2935025869bSSascha WildnerThe
2945025869bSSascha Wildner.Nm
2955025869bSSascha Wildnerfile system first appeared in
2965025869bSSascha Wildner.Dx 1.11 .
2975025869bSSascha Wildner.Sh AUTHORS
2985025869bSSascha Wildner.An -nosplit
2995025869bSSascha WildnerThe
3005025869bSSascha Wildner.Nm
3015025869bSSascha Wildnerfile system was designed and implemented by
3025025869bSSascha Wildner.An Matthew Dillon Aq dillon@backplane.com .
3035025869bSSascha WildnerThis manual page was written by
3045025869bSSascha Wildner.An Sascha Wildner .
305