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