xref: /dflybsd-src/share/man/man5/hammer.5 (revision dbd4f60002b98556e6fc8413e6eacf2aedfce6df)
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*dbd4f600SAntonio Huete Jimenez.Dd August 14, 2012
335025869bSSascha Wildner.Dt HAMMER 5
34aacaa523SThomas Nikolajsen.Os
355025869bSSascha Wildner.Sh NAME
365025869bSSascha Wildner.Nm HAMMER
375025869bSSascha Wildner.Nd HAMMER file system
385025869bSSascha Wildner.Sh SYNOPSIS
39f9f627d2SSascha WildnerTo compile this driver into the kernel,
40f9f627d2SSascha Wildnerplace the following line in your
41f9f627d2SSascha Wildnerkernel configuration file:
42f9f627d2SSascha Wildner.Bd -ragged -offset indent
43aacaa523SThomas Nikolajsen.Cd "options HAMMER"
44f9f627d2SSascha Wildner.Ed
45f9f627d2SSascha Wildner.Pp
46f9f627d2SSascha WildnerAlternatively, to load the driver as a
47f9f627d2SSascha Wildnermodule at boot time, place the following line in
48f9f627d2SSascha Wildner.Xr loader.conf 5 :
49f9f627d2SSascha Wildner.Bd -literal -offset indent
50f9f627d2SSascha Wildnerhammer_load="YES"
51f9f627d2SSascha Wildner.Ed
525025869bSSascha Wildner.Pp
53cd8f292bSSascha WildnerTo mount via
545025869bSSascha Wildner.Xr fstab 5 :
55cd8f292bSSascha Wildner.Bd -literal -offset indent
56cd8f292bSSascha Wildner/dev/ad0s1d[:/dev/ad1s1d:...]	/mnt hammer rw 2 0
575025869bSSascha Wildner.Ed
585025869bSSascha Wildner.Sh DESCRIPTION
595025869bSSascha WildnerThe
605025869bSSascha Wildner.Nm
614e3c62a3SThomas Nikolajsenfile system provides facilities to store file system data onto disk devices
62738141e7SSascha Wildnerand is intended to replace
63738141e7SSascha Wildner.Xr ffs 5
64738141e7SSascha Wildneras the default file system for
655025869bSSascha Wildner.Dx .
66aacaa523SThomas Nikolajsen.Pp
674e3c62a3SThomas NikolajsenAmong its features are instant crash recovery,
684e3c62a3SThomas Nikolajsenlarge file systems spanning multiple volumes,
695329a464SThomas Nikolajsendata integrity checking,
70aacaa523SThomas Nikolajsendata deduplication,
71aacaa523SThomas Nikolajsenfine grained history retention and snapshots,
72aacaa523SThomas Nikolajsenpseudo-filesystems (PFSs),
73aacaa523SThomas Nikolajsenmirroring capability and
74aacaa523SThomas Nikolajsenunlimited number of files and links.
755025869bSSascha Wildner.Pp
76ab3617eeSSascha WildnerAll functions related to managing
775025869bSSascha Wildner.Nm
78ab3617eeSSascha Wildnerfile systems are provided by the
79ab3617eeSSascha Wildner.Xr newfs_hammer 8 ,
80ab3617eeSSascha Wildner.Xr mount_hammer 8 ,
81ab3617eeSSascha Wildner.Xr hammer 8 ,
82aacaa523SThomas Nikolajsen.Xr sysctl 8 ,
83a0ed9ee2SThomas Nikolajsen.Xr chflags 1 ,
845025869bSSascha Wildnerand
855025869bSSascha Wildner.Xr undo 1
865025869bSSascha Wildnerutilities.
87738141e7SSascha Wildner.Pp
88738141e7SSascha WildnerFor a more detailed introduction refer to the paper and slides listed in the
89738141e7SSascha Wildner.Sx SEE ALSO
90738141e7SSascha Wildnersection.
91738141e7SSascha WildnerFor some common usages of
92738141e7SSascha Wildner.Nm
93738141e7SSascha Wildnersee the
94738141e7SSascha Wildner.Sx EXAMPLES
95738141e7SSascha Wildnersection below.
96aacaa523SThomas Nikolajsen.Pp
97aacaa523SThomas NikolajsenDescription of
98aacaa523SThomas Nikolajsen.Nm
99aacaa523SThomas Nikolajsenfeatures:
100bc7579a1SSascha Wildner.Ss Instant Crash Recovery
101bc7579a1SSascha WildnerAfter a non-graceful system shutdown,
102bc7579a1SSascha Wildner.Nm
103bc7579a1SSascha Wildnerfile systems will be brought back into a fully coherent state
104bc7579a1SSascha Wildnerwhen mounting the file system, usually within a few seconds.
105aacaa523SThomas Nikolajsen.Pp
106*dbd4f600SAntonio Huete JimenezIn the unlikely case
107*dbd4f600SAntonio Huete Jimenez.Nm
108*dbd4f600SAntonio Huete Jimenezmount fails due redo recovery (stage 2 recovery) being corrupted, a
109*dbd4f600SAntonio Huete Jimenezworkaround to skip this stage can be applied by setting the following tunable:
110*dbd4f600SAntonio Huete Jimenez.Bd -literal -offset indent
111*dbd4f600SAntonio Huete Jimenezvfs.hammer.skip_redo=<value>
112*dbd4f600SAntonio Huete Jimenez.Ed
113*dbd4f600SAntonio Huete Jimenez.Pp
114*dbd4f600SAntonio Huete JimenezPossible values are:
115*dbd4f600SAntonio Huete Jimenez.Bl -tag -width indent
116*dbd4f600SAntonio Huete Jimenez.It 0
117*dbd4f600SAntonio Huete JimenezRun redo recovery normally and fail to mount in the case of error (default).
118*dbd4f600SAntonio Huete Jimenez.It 1
119*dbd4f600SAntonio Huete JimenezRun redo recovery but continue mounting if an error appears.
120*dbd4f600SAntonio Huete Jimenez.It 2
121*dbd4f600SAntonio Huete JimenezCompletely bypass redo recovery.
122*dbd4f600SAntonio Huete Jimenez.El
123*dbd4f600SAntonio Huete Jimenez.Pp
124aacaa523SThomas NikolajsenRelated commands:
125aacaa523SThomas Nikolajsen.Xr mount_hammer 8
126bc7579a1SSascha Wildner.Ss Large File Systems & Multi Volume
127bc7579a1SSascha WildnerA
128bc7579a1SSascha Wildner.Nm
129a0ed9ee2SThomas Nikolajsenfile system can be up to 1 Exabyte in size.
130a0ed9ee2SThomas NikolajsenIt can span up to 256 volumes,
131a0ed9ee2SThomas Nikolajseneach volume occupies a
132bc7579a1SSascha Wildner.Dx
133bc7579a1SSascha Wildnerdisk slice or partition, or another special file,
134bc7579a1SSascha Wildnerand can be up to 4096 TB in size.
135a0ed9ee2SThomas NikolajsenMinimum recommended
136a0ed9ee2SThomas Nikolajsen.Nm
137a0ed9ee2SThomas Nikolajsenfile system size is 50 GB.
138bc7579a1SSascha WildnerFor volumes over 2 TB in size
139bc7579a1SSascha Wildner.Xr gpt 8
140bc7579a1SSascha Wildnerand
141bc7579a1SSascha Wildner.Xr disklabel64 8
142bc7579a1SSascha Wildnernormally need to be used.
143aacaa523SThomas Nikolajsen.Pp
144aacaa523SThomas NikolajsenRelated
145aacaa523SThomas Nikolajsen.Xr hammer 8
146aacaa523SThomas Nikolajsencommands:
147aacaa523SThomas Nikolajsen.Cm volume-add ,
148aacaa523SThomas Nikolajsen.Cm volume-del ,
149aacaa523SThomas Nikolajsen.Cm volume-list ;
150aacaa523SThomas Nikolajsensee also
151aacaa523SThomas Nikolajsen.Xr newfs_hammer 8
1525329a464SThomas Nikolajsen.Ss Data Integrity Checking
1535329a464SThomas Nikolajsen.Nm
1545329a464SThomas Nikolajsenhas high focus on data integrity,
1555329a464SThomas NikolajsenCRC checks are made for all major structures and data.
1565329a464SThomas Nikolajsen.Nm
1575329a464SThomas Nikolajsensnapshots implements features to make data integrity checking easier:
158a0ed9ee2SThomas NikolajsenThe atime and mtime fields are locked to the ctime
159a0ed9ee2SThomas Nikolajsenfor files accessed via a snapshot.
1605329a464SThomas NikolajsenThe
1615329a464SThomas Nikolajsen.Fa st_dev
1625329a464SThomas Nikolajsenfield is based on the PFS
1635329a464SThomas Nikolajsen.Ar shared-uuid
1645329a464SThomas Nikolajsenand not on any real device.
165a0ed9ee2SThomas NikolajsenThis means that archiving the contents of a snapshot with e.g.\&
1665329a464SThomas Nikolajsen.Xr tar 1
1675329a464SThomas Nikolajsenand piping it to something like
1685329a464SThomas Nikolajsen.Xr md5 1
1695329a464SThomas Nikolajsenwill yield a consistent result.
1705329a464SThomas NikolajsenThe consistency is also retained on mirroring targets.
171aacaa523SThomas Nikolajsen.Ss Data Deduplication
172aacaa523SThomas NikolajsenTo save disk space data deduplication can be used.
173aacaa523SThomas NikolajsenData deduplication will identify data blocks which occur multiple times
174aacaa523SThomas Nikolajsenand only store one copy, multiple reference will be made to this copy.
175aacaa523SThomas Nikolajsen.Pp
176aacaa523SThomas NikolajsenRelated
177aacaa523SThomas Nikolajsen.Xr hammer 8
178aacaa523SThomas Nikolajsencommands:
179aacaa523SThomas Nikolajsen.Cm dedup ,
180aacaa523SThomas Nikolajsen.Cm dedup-simulate ,
181aacaa523SThomas Nikolajsen.Cm cleanup ,
182aacaa523SThomas Nikolajsen.Cm config
1835025869bSSascha Wildner.Ss Transaction IDs
1845025869bSSascha WildnerThe
1855025869bSSascha Wildner.Nm
186aacaa523SThomas Nikolajsenfile system uses 64-bit transaction ids to refer to historical
1875025869bSSascha Wildnerfile or directory data.
188aacaa523SThomas NikolajsenTransaction ids used by
189aacaa523SThomas Nikolajsen.Nm
190aacaa523SThomas Nikolajsenare monotonically increasing over time.
191aacaa523SThomas NikolajsenIn other words:
192aacaa523SThomas Nikolajsenwhen a transaction is made,
193aacaa523SThomas Nikolajsen.Nm
194aacaa523SThomas Nikolajsenwill always use higher transaction ids for following transactions.
195aacaa523SThomas NikolajsenA transaction id is given in hexadecimal format
196aacaa523SThomas Nikolajsen.Li 0x016llx ,
1975025869bSSascha Wildnersuch as
1985025869bSSascha Wildner.Li 0x00000001061a8ba6 .
1990257b9daSSascha Wildner.Pp
2000257b9daSSascha WildnerRelated
2010257b9daSSascha Wildner.Xr hammer 8
2020257b9daSSascha Wildnercommands:
203aacaa523SThomas Nikolajsen.Cm snapshot ,
204aacaa523SThomas Nikolajsen.Cm snap ,
205aacaa523SThomas Nikolajsen.Cm snaplo ,
206aacaa523SThomas Nikolajsen.Cm snapq ,
207aacaa523SThomas Nikolajsen.Cm snapls ,
208aacaa523SThomas Nikolajsen.Cm synctid
209bc7579a1SSascha Wildner.Ss History & Snapshots
210bc7579a1SSascha WildnerHistory metadata on the media is written with every sync operation, so that
211bc7579a1SSascha Wildnerby default the resolution of a file's history is 30-60 seconds until the next
212bc7579a1SSascha Wildnerprune operation.
213aacaa523SThomas NikolajsenPrior versions of files and directories are generally accessible by appending
214aacaa523SThomas Nikolajsen.Ql @@
215aacaa523SThomas Nikolajsenand a transaction id to the name.
216bc7579a1SSascha WildnerThe common way of accessing history, however, is by taking snapshots.
217bc7579a1SSascha Wildner.Pp
218bc7579a1SSascha WildnerSnapshots are softlinks to prior versions of directories and their files.
219e328ac93SSascha WildnerTheir data will be retained across prune operations for as long as the
220bc7579a1SSascha Wildnersoftlink exists.
221bc7579a1SSascha WildnerRemoving the softlink enables the file system to reclaim the space
222bc7579a1SSascha Wildneragain upon the next prune & reblock operations.
223aacaa523SThomas NikolajsenIn
224aacaa523SThomas Nikolajsen.Nm
225aacaa523SThomas NikolajsenVersion 3+ snapshots are also maintained as file system meta-data.
2260257b9daSSascha Wildner.Pp
2270257b9daSSascha WildnerRelated
2280257b9daSSascha Wildner.Xr hammer 8
2290257b9daSSascha Wildnercommands:
230aacaa523SThomas Nikolajsen.Cm cleanup ,
231aacaa523SThomas Nikolajsen.Cm history ,
232aacaa523SThomas Nikolajsen.Cm snapshot ,
233aacaa523SThomas Nikolajsen.Cm snap ,
234aacaa523SThomas Nikolajsen.Cm snaplo ,
235aacaa523SThomas Nikolajsen.Cm snapq ,
236aacaa523SThomas Nikolajsen.Cm snaprm ,
237aacaa523SThomas Nikolajsen.Cm snapls ,
238aacaa523SThomas Nikolajsen.Cm config ,
239aacaa523SThomas Nikolajsen.Cm viconfig ;
240f704fe91SThomas Nikolajsensee also
241f704fe91SThomas Nikolajsen.Xr undo 1
242f704fe91SThomas Nikolajsen.Ss Pruning & Reblocking
243bc7579a1SSascha WildnerPruning is the act of deleting file system history.
244a0ed9ee2SThomas NikolajsenBy default only history used by the given snapshots
245a0ed9ee2SThomas Nikolajsenand history from after the latest snapshot will be retained.
246a0ed9ee2SThomas NikolajsenBy setting the per PFS parameter
247a0ed9ee2SThomas Nikolajsen.Cm prune-min ,
248a0ed9ee2SThomas Nikolajsenhistory is guaranteed to be saved at least this time interval.
249bc7579a1SSascha WildnerAll other history is deleted.
250f704fe91SThomas NikolajsenReblocking will reorder all elements and thus defragment the file system and
251f704fe91SThomas Nikolajsenfree space for reuse.
252f704fe91SThomas NikolajsenAfter pruning a file system must be reblocked to recover all available space.
2535329a464SThomas NikolajsenReblocking is needed even when using the
254aacaa523SThomas Nikolajsen.Cm nohistory
2555329a464SThomas Nikolajsen.Xr mount_hammer 8
256a0ed9ee2SThomas Nikolajsenoption or
257a0ed9ee2SThomas Nikolajsen.Xr chflags 1
258a0ed9ee2SThomas Nikolajsenflag.
2590257b9daSSascha Wildner.Pp
2600257b9daSSascha WildnerRelated
2610257b9daSSascha Wildner.Xr hammer 8
2620257b9daSSascha Wildnercommands:
263aacaa523SThomas Nikolajsen.Cm cleanup ,
264aacaa523SThomas Nikolajsen.Cm snapshot ,
265aacaa523SThomas Nikolajsen.Cm prune ,
266aacaa523SThomas Nikolajsen.Cm prune-everything ,
267aacaa523SThomas Nikolajsen.Cm rebalance ,
268aacaa523SThomas Nikolajsen.Cm reblock ,
269aacaa523SThomas Nikolajsen.Cm reblock-btree ,
270aacaa523SThomas Nikolajsen.Cm reblock-inodes ,
271aacaa523SThomas Nikolajsen.Cm reblock-dirs ,
272aacaa523SThomas Nikolajsen.Cm reblock-data
273aacaa523SThomas Nikolajsen.Ss Pseudo-Filesystems (PFSs)
274aacaa523SThomas NikolajsenA pseudo-filesystem, PFS for short, is a sub file system in a
275aacaa523SThomas Nikolajsen.Nm
276aacaa523SThomas Nikolajsenfile system.
277aacaa523SThomas NikolajsenEach PFS has independent inode numbers.
278aacaa523SThomas NikolajsenAll disk space in a
279aacaa523SThomas Nikolajsen.Nm
280aacaa523SThomas Nikolajsenfile system is shared between all PFSs in it,
281aacaa523SThomas Nikolajsenso each PFS is free to use all remaining space.
2820257b9daSSascha WildnerA
2830257b9daSSascha Wildner.Nm
284aacaa523SThomas Nikolajsenfile system supports up to 65536 PFSs.
285aacaa523SThomas NikolajsenThe root of a
286aacaa523SThomas Nikolajsen.Nm
287aacaa523SThomas Nikolajsenfile system is PFS# 0, it is called the root PFS and is always a master PFS.
288aacaa523SThomas Nikolajsen.Pp
289aacaa523SThomas NikolajsenA PFS can be either master or slave.
290aacaa523SThomas NikolajsenSlaves are always read-only,
291aacaa523SThomas Nikolajsenso they can't be updated by normal file operations, only by
292aacaa523SThomas Nikolajsen.Xr hammer 8
293aacaa523SThomas Nikolajsenoperations like mirroring and pruning.
2940257b9daSSascha WildnerUpgrading slaves to masters and downgrading masters to slaves are supported.
2950257b9daSSascha Wildner.Pp
2965329a464SThomas NikolajsenIt is recommended to use a
2975329a464SThomas Nikolajsen.Nm null
298aacaa523SThomas Nikolajsenmount to access a PFS, except for root PFS;
2995329a464SThomas Nikolajsenthis way no tools are confused by the PFS root being a symlink
3005329a464SThomas Nikolajsenand inodes not being unique across a
3015329a464SThomas Nikolajsen.Nm
3025329a464SThomas Nikolajsenfile system.
3035329a464SThomas Nikolajsen.Pp
304aacaa523SThomas NikolajsenMany
305aacaa523SThomas Nikolajsen.Xr hammer 8
306aacaa523SThomas Nikolajsenoperations operates per PFS,
307aacaa523SThomas Nikolajsenthis includes mirroring, offline deduping, pruning, reblocking and rebalancing.
308aacaa523SThomas Nikolajsen.Pp
3090257b9daSSascha WildnerRelated
3100257b9daSSascha Wildner.Xr hammer 8
3110257b9daSSascha Wildnercommands:
312aacaa523SThomas Nikolajsen.Cm pfs-master ,
313aacaa523SThomas Nikolajsen.Cm pfs-slave ,
314aacaa523SThomas Nikolajsen.Cm pfs-status ,
315aacaa523SThomas Nikolajsen.Cm pfs-update ,
316aacaa523SThomas Nikolajsen.Cm pfs-destroy ,
317aacaa523SThomas Nikolajsen.Cm pfs-upgrade ,
318aacaa523SThomas Nikolajsen.Cm pfs-downgrade ;
319aacaa523SThomas Nikolajsensee also
320aacaa523SThomas Nikolajsen.Xr mount_null 8
321aacaa523SThomas Nikolajsen.Ss Mirroring
322aacaa523SThomas NikolajsenMirroring is copying of all data in a file system, including snapshots
323aacaa523SThomas Nikolajsenand other historical data.
324aacaa523SThomas NikolajsenIn order to allow inode numbers to be duplicated on the slaves
325aacaa523SThomas Nikolajsen.Nm
326aacaa523SThomas Nikolajsenmirroring feature uses PFSs.
327aacaa523SThomas NikolajsenA master or slave PFS can be mirrored to a slave PFS.
328aacaa523SThomas NikolajsenI.e.\& for mirroring multiple slaves per master are supported,
329aacaa523SThomas Nikolajsenbut multiple masters per slave are not.
330aacaa523SThomas Nikolajsen.Pp
331aacaa523SThomas NikolajsenRelated
332aacaa523SThomas Nikolajsen.Xr hammer 8
333aacaa523SThomas Nikolajsencommands:
334aacaa523SThomas Nikolajsen.Cm mirror-copy ,
335aacaa523SThomas Nikolajsen.Cm mirror-stream ,
336aacaa523SThomas Nikolajsen.Cm mirror-read ,
337aacaa523SThomas Nikolajsen.Cm mirror-read-stream ,
338aacaa523SThomas Nikolajsen.Cm mirror-write ,
339aacaa523SThomas Nikolajsen.Cm mirror-dump
340aacaa523SThomas Nikolajsen.Ss Fsync Flush Modes
341aacaa523SThomas NikolajsenThe
342aacaa523SThomas Nikolajsen.Nm
343aacaa523SThomas Nikolajsenfile system implements several different
344aacaa523SThomas Nikolajsen.Fn fsync
345aacaa523SThomas Nikolajsenflush modes, the mode used is set via the
346aacaa523SThomas Nikolajsen.Va vfs.hammer.flush_mode
347aacaa523SThomas Nikolajsensysctl, see
348aacaa523SThomas Nikolajsen.Xr hammer 8
349aacaa523SThomas Nikolajsenfor details.
350aacaa523SThomas Nikolajsen.Ss Unlimited Number of Files and Links
351aacaa523SThomas NikolajsenThere is no limit on the number of files or links in a
352aacaa523SThomas Nikolajsen.Nm
353aacaa523SThomas Nikolajsenfile system, apart from available disk space.
3545329a464SThomas Nikolajsen.Ss NFS Export
3555329a464SThomas Nikolajsen.Nm
3565329a464SThomas Nikolajsenfile systems support NFS export.
357cb9cae46SThomas NikolajsenNFS export of PFSs is done using
358cb9cae46SThomas Nikolajsen.Nm null
359aacaa523SThomas Nikolajsenmounts (for file/directory in root PFS
360aacaa523SThomas Nikolajsen.Nm null
361aacaa523SThomas Nikolajsenmount is not needed).
362738141e7SSascha WildnerFor example, to export the PFS
3635329a464SThomas Nikolajsen.Pa /hammer/pfs/data ,
364738141e7SSascha Wildnercreate a
365cb9cae46SThomas Nikolajsen.Nm null
366cb9cae46SThomas Nikolajsenmount, e.g.\& to
3675329a464SThomas Nikolajsen.Pa /hammer/data
3685329a464SThomas Nikolajsenand export the latter path.
3695329a464SThomas Nikolajsen.Pp
3705329a464SThomas NikolajsenDon't export a directory containing a PFS (e.g.\&
3715329a464SThomas Nikolajsen.Pa /hammer/pfs
3725329a464SThomas Nikolajsenabove).
3735329a464SThomas NikolajsenOnly
3745329a464SThomas Nikolajsen.Nm null
3755329a464SThomas Nikolajsenmount for PFS root
3765329a464SThomas Nikolajsen(e.g.\&
3775329a464SThomas Nikolajsen.Pa /hammer/data
378aacaa523SThomas Nikolajsenabove) should be exported (subdirectory may be escaped if exported).
379aacaa523SThomas Nikolajsen.Ss File System Versions
380aacaa523SThomas NikolajsenAs new features have been introduced to
381aacaa523SThomas Nikolajsen.Nm
382aacaa523SThomas Nikolajsena version number has been bumped.
383aacaa523SThomas NikolajsenEach
384aacaa523SThomas Nikolajsen.Nm
385aacaa523SThomas Nikolajsenfile system has a version, which can be upgraded to support new features.
386aacaa523SThomas Nikolajsen.Pp
387aacaa523SThomas NikolajsenRelated
388aacaa523SThomas Nikolajsen.Xr hammer 8
389aacaa523SThomas Nikolajsencommands:
390aacaa523SThomas Nikolajsen.Cm version ,
391aacaa523SThomas Nikolajsen.Cm version-upgrade ;
392aacaa523SThomas Nikolajsensee also
393aacaa523SThomas Nikolajsen.Xr newfs_hammer 8
394ab3617eeSSascha Wildner.Sh EXAMPLES
3954e3c62a3SThomas Nikolajsen.Ss Preparing the File System
396ab3617eeSSascha WildnerTo create and mount a
397ab3617eeSSascha Wildner.Nm
398ab3617eeSSascha Wildnerfile system use the
399ab3617eeSSascha Wildner.Xr newfs_hammer 8
400ab3617eeSSascha Wildnerand
401ab3617eeSSascha Wildner.Xr mount_hammer 8
402ab3617eeSSascha Wildnercommands.
403ab3617eeSSascha WildnerNote that all
404ab3617eeSSascha Wildner.Nm
405ab3617eeSSascha Wildnerfile systems must have a unique name on a per-machine basis.
4065329a464SThomas Nikolajsen.Bd -literal -offset indent
407738141e7SSascha Wildnernewfs_hammer -L HOME /dev/ad0s1d
408ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /home
409ab3617eeSSascha Wildner.Ed
410ab3617eeSSascha Wildner.Pp
411cd8f292bSSascha WildnerSimilarly, multi volume file systems can be created and mounted by
412cd8f292bSSascha Wildnerspecifying additional arguments.
4135329a464SThomas Nikolajsen.Bd -literal -offset indent
414738141e7SSascha Wildnernewfs_hammer -L MULTIHOME /dev/ad0s1d /dev/ad1s1d
415ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /dev/ad1s1d /home
416ab3617eeSSascha Wildner.Ed
417ab3617eeSSascha Wildner.Pp
418ab3617eeSSascha WildnerOnce created and mounted,
419ab3617eeSSascha Wildner.Nm
420e0331f4fSSascha Wildnerfile systems need periodic clean up making snapshots, pruning and reblocking,
4215329a464SThomas Nikolajsenin order to have access to history and file system not to fill up.
4225329a464SThomas NikolajsenFor this it is recommended to use the
4235329a464SThomas Nikolajsen.Xr hammer 8
424aacaa523SThomas Nikolajsen.Cm cleanup
425e0331f4fSSascha Wildnermetacommand.
426738141e7SSascha Wildner.Pp
427e0331f4fSSascha WildnerBy default,
428e0331f4fSSascha Wildner.Dx
429e0331f4fSSascha Wildneris set up to run
430aacaa523SThomas Nikolajsen.Nm hammer Cm cleanup
431e0331f4fSSascha Wildnernightly via
432e0331f4fSSascha Wildner.Xr periodic 8 .
4335329a464SThomas Nikolajsen.Pp
434738141e7SSascha WildnerIt is also possible to perform these operations individually via
435738141e7SSascha Wildner.Xr crontab 5 .
4365329a464SThomas NikolajsenFor example, to reblock the
4374e3c62a3SThomas Nikolajsen.Pa /home
4384e3c62a3SThomas Nikolajsenfile system every night at 2:15 for up to 5 minutes:
4395329a464SThomas Nikolajsen.Bd -literal -offset indent
440738141e7SSascha Wildner15 2 * * * hammer -c /var/run/HOME.reblock -t 300 reblock /home \e
4415329a464SThomas Nikolajsen	>/dev/null 2>&1
442ab3617eeSSascha Wildner.Ed
443e328ac93SSascha Wildner.Ss Snapshots
444e328ac93SSascha WildnerThe
445e328ac93SSascha Wildner.Xr hammer 8
446e328ac93SSascha Wildnerutility's
447aacaa523SThomas Nikolajsen.Cm snapshot
448e328ac93SSascha Wildnercommand provides several ways of taking snapshots.
449e328ac93SSascha WildnerThey all assume a directory where snapshots are kept.
4505329a464SThomas Nikolajsen.Bd -literal -offset indent
451e328ac93SSascha Wildnermkdir /snaps
452e328ac93SSascha Wildnerhammer snapshot /home /snaps/snap1
4530257b9daSSascha Wildner(...after some changes in /home...)
4540257b9daSSascha Wildnerhammer snapshot /home /snaps/snap2
4550257b9daSSascha Wildner.Ed
456bc7579a1SSascha Wildner.Pp
457bc7579a1SSascha WildnerThe softlinks in
458bc7579a1SSascha Wildner.Pa /snaps
459bc7579a1SSascha Wildnerpoint to the state of the
460bc7579a1SSascha Wildner.Pa /home
461bc7579a1SSascha Wildnerdirectory at the time each snapshot was taken, and could now be used to copy
462bc7579a1SSascha Wildnerthe data somewhere else for backup purposes.
463738141e7SSascha Wildner.Pp
464738141e7SSascha WildnerBy default,
465738141e7SSascha Wildner.Dx
466738141e7SSascha Wildneris set up to create nightly snapshots of all
467738141e7SSascha Wildner.Nm
468738141e7SSascha Wildnerfile systems via
469738141e7SSascha Wildner.Xr periodic 8
470738141e7SSascha Wildnerand to keep them for 60 days.
4710257b9daSSascha Wildner.Ss Pruning
4720257b9daSSascha WildnerA snapshot directory is also the argument to the
473aacaa523SThomas Nikolajsen.Xr hammer 8
474aacaa523SThomas Nikolajsen.Cm prune
475bc7579a1SSascha Wildnercommand which frees historical data from the file system that is not
476aacaa523SThomas Nikolajsenpointed to by any snapshot link and is not from after the latest snapshot
477aacaa523SThomas Nikolajsenand is older than
478aacaa523SThomas Nikolajsen.Cm prune-min .
4795329a464SThomas Nikolajsen.Bd -literal -offset indent
4800257b9daSSascha Wildnerrm /snaps/snap1
4810257b9daSSascha Wildnerhammer prune /snaps
4820257b9daSSascha Wildner.Ed
4830257b9daSSascha Wildner.Ss Mirroring
484aacaa523SThomas NikolajsenMirroring is set up using
485aacaa523SThomas Nikolajsen.Nm
486aacaa523SThomas Nikolajsenpseudo-filesystems (PFSs).
4870257b9daSSascha WildnerTo associate the slave with the master its shared UUID should be set to
4880257b9daSSascha Wildnerthe master's shared UUID as output by the
489aacaa523SThomas Nikolajsen.Nm hammer Cm pfs-master
4900257b9daSSascha Wildnercommand.
4915329a464SThomas Nikolajsen.Bd -literal -offset indent
4925329a464SThomas Nikolajsenhammer pfs-master /home/pfs/master
4935329a464SThomas Nikolajsenhammer pfs-slave /home/pfs/slave shared-uuid=<master's shared uuid>
4940257b9daSSascha Wildner.Ed
4950257b9daSSascha Wildner.Pp
4960257b9daSSascha WildnerThe
497cb9cae46SThomas Nikolajsen.Pa /home/pfs/slave
4980257b9daSSascha Wildnerlink is unusable for as long as no mirroring operation has taken place.
4990257b9daSSascha Wildner.Pp
5000257b9daSSascha WildnerTo mirror the master's data, either pipe a
501aacaa523SThomas Nikolajsen.Cm mirror-read
5020257b9daSSascha Wildnercommand into a
503aacaa523SThomas Nikolajsen.Cm mirror-write
5040257b9daSSascha Wildneror, as a short-cut, use the
505aacaa523SThomas Nikolajsen.Cm mirror-copy
5060257b9daSSascha Wildnercommand (which works across a
5070257b9daSSascha Wildner.Xr ssh 1
5080257b9daSSascha Wildnerconnection as well).
509cb9cae46SThomas NikolajsenInitial mirroring operation has to be done to the PFS path (as
510cb9cae46SThomas Nikolajsen.Xr mount_null 8
511cb9cae46SThomas Nikolajsencan't access it yet).
5125329a464SThomas Nikolajsen.Bd -literal -offset indent
513cb9cae46SThomas Nikolajsenhammer mirror-copy /home/pfs/master /home/pfs/slave
514cb9cae46SThomas Nikolajsen.Ed
515cb9cae46SThomas Nikolajsen.Pp
516aacaa523SThomas NikolajsenIt is also possible to have the target PFS auto created
517aacaa523SThomas Nikolajsenby just issuing the same
518aacaa523SThomas Nikolajsen.Cm mirror-copy
519aacaa523SThomas Nikolajsencommand, if the target PFS doesn't exist you will be prompted
520aacaa523SThomas Nikolajsenif you would like to create it.
521aacaa523SThomas NikolajsenYou can even omit the prompting by using the
522aacaa523SThomas Nikolajsen.Fl y
523aacaa523SThomas Nikolajsenflag:
524aacaa523SThomas Nikolajsen.Bd -literal -offset indent
525aacaa523SThomas Nikolajsenhammer -y mirror-copy /home/pfs/master /home/pfs/slave
526aacaa523SThomas Nikolajsen.Ed
527aacaa523SThomas Nikolajsen.Pp
528cb9cae46SThomas NikolajsenAfter this initial step
529cb9cae46SThomas Nikolajsen.Nm null
530cb9cae46SThomas Nikolajsenmount can be setup for
531cb9cae46SThomas Nikolajsen.Pa /home/pfs/slave .
532cb9cae46SThomas NikolajsenFurther operations can use
533cb9cae46SThomas Nikolajsen.Nm null
534cb9cae46SThomas Nikolajsenmounts.
535cb9cae46SThomas Nikolajsen.Bd -literal -offset indent
536cb9cae46SThomas Nikolajsenmount_null /home/pfs/master /home/master
537cb9cae46SThomas Nikolajsenmount_null /home/pfs/slave /home/slave
538cb9cae46SThomas Nikolajsen
5390257b9daSSascha Wildnerhammer mirror-copy /home/master /home/slave
540e328ac93SSascha Wildner.Ed
5415329a464SThomas Nikolajsen.Ss NFS Export
5425329a464SThomas NikolajsenTo NFS export from the
5435329a464SThomas Nikolajsen.Nm
5445329a464SThomas Nikolajsenfile system
5455329a464SThomas Nikolajsen.Pa /hammer
5465329a464SThomas Nikolajsenthe directory
5475329a464SThomas Nikolajsen.Pa /hammer/non-pfs
5485329a464SThomas Nikolajsenwithout PFSs, and the PFS
5495329a464SThomas Nikolajsen.Pa /hammer/pfs/data ,
550aacaa523SThomas Nikolajsenthe latter is
551aacaa523SThomas Nikolajsen.Nm null
552aacaa523SThomas Nikolajsenmounted to
5535329a464SThomas Nikolajsen.Pa /hammer/data .
5545329a464SThomas Nikolajsen.Pp
5555329a464SThomas NikolajsenAdd to
5565329a464SThomas Nikolajsen.Pa /etc/fstab
5575329a464SThomas Nikolajsen(see
5585329a464SThomas Nikolajsen.Xr fstab 5 ) :
5595329a464SThomas Nikolajsen.Bd -literal -offset indent
5605329a464SThomas Nikolajsen/hammer/pfs/data /hammer/data null rw
5615329a464SThomas Nikolajsen.Ed
5625329a464SThomas Nikolajsen.Pp
5635329a464SThomas NikolajsenAdd to
5645329a464SThomas Nikolajsen.Pa /etc/exports
5655329a464SThomas Nikolajsen(see
5665329a464SThomas Nikolajsen.Xr exports 5 ) :
5675329a464SThomas Nikolajsen.Bd -literal -offset indent
5685329a464SThomas Nikolajsen/hammer/non-pfs
5695329a464SThomas Nikolajsen/hammer/data
5705329a464SThomas Nikolajsen.Ed
571aacaa523SThomas Nikolajsen.Sh DIAGNOSTICS
572aacaa523SThomas Nikolajsen.Bl -diag
573aacaa523SThomas Nikolajsen.It "hammer: System has insuffient buffers to rebalance the tree.  nbuf < %d"
574aacaa523SThomas NikolajsenRebalancing a
575aacaa523SThomas Nikolajsen.Nm
576aacaa523SThomas NikolajsenPFS uses quite a bit of memory and
577aacaa523SThomas Nikolajsencan't be done on low memory systems.
578aacaa523SThomas NikolajsenIt has been reported to fail on 512MB systems.
579aacaa523SThomas NikolajsenRebalancing isn't critical for
580aacaa523SThomas Nikolajsen.Nm
581aacaa523SThomas Nikolajsenfile system operation;
582aacaa523SThomas Nikolajsenit is done by
583aacaa523SThomas Nikolajsen.Nm hammer
584aacaa523SThomas Nikolajsen.Cm rebalance ,
585aacaa523SThomas Nikolajsenoften as part of
586aacaa523SThomas Nikolajsen.Nm hammer
587aacaa523SThomas Nikolajsen.Cm cleanup .
588aacaa523SThomas Nikolajsen.El
5895025869bSSascha Wildner.Sh SEE ALSO
590a0ed9ee2SThomas Nikolajsen.Xr chflags 1 ,
5915329a464SThomas Nikolajsen.Xr md5 1 ,
5925329a464SThomas Nikolajsen.Xr tar 1 ,
5935025869bSSascha Wildner.Xr undo 1 ,
594a0ed9ee2SThomas Nikolajsen.Xr exports 5 ,
595738141e7SSascha Wildner.Xr ffs 5 ,
596a0ed9ee2SThomas Nikolajsen.Xr fstab 5 ,
5974e3c62a3SThomas Nikolajsen.Xr disklabel64 8 ,
5984e3c62a3SThomas Nikolajsen.Xr gpt 8 ,
5995025869bSSascha Wildner.Xr hammer 8 ,
6005025869bSSascha Wildner.Xr mount_hammer 8 ,
6015329a464SThomas Nikolajsen.Xr mount_null 8 ,
602aacaa523SThomas Nikolajsen.Xr newfs_hammer 8 ,
603aacaa523SThomas Nikolajsen.Xr periodic 8 ,
604aacaa523SThomas Nikolajsen.Xr sysctl 8
6055025869bSSascha Wildner.Rs
6065025869bSSascha Wildner.%A Matthew Dillon
6075025869bSSascha Wildner.%D June 2008
608738141e7SSascha Wildner.%O http://www.dragonflybsd.org/hammer/hammer.pdf
6095025869bSSascha Wildner.%T "The HAMMER Filesystem"
6105025869bSSascha Wildner.Re
611738141e7SSascha Wildner.Rs
612738141e7SSascha Wildner.%A Matthew Dillon
613738141e7SSascha Wildner.%D October 2008
614738141e7SSascha Wildner.%O http://www.dragonflybsd.org/hammer/nycbsdcon/
615738141e7SSascha Wildner.%T "Slideshow from NYCBSDCon 2008"
616738141e7SSascha Wildner.Re
6172b9eb799SSascha Wildner.Rs
6182b9eb799SSascha Wildner.%A Michael Neumann
6192b9eb799SSascha Wildner.%D January 2010
6202b9eb799SSascha Wildner.%O http://www.ntecs.de/sysarch09/HAMMER.pdf
621aacaa523SThomas Nikolajsen.%T "Slideshow for a presentation held at KIT (http://www.kit.edu)"
6222b9eb799SSascha Wildner.Re
623eab82c57SMatthew Dillon.Sh FILESYSTEM PERFORMANCE
624eab82c57SMatthew DillonThe
625eab82c57SMatthew Dillon.Nm
626eab82c57SMatthew Dillonfile system has a front-end which processes VNOPS and issues necessary
627eab82c57SMatthew Dillonblock reads from disk, and a back-end which handles meta-data updates
628a0ed9ee2SThomas Nikolajsenon-media and performs all meta-data write operations.
629a0ed9ee2SThomas NikolajsenBulk file write operations are handled by the front-end.
630eab82c57SMatthew DillonBecause
631eab82c57SMatthew Dillon.Nm
632eab82c57SMatthew Dillondefers meta-data updates virtually no meta-data read operations will be
633eab82c57SMatthew Dillonissued by the frontend while writing large amounts of data to the file system
634eab82c57SMatthew Dillonor even when creating new files or directories, and even though the
635eab82c57SMatthew Dillonkernel prioritizes reads over writes the fact that writes are cached by
636eab82c57SMatthew Dillonthe drive itself tends to lead to excessive priority given to writes.
637eab82c57SMatthew Dillon.Pp
638a0ed9ee2SThomas NikolajsenThere are four bioq sysctls, shown below with default values,
639a0ed9ee2SThomas Nikolajsenwhich can be adjusted to give reads a higher priority:
640eab82c57SMatthew Dillon.Bd -literal -offset indent
641eab82c57SMatthew Dillonkern.bioq_reorder_minor_bytes: 262144
642eab82c57SMatthew Dillonkern.bioq_reorder_burst_bytes: 3000000
643eab82c57SMatthew Dillonkern.bioq_reorder_minor_interval: 5
644eab82c57SMatthew Dillonkern.bioq_reorder_burst_interval: 60
645eab82c57SMatthew Dillon.Ed
646eab82c57SMatthew Dillon.Pp
647eab82c57SMatthew DillonIf a higher read priority is desired it is recommended that the
648aacaa523SThomas Nikolajsen.Va kern.bioq_reorder_minor_interval
649eab82c57SMatthew Dillonbe increased to 15, 30, or even 60, and the
650aacaa523SThomas Nikolajsen.Va kern.bioq_reorder_burst_bytes
651eab82c57SMatthew Dillonbe decreased to 262144 or 524288.
6525025869bSSascha Wildner.Sh HISTORY
6535025869bSSascha WildnerThe
6545025869bSSascha Wildner.Nm
6555025869bSSascha Wildnerfile system first appeared in
6565025869bSSascha Wildner.Dx 1.11 .
6575025869bSSascha Wildner.Sh AUTHORS
6585025869bSSascha Wildner.An -nosplit
6595025869bSSascha WildnerThe
6605025869bSSascha Wildner.Nm
6615025869bSSascha Wildnerfile system was designed and implemented by
662aacaa523SThomas Nikolajsen.An Matthew Dillon Aq dillon@backplane.com ,
663aacaa523SThomas Nikolajsendata deduplication was added by
664aacaa523SThomas Nikolajsen.An Ilya Dryomov .
6655025869bSSascha WildnerThis manual page was written by
666aacaa523SThomas Nikolajsen.An Sascha Wildner
667aacaa523SThomas Nikolajsenand updated by
668aacaa523SThomas Nikolajsen.An Thomas Nikolajsen .
669aacaa523SThomas Nikolajsen.Sh CAVEATS
670aacaa523SThomas NikolajsenData deduplication is considered experimental.
671