xref: /dflybsd-src/share/man/man5/hammer.5 (revision 92db1a3519a8f1d9fdc18e31b3a02d9a64598a06)
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.\"
32449a19acSTomohiro Kusumi.Dd July 7, 2017
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
106dbd4f600SAntonio Huete JimenezIn the unlikely case
107dbd4f600SAntonio Huete Jimenez.Nm
108dbd4f600SAntonio Huete Jimenezmount fails due redo recovery (stage 2 recovery) being corrupted, a
109dbd4f600SAntonio Huete Jimenezworkaround to skip this stage can be applied by setting the following tunable:
110dbd4f600SAntonio Huete Jimenez.Bd -literal -offset indent
111dbd4f600SAntonio Huete Jimenezvfs.hammer.skip_redo=<value>
112dbd4f600SAntonio Huete Jimenez.Ed
113dbd4f600SAntonio Huete Jimenez.Pp
114dbd4f600SAntonio Huete JimenezPossible values are:
115dbd4f600SAntonio Huete Jimenez.Bl -tag -width indent
116dbd4f600SAntonio Huete Jimenez.It 0
117dbd4f600SAntonio Huete JimenezRun redo recovery normally and fail to mount in the case of error (default).
118dbd4f600SAntonio Huete Jimenez.It 1
119dbd4f600SAntonio Huete JimenezRun redo recovery but continue mounting if an error appears.
120dbd4f600SAntonio Huete Jimenez.It 2
121dbd4f600SAntonio Huete JimenezCompletely bypass redo recovery.
122dbd4f600SAntonio Huete Jimenez.El
123dbd4f600SAntonio 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 ,
149242bc305STomohiro Kusumi.Cm volume-list ,
150242bc305STomohiro Kusumi.Cm volume-blkdevs ;
151aacaa523SThomas Nikolajsensee also
152aacaa523SThomas Nikolajsen.Xr newfs_hammer 8
1535329a464SThomas Nikolajsen.Ss Data Integrity Checking
1545329a464SThomas Nikolajsen.Nm
1555329a464SThomas Nikolajsenhas high focus on data integrity,
1565329a464SThomas NikolajsenCRC checks are made for all major structures and data.
1575329a464SThomas Nikolajsen.Nm
1585329a464SThomas Nikolajsensnapshots implements features to make data integrity checking easier:
159a0ed9ee2SThomas NikolajsenThe atime and mtime fields are locked to the ctime
160a0ed9ee2SThomas Nikolajsenfor files accessed via a snapshot.
1615329a464SThomas NikolajsenThe
1625329a464SThomas Nikolajsen.Fa st_dev
1635329a464SThomas Nikolajsenfield is based on the PFS
1645329a464SThomas Nikolajsen.Ar shared-uuid
1655329a464SThomas Nikolajsenand not on any real device.
166a0ed9ee2SThomas NikolajsenThis means that archiving the contents of a snapshot with e.g.\&
1675329a464SThomas Nikolajsen.Xr tar 1
1685329a464SThomas Nikolajsenand piping it to something like
1695329a464SThomas Nikolajsen.Xr md5 1
1705329a464SThomas Nikolajsenwill yield a consistent result.
1715329a464SThomas NikolajsenThe consistency is also retained on mirroring targets.
172aacaa523SThomas Nikolajsen.Ss Data Deduplication
173aacaa523SThomas NikolajsenTo save disk space data deduplication can be used.
174aacaa523SThomas NikolajsenData deduplication will identify data blocks which occur multiple times
175aacaa523SThomas Nikolajsenand only store one copy, multiple reference will be made to this copy.
176aacaa523SThomas Nikolajsen.Pp
177aacaa523SThomas NikolajsenRelated
178aacaa523SThomas Nikolajsen.Xr hammer 8
179aacaa523SThomas Nikolajsencommands:
180aacaa523SThomas Nikolajsen.Cm dedup ,
181aacaa523SThomas Nikolajsen.Cm dedup-simulate ,
182aacaa523SThomas Nikolajsen.Cm cleanup ,
183aacaa523SThomas Nikolajsen.Cm config
1845025869bSSascha Wildner.Ss Transaction IDs
1855025869bSSascha WildnerThe
1865025869bSSascha Wildner.Nm
187aacaa523SThomas Nikolajsenfile system uses 64-bit transaction ids to refer to historical
1885025869bSSascha Wildnerfile or directory data.
189aacaa523SThomas NikolajsenTransaction ids used by
190aacaa523SThomas Nikolajsen.Nm
191aacaa523SThomas Nikolajsenare monotonically increasing over time.
192aacaa523SThomas NikolajsenIn other words:
193aacaa523SThomas Nikolajsenwhen a transaction is made,
194aacaa523SThomas Nikolajsen.Nm
195aacaa523SThomas Nikolajsenwill always use higher transaction ids for following transactions.
196aacaa523SThomas NikolajsenA transaction id is given in hexadecimal format
197aacaa523SThomas Nikolajsen.Li 0x016llx ,
1985025869bSSascha Wildnersuch as
1995025869bSSascha Wildner.Li 0x00000001061a8ba6 .
2000257b9daSSascha Wildner.Pp
2010257b9daSSascha WildnerRelated
2020257b9daSSascha Wildner.Xr hammer 8
2030257b9daSSascha Wildnercommands:
204aacaa523SThomas Nikolajsen.Cm snapshot ,
205aacaa523SThomas Nikolajsen.Cm snap ,
206aacaa523SThomas Nikolajsen.Cm snaplo ,
207aacaa523SThomas Nikolajsen.Cm snapq ,
208aacaa523SThomas Nikolajsen.Cm snapls ,
209aacaa523SThomas Nikolajsen.Cm synctid
210bc7579a1SSascha Wildner.Ss History & Snapshots
211bc7579a1SSascha WildnerHistory metadata on the media is written with every sync operation, so that
212bc7579a1SSascha Wildnerby default the resolution of a file's history is 30-60 seconds until the next
213bc7579a1SSascha Wildnerprune operation.
214aacaa523SThomas NikolajsenPrior versions of files and directories are generally accessible by appending
215aacaa523SThomas Nikolajsen.Ql @@
216aacaa523SThomas Nikolajsenand a transaction id to the name.
217bc7579a1SSascha WildnerThe common way of accessing history, however, is by taking snapshots.
218bc7579a1SSascha Wildner.Pp
219bc7579a1SSascha WildnerSnapshots are softlinks to prior versions of directories and their files.
220e328ac93SSascha WildnerTheir data will be retained across prune operations for as long as the
221bc7579a1SSascha Wildnersoftlink exists.
222bc7579a1SSascha WildnerRemoving the softlink enables the file system to reclaim the space
223bc7579a1SSascha Wildneragain upon the next prune & reblock operations.
224aacaa523SThomas NikolajsenIn
225aacaa523SThomas Nikolajsen.Nm
226aacaa523SThomas NikolajsenVersion 3+ snapshots are also maintained as file system meta-data.
2270257b9daSSascha Wildner.Pp
2280257b9daSSascha WildnerRelated
2290257b9daSSascha Wildner.Xr hammer 8
2300257b9daSSascha Wildnercommands:
231aacaa523SThomas Nikolajsen.Cm cleanup ,
232aacaa523SThomas Nikolajsen.Cm history ,
233aacaa523SThomas Nikolajsen.Cm snapshot ,
234aacaa523SThomas Nikolajsen.Cm snap ,
235aacaa523SThomas Nikolajsen.Cm snaplo ,
236aacaa523SThomas Nikolajsen.Cm snapq ,
237aacaa523SThomas Nikolajsen.Cm snaprm ,
238aacaa523SThomas Nikolajsen.Cm snapls ,
239aacaa523SThomas Nikolajsen.Cm config ,
240aacaa523SThomas Nikolajsen.Cm viconfig ;
241f704fe91SThomas Nikolajsensee also
242f704fe91SThomas Nikolajsen.Xr undo 1
243f704fe91SThomas Nikolajsen.Ss Pruning & Reblocking
244bc7579a1SSascha WildnerPruning is the act of deleting file system history.
245a0ed9ee2SThomas NikolajsenBy default only history used by the given snapshots
246a0ed9ee2SThomas Nikolajsenand history from after the latest snapshot will be retained.
247a0ed9ee2SThomas NikolajsenBy setting the per PFS parameter
248a0ed9ee2SThomas Nikolajsen.Cm prune-min ,
249a0ed9ee2SThomas Nikolajsenhistory is guaranteed to be saved at least this time interval.
250bc7579a1SSascha WildnerAll other history is deleted.
251f704fe91SThomas NikolajsenReblocking will reorder all elements and thus defragment the file system and
252f704fe91SThomas Nikolajsenfree space for reuse.
253f704fe91SThomas NikolajsenAfter pruning a file system must be reblocked to recover all available space.
2545329a464SThomas NikolajsenReblocking is needed even when using the
255aacaa523SThomas Nikolajsen.Cm nohistory
2565329a464SThomas Nikolajsen.Xr mount_hammer 8
257a0ed9ee2SThomas Nikolajsenoption or
258a0ed9ee2SThomas Nikolajsen.Xr chflags 1
259a0ed9ee2SThomas Nikolajsenflag.
2600257b9daSSascha Wildner.Pp
2610257b9daSSascha WildnerRelated
2620257b9daSSascha Wildner.Xr hammer 8
2630257b9daSSascha Wildnercommands:
264aacaa523SThomas Nikolajsen.Cm cleanup ,
265aacaa523SThomas Nikolajsen.Cm snapshot ,
266aacaa523SThomas Nikolajsen.Cm prune ,
267aacaa523SThomas Nikolajsen.Cm prune-everything ,
268aacaa523SThomas Nikolajsen.Cm rebalance ,
269aacaa523SThomas Nikolajsen.Cm reblock ,
270aacaa523SThomas Nikolajsen.Cm reblock-btree ,
271aacaa523SThomas Nikolajsen.Cm reblock-inodes ,
272aacaa523SThomas Nikolajsen.Cm reblock-dirs ,
273aacaa523SThomas Nikolajsen.Cm reblock-data
274aacaa523SThomas Nikolajsen.Ss Pseudo-Filesystems (PFSs)
275aacaa523SThomas NikolajsenA pseudo-filesystem, PFS for short, is a sub file system in a
276aacaa523SThomas Nikolajsen.Nm
277aacaa523SThomas Nikolajsenfile system.
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
289449a19acSTomohiro KusumiA non-root 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.
330242bc305STomohiro Kusumi.Nm
331242bc305STomohiro Kusumidoes not support multi-master clustering and mirroring.
332aacaa523SThomas Nikolajsen.Pp
333aacaa523SThomas NikolajsenRelated
334aacaa523SThomas Nikolajsen.Xr hammer 8
335aacaa523SThomas Nikolajsencommands:
336aacaa523SThomas Nikolajsen.Cm mirror-copy ,
337aacaa523SThomas Nikolajsen.Cm mirror-stream ,
338aacaa523SThomas Nikolajsen.Cm mirror-read ,
339aacaa523SThomas Nikolajsen.Cm mirror-read-stream ,
340aacaa523SThomas Nikolajsen.Cm mirror-write ,
341aacaa523SThomas Nikolajsen.Cm mirror-dump
342aacaa523SThomas Nikolajsen.Ss Fsync Flush Modes
343aacaa523SThomas NikolajsenThe
344aacaa523SThomas Nikolajsen.Nm
345aacaa523SThomas Nikolajsenfile system implements several different
346aacaa523SThomas Nikolajsen.Fn fsync
347aacaa523SThomas Nikolajsenflush modes, the mode used is set via the
348aacaa523SThomas Nikolajsen.Va vfs.hammer.flush_mode
349aacaa523SThomas Nikolajsensysctl, see
350aacaa523SThomas Nikolajsen.Xr hammer 8
351aacaa523SThomas Nikolajsenfor details.
352aacaa523SThomas Nikolajsen.Ss Unlimited Number of Files and Links
353aacaa523SThomas NikolajsenThere is no limit on the number of files or links in a
354aacaa523SThomas Nikolajsen.Nm
355aacaa523SThomas Nikolajsenfile system, apart from available disk space.
3565329a464SThomas Nikolajsen.Ss NFS Export
3575329a464SThomas Nikolajsen.Nm
3585329a464SThomas Nikolajsenfile systems support NFS export.
359cb9cae46SThomas NikolajsenNFS export of PFSs is done using
360cb9cae46SThomas Nikolajsen.Nm null
361aacaa523SThomas Nikolajsenmounts (for file/directory in root PFS
362aacaa523SThomas Nikolajsen.Nm null
363aacaa523SThomas Nikolajsenmount is not needed).
364738141e7SSascha WildnerFor example, to export the PFS
3655329a464SThomas Nikolajsen.Pa /hammer/pfs/data ,
366738141e7SSascha Wildnercreate a
367cb9cae46SThomas Nikolajsen.Nm null
368cb9cae46SThomas Nikolajsenmount, e.g.\& to
3695329a464SThomas Nikolajsen.Pa /hammer/data
3705329a464SThomas Nikolajsenand export the latter path.
3715329a464SThomas Nikolajsen.Pp
3725329a464SThomas NikolajsenDon't export a directory containing a PFS (e.g.\&
3735329a464SThomas Nikolajsen.Pa /hammer/pfs
3745329a464SThomas Nikolajsenabove).
3755329a464SThomas NikolajsenOnly
3765329a464SThomas Nikolajsen.Nm null
3775329a464SThomas Nikolajsenmount for PFS root
3785329a464SThomas Nikolajsen(e.g.\&
3795329a464SThomas Nikolajsen.Pa /hammer/data
380aacaa523SThomas Nikolajsenabove) should be exported (subdirectory may be escaped if exported).
381aacaa523SThomas Nikolajsen.Ss File System Versions
382aacaa523SThomas NikolajsenAs new features have been introduced to
383aacaa523SThomas Nikolajsen.Nm
384aacaa523SThomas Nikolajsena version number has been bumped.
385aacaa523SThomas NikolajsenEach
386aacaa523SThomas Nikolajsen.Nm
387aacaa523SThomas Nikolajsenfile system has a version, which can be upgraded to support new features.
388aacaa523SThomas Nikolajsen.Pp
389aacaa523SThomas NikolajsenRelated
390aacaa523SThomas Nikolajsen.Xr hammer 8
391aacaa523SThomas Nikolajsencommands:
392aacaa523SThomas Nikolajsen.Cm version ,
393aacaa523SThomas Nikolajsen.Cm version-upgrade ;
394aacaa523SThomas Nikolajsensee also
395aacaa523SThomas Nikolajsen.Xr newfs_hammer 8
396ab3617eeSSascha Wildner.Sh EXAMPLES
3974e3c62a3SThomas Nikolajsen.Ss Preparing the File System
398ab3617eeSSascha WildnerTo create and mount a
399ab3617eeSSascha Wildner.Nm
400ab3617eeSSascha Wildnerfile system use the
401ab3617eeSSascha Wildner.Xr newfs_hammer 8
402ab3617eeSSascha Wildnerand
403ab3617eeSSascha Wildner.Xr mount_hammer 8
404ab3617eeSSascha Wildnercommands.
405ab3617eeSSascha WildnerNote that all
406ab3617eeSSascha Wildner.Nm
407ab3617eeSSascha Wildnerfile systems must have a unique name on a per-machine basis.
4085329a464SThomas Nikolajsen.Bd -literal -offset indent
409738141e7SSascha Wildnernewfs_hammer -L HOME /dev/ad0s1d
410ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /home
411ab3617eeSSascha Wildner.Ed
412ab3617eeSSascha Wildner.Pp
413cd8f292bSSascha WildnerSimilarly, multi volume file systems can be created and mounted by
414cd8f292bSSascha Wildnerspecifying additional arguments.
4155329a464SThomas Nikolajsen.Bd -literal -offset indent
416738141e7SSascha Wildnernewfs_hammer -L MULTIHOME /dev/ad0s1d /dev/ad1s1d
417ab3617eeSSascha Wildnermount_hammer /dev/ad0s1d /dev/ad1s1d /home
418ab3617eeSSascha Wildner.Ed
419ab3617eeSSascha Wildner.Pp
420ab3617eeSSascha WildnerOnce created and mounted,
421ab3617eeSSascha Wildner.Nm
422e0331f4fSSascha Wildnerfile systems need periodic clean up making snapshots, pruning and reblocking,
4235329a464SThomas Nikolajsenin order to have access to history and file system not to fill up.
4245329a464SThomas NikolajsenFor this it is recommended to use the
4255329a464SThomas Nikolajsen.Xr hammer 8
426aacaa523SThomas Nikolajsen.Cm cleanup
427e0331f4fSSascha Wildnermetacommand.
428738141e7SSascha Wildner.Pp
429e0331f4fSSascha WildnerBy default,
430e0331f4fSSascha Wildner.Dx
431e0331f4fSSascha Wildneris set up to run
432aacaa523SThomas Nikolajsen.Nm hammer Cm cleanup
433e0331f4fSSascha Wildnernightly via
434e0331f4fSSascha Wildner.Xr periodic 8 .
4355329a464SThomas Nikolajsen.Pp
436738141e7SSascha WildnerIt is also possible to perform these operations individually via
437738141e7SSascha Wildner.Xr crontab 5 .
4385329a464SThomas NikolajsenFor example, to reblock the
4394e3c62a3SThomas Nikolajsen.Pa /home
4404e3c62a3SThomas Nikolajsenfile system every night at 2:15 for up to 5 minutes:
4415329a464SThomas Nikolajsen.Bd -literal -offset indent
442738141e7SSascha Wildner15 2 * * * hammer -c /var/run/HOME.reblock -t 300 reblock /home \e
4435329a464SThomas Nikolajsen	>/dev/null 2>&1
444ab3617eeSSascha Wildner.Ed
445e328ac93SSascha Wildner.Ss Snapshots
446e328ac93SSascha WildnerThe
447e328ac93SSascha Wildner.Xr hammer 8
448e328ac93SSascha Wildnerutility's
449aacaa523SThomas Nikolajsen.Cm snapshot
450e328ac93SSascha Wildnercommand provides several ways of taking snapshots.
451e328ac93SSascha WildnerThey all assume a directory where snapshots are kept.
4525329a464SThomas Nikolajsen.Bd -literal -offset indent
453e328ac93SSascha Wildnermkdir /snaps
454e328ac93SSascha Wildnerhammer snapshot /home /snaps/snap1
4550257b9daSSascha Wildner(...after some changes in /home...)
4560257b9daSSascha Wildnerhammer snapshot /home /snaps/snap2
4570257b9daSSascha Wildner.Ed
458bc7579a1SSascha Wildner.Pp
459bc7579a1SSascha WildnerThe softlinks in
460bc7579a1SSascha Wildner.Pa /snaps
461bc7579a1SSascha Wildnerpoint to the state of the
462bc7579a1SSascha Wildner.Pa /home
463bc7579a1SSascha Wildnerdirectory at the time each snapshot was taken, and could now be used to copy
464bc7579a1SSascha Wildnerthe data somewhere else for backup purposes.
465738141e7SSascha Wildner.Pp
466738141e7SSascha WildnerBy default,
467738141e7SSascha Wildner.Dx
468738141e7SSascha Wildneris set up to create nightly snapshots of all
469738141e7SSascha Wildner.Nm
470738141e7SSascha Wildnerfile systems via
471738141e7SSascha Wildner.Xr periodic 8
472738141e7SSascha Wildnerand to keep them for 60 days.
4730257b9daSSascha Wildner.Ss Pruning
4740257b9daSSascha WildnerA snapshot directory is also the argument to the
475aacaa523SThomas Nikolajsen.Xr hammer 8
476aacaa523SThomas Nikolajsen.Cm prune
477bc7579a1SSascha Wildnercommand which frees historical data from the file system that is not
478aacaa523SThomas Nikolajsenpointed to by any snapshot link and is not from after the latest snapshot
479aacaa523SThomas Nikolajsenand is older than
480aacaa523SThomas Nikolajsen.Cm prune-min .
4815329a464SThomas Nikolajsen.Bd -literal -offset indent
4820257b9daSSascha Wildnerrm /snaps/snap1
4830257b9daSSascha Wildnerhammer prune /snaps
4840257b9daSSascha Wildner.Ed
4850257b9daSSascha Wildner.Ss Mirroring
486aacaa523SThomas NikolajsenMirroring is set up using
487aacaa523SThomas Nikolajsen.Nm
488aacaa523SThomas Nikolajsenpseudo-filesystems (PFSs).
4890257b9daSSascha WildnerTo associate the slave with the master its shared UUID should be set to
4900257b9daSSascha Wildnerthe master's shared UUID as output by the
491aacaa523SThomas Nikolajsen.Nm hammer Cm pfs-master
4920257b9daSSascha Wildnercommand.
4935329a464SThomas Nikolajsen.Bd -literal -offset indent
4945329a464SThomas Nikolajsenhammer pfs-master /home/pfs/master
4955329a464SThomas Nikolajsenhammer pfs-slave /home/pfs/slave shared-uuid=<master's shared uuid>
4960257b9daSSascha Wildner.Ed
4970257b9daSSascha Wildner.Pp
4980257b9daSSascha WildnerThe
499cb9cae46SThomas Nikolajsen.Pa /home/pfs/slave
5000257b9daSSascha Wildnerlink is unusable for as long as no mirroring operation has taken place.
5010257b9daSSascha Wildner.Pp
5020257b9daSSascha WildnerTo mirror the master's data, either pipe a
503aacaa523SThomas Nikolajsen.Cm mirror-read
5040257b9daSSascha Wildnercommand into a
505aacaa523SThomas Nikolajsen.Cm mirror-write
5060257b9daSSascha Wildneror, as a short-cut, use the
507aacaa523SThomas Nikolajsen.Cm mirror-copy
5080257b9daSSascha Wildnercommand (which works across a
5090257b9daSSascha Wildner.Xr ssh 1
5100257b9daSSascha Wildnerconnection as well).
511cb9cae46SThomas NikolajsenInitial mirroring operation has to be done to the PFS path (as
512cb9cae46SThomas Nikolajsen.Xr mount_null 8
513cb9cae46SThomas Nikolajsencan't access it yet).
5145329a464SThomas Nikolajsen.Bd -literal -offset indent
515cb9cae46SThomas Nikolajsenhammer mirror-copy /home/pfs/master /home/pfs/slave
516cb9cae46SThomas Nikolajsen.Ed
517cb9cae46SThomas Nikolajsen.Pp
518aacaa523SThomas NikolajsenIt is also possible to have the target PFS auto created
519aacaa523SThomas Nikolajsenby just issuing the same
520aacaa523SThomas Nikolajsen.Cm mirror-copy
521aacaa523SThomas Nikolajsencommand, if the target PFS doesn't exist you will be prompted
522aacaa523SThomas Nikolajsenif you would like to create it.
523aacaa523SThomas NikolajsenYou can even omit the prompting by using the
524aacaa523SThomas Nikolajsen.Fl y
525aacaa523SThomas Nikolajsenflag:
526aacaa523SThomas Nikolajsen.Bd -literal -offset indent
527aacaa523SThomas Nikolajsenhammer -y mirror-copy /home/pfs/master /home/pfs/slave
528aacaa523SThomas Nikolajsen.Ed
529aacaa523SThomas Nikolajsen.Pp
530cb9cae46SThomas NikolajsenAfter this initial step
531cb9cae46SThomas Nikolajsen.Nm null
532cb9cae46SThomas Nikolajsenmount can be setup for
533cb9cae46SThomas Nikolajsen.Pa /home/pfs/slave .
534cb9cae46SThomas NikolajsenFurther operations can use
535cb9cae46SThomas Nikolajsen.Nm null
536cb9cae46SThomas Nikolajsenmounts.
537cb9cae46SThomas Nikolajsen.Bd -literal -offset indent
538cb9cae46SThomas Nikolajsenmount_null /home/pfs/master /home/master
539cb9cae46SThomas Nikolajsenmount_null /home/pfs/slave /home/slave
540cb9cae46SThomas Nikolajsen
5410257b9daSSascha Wildnerhammer mirror-copy /home/master /home/slave
542e328ac93SSascha Wildner.Ed
5435329a464SThomas Nikolajsen.Ss NFS Export
5445329a464SThomas NikolajsenTo NFS export from the
5455329a464SThomas Nikolajsen.Nm
5465329a464SThomas Nikolajsenfile system
5475329a464SThomas Nikolajsen.Pa /hammer
5485329a464SThomas Nikolajsenthe directory
5495329a464SThomas Nikolajsen.Pa /hammer/non-pfs
5505329a464SThomas Nikolajsenwithout PFSs, and the PFS
5515329a464SThomas Nikolajsen.Pa /hammer/pfs/data ,
552aacaa523SThomas Nikolajsenthe latter is
553aacaa523SThomas Nikolajsen.Nm null
554aacaa523SThomas Nikolajsenmounted to
5555329a464SThomas Nikolajsen.Pa /hammer/data .
5565329a464SThomas Nikolajsen.Pp
5575329a464SThomas NikolajsenAdd to
5585329a464SThomas Nikolajsen.Pa /etc/fstab
5595329a464SThomas Nikolajsen(see
5605329a464SThomas Nikolajsen.Xr fstab 5 ) :
5615329a464SThomas Nikolajsen.Bd -literal -offset indent
5625329a464SThomas Nikolajsen/hammer/pfs/data /hammer/data null rw
5635329a464SThomas Nikolajsen.Ed
5645329a464SThomas Nikolajsen.Pp
5655329a464SThomas NikolajsenAdd to
5665329a464SThomas Nikolajsen.Pa /etc/exports
5675329a464SThomas Nikolajsen(see
5685329a464SThomas Nikolajsen.Xr exports 5 ) :
5695329a464SThomas Nikolajsen.Bd -literal -offset indent
5705329a464SThomas Nikolajsen/hammer/non-pfs
5715329a464SThomas Nikolajsen/hammer/data
5725329a464SThomas Nikolajsen.Ed
573aacaa523SThomas Nikolajsen.Sh DIAGNOSTICS
574aacaa523SThomas Nikolajsen.Bl -diag
575aacaa523SThomas Nikolajsen.It "hammer: System has insuffient buffers to rebalance the tree.  nbuf < %d"
576aacaa523SThomas NikolajsenRebalancing a
577aacaa523SThomas Nikolajsen.Nm
578aacaa523SThomas NikolajsenPFS uses quite a bit of memory and
579aacaa523SThomas Nikolajsencan't be done on low memory systems.
580aacaa523SThomas NikolajsenIt has been reported to fail on 512MB systems.
581aacaa523SThomas NikolajsenRebalancing isn't critical for
582aacaa523SThomas Nikolajsen.Nm
583aacaa523SThomas Nikolajsenfile system operation;
584aacaa523SThomas Nikolajsenit is done by
585aacaa523SThomas Nikolajsen.Nm hammer
586aacaa523SThomas Nikolajsen.Cm rebalance ,
587aacaa523SThomas Nikolajsenoften as part of
588aacaa523SThomas Nikolajsen.Nm hammer
589aacaa523SThomas Nikolajsen.Cm cleanup .
590aacaa523SThomas Nikolajsen.El
5915025869bSSascha Wildner.Sh SEE ALSO
592a0ed9ee2SThomas Nikolajsen.Xr chflags 1 ,
5935329a464SThomas Nikolajsen.Xr md5 1 ,
5945329a464SThomas Nikolajsen.Xr tar 1 ,
5955025869bSSascha Wildner.Xr undo 1 ,
596a0ed9ee2SThomas Nikolajsen.Xr exports 5 ,
597738141e7SSascha Wildner.Xr ffs 5 ,
598a0ed9ee2SThomas Nikolajsen.Xr fstab 5 ,
5994e3c62a3SThomas Nikolajsen.Xr disklabel64 8 ,
6004e3c62a3SThomas Nikolajsen.Xr gpt 8 ,
6015025869bSSascha Wildner.Xr hammer 8 ,
6025025869bSSascha Wildner.Xr mount_hammer 8 ,
6035329a464SThomas Nikolajsen.Xr mount_null 8 ,
604aacaa523SThomas Nikolajsen.Xr newfs_hammer 8 ,
605aacaa523SThomas Nikolajsen.Xr periodic 8 ,
606aacaa523SThomas Nikolajsen.Xr sysctl 8
6075025869bSSascha Wildner.Rs
6085025869bSSascha Wildner.%A Matthew Dillon
6095025869bSSascha Wildner.%D June 2008
610*92db1a35SSascha Wildner.%U http://www.dragonflybsd.org/hammer/hammer.pdf
6115025869bSSascha Wildner.%T "The HAMMER Filesystem"
6125025869bSSascha Wildner.Re
613738141e7SSascha Wildner.Rs
614738141e7SSascha Wildner.%A Matthew Dillon
615738141e7SSascha Wildner.%D October 2008
616*92db1a35SSascha Wildner.%U http://www.dragonflybsd.org/presentations/nycbsdcon08/
617738141e7SSascha Wildner.%T "Slideshow from NYCBSDCon 2008"
618738141e7SSascha Wildner.Re
6192b9eb799SSascha Wildner.Rs
6202b9eb799SSascha Wildner.%A Michael Neumann
6212b9eb799SSascha Wildner.%D January 2010
622*92db1a35SSascha Wildner.%U http://www.ntecs.de/talks/HAMMER.pdf
623aacaa523SThomas Nikolajsen.%T "Slideshow for a presentation held at KIT (http://www.kit.edu)"
6242b9eb799SSascha Wildner.Re
625eab82c57SMatthew Dillon.Sh FILESYSTEM PERFORMANCE
626eab82c57SMatthew DillonThe
627eab82c57SMatthew Dillon.Nm
628eab82c57SMatthew Dillonfile system has a front-end which processes VNOPS and issues necessary
629eab82c57SMatthew Dillonblock reads from disk, and a back-end which handles meta-data updates
630a0ed9ee2SThomas Nikolajsenon-media and performs all meta-data write operations.
631a0ed9ee2SThomas NikolajsenBulk file write operations are handled by the front-end.
632eab82c57SMatthew DillonBecause
633eab82c57SMatthew Dillon.Nm
634eab82c57SMatthew Dillondefers meta-data updates virtually no meta-data read operations will be
635eab82c57SMatthew Dillonissued by the frontend while writing large amounts of data to the file system
636eab82c57SMatthew Dillonor even when creating new files or directories, and even though the
637eab82c57SMatthew Dillonkernel prioritizes reads over writes the fact that writes are cached by
638eab82c57SMatthew Dillonthe drive itself tends to lead to excessive priority given to writes.
639eab82c57SMatthew Dillon.Pp
640a0ed9ee2SThomas NikolajsenThere are four bioq sysctls, shown below with default values,
641a0ed9ee2SThomas Nikolajsenwhich can be adjusted to give reads a higher priority:
642eab82c57SMatthew Dillon.Bd -literal -offset indent
643eab82c57SMatthew Dillonkern.bioq_reorder_minor_bytes: 262144
644eab82c57SMatthew Dillonkern.bioq_reorder_burst_bytes: 3000000
645eab82c57SMatthew Dillonkern.bioq_reorder_minor_interval: 5
646eab82c57SMatthew Dillonkern.bioq_reorder_burst_interval: 60
647eab82c57SMatthew Dillon.Ed
648eab82c57SMatthew Dillon.Pp
649eab82c57SMatthew DillonIf a higher read priority is desired it is recommended that the
650aacaa523SThomas Nikolajsen.Va kern.bioq_reorder_minor_interval
651eab82c57SMatthew Dillonbe increased to 15, 30, or even 60, and the
652aacaa523SThomas Nikolajsen.Va kern.bioq_reorder_burst_bytes
653eab82c57SMatthew Dillonbe decreased to 262144 or 524288.
6545025869bSSascha Wildner.Sh HISTORY
6555025869bSSascha WildnerThe
6565025869bSSascha Wildner.Nm
6575025869bSSascha Wildnerfile system first appeared in
6585025869bSSascha Wildner.Dx 1.11 .
6595025869bSSascha Wildner.Sh AUTHORS
6605025869bSSascha Wildner.An -nosplit
6615025869bSSascha WildnerThe
6625025869bSSascha Wildner.Nm
6635025869bSSascha Wildnerfile system was designed and implemented by
664c616d378SFranco Fichtner.An Matthew Dillon Aq Mt dillon@backplane.com ,
665aacaa523SThomas Nikolajsendata deduplication was added by
666aacaa523SThomas Nikolajsen.An Ilya Dryomov .
6675025869bSSascha WildnerThis manual page was written by
668aacaa523SThomas Nikolajsen.An Sascha Wildner
669aacaa523SThomas Nikolajsenand updated by
670aacaa523SThomas Nikolajsen.An Thomas Nikolajsen .
671