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