summaryrefslogtreecommitdiffstats
path: root/upstream/opensuse-tumbleweed/man8/xfs_db.8
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--upstream/opensuse-tumbleweed/man8/xfs_db.82402
1 files changed, 2402 insertions, 0 deletions
diff --git a/upstream/opensuse-tumbleweed/man8/xfs_db.8 b/upstream/opensuse-tumbleweed/man8/xfs_db.8
new file mode 100644
index 00000000..f53ddd67
--- /dev/null
+++ b/upstream/opensuse-tumbleweed/man8/xfs_db.8
@@ -0,0 +1,2402 @@
+.TH xfs_db 8
+.SH NAME
+xfs_db \- debug an XFS filesystem
+.SH SYNOPSIS
+.B xfs_db
+[
+.B \-c
+.I cmd
+] ... [
+.BR \-i | r | x | F
+] [
+.B \-f
+] [
+.B \-l
+.I logdev
+] [
+.B \-p
+.I progname
+]
+.I device
+.br
+.B xfs_db \-V
+.SH DESCRIPTION
+.B xfs_db
+is used to examine an XFS filesystem. Under rare circumstances it can also
+be used to modify an XFS filesystem, but that task is normally left to
+.BR xfs_repair (8)
+or to scripts such as
+.BR xfs_admin (8)
+that run
+.BR xfs_db .
+.PP
+.SH OPTIONS
+.TP
+.BI \-c " cmd"
+.B xfs_db
+commands may be run interactively (the default) or as arguments
+on the command line. Multiple
+.B \-c
+arguments may be given. The commands are run in the sequence given,
+then the program exits.
+.TP
+.B \-f
+Specifies that the filesystem image to be processed is stored in a
+regular file at
+.I device
+(see the
+.BR mkfs.xfs "(8) " -d
+.I file
+option).
+This might happen if an image copy of a filesystem has been made into
+an ordinary file with
+.BR xfs_copy (8).
+.TP
+.B \-F
+Specifies that we want to continue even if the superblock magic is not
+correct. For use in
+.BR xfs_metadump .
+.TP
+.B \-i
+Allows execution on a mounted filesystem, provided it is mounted read-only.
+Useful for shell scripts
+which must only operate on filesystems in a guaranteed consistent state
+(either unmounted or mounted read-only). These semantics are slightly
+different to that of the
+.B -r
+option.
+.TP
+.BI \-l " logdev"
+Specifies the device where the filesystems external log resides.
+Only for those filesystems which use an external log. See the
+.BR mkfs.xfs "(8) " \-l
+option, and refer to
+.BR xfs (5)
+for a detailed description of the XFS log.
+.TP
+.BI \-p " progname"
+Set the program name to
+.I progname
+for prompts and some error messages, the default value is
+.BR xfs_db .
+.TP
+.B -r
+Open
+.I device
+or
+.I filename
+read-only. This option is required if the filesystem is mounted.
+It is only necessary to omit this flag if a command that changes data
+.RB ( write ", " blocktrash ", " crc )
+is to be used.
+.TP
+.B \-x
+Specifies expert mode.
+This enables the
+.RB ( write ", " blocktrash ", " crc
+invalidate/revalidate) commands.
+.TP
+.B \-V
+Prints the version number and exits.
+.SH CONCEPTS
+.B xfs_db
+commands can be broken up into two classes. Most commands are for
+the navigation and display of data structures in the filesystem.
+Other commands are for scanning the filesystem in some way.
+.PP
+Commands which are used to navigate the filesystem structure take arguments
+which reflect the names of filesystem structure fields.
+There can be multiple field names separated by dots when the underlying
+structures are nested, as in C.
+The field names can be indexed (as an array index)
+if the underlying field is an array.
+The array indices can be specified as a range, two numbers separated by a dash.
+.PP
+.B xfs_db
+maintains a current address in the filesystem.
+The granularity of the address is a filesystem structure.
+This can be a filesystem block,
+an inode or quota (smaller than a filesystem block),
+or a directory block (could be larger than a filesystem block).
+There are a variety of commands to set the current address.
+Associated with the current address is the current data type,
+which is the structural type of this data.
+Commands which follow the structure of the filesystem always set the type
+as well as the address.
+Commands which examine pieces of an individual file (inode) need the current
+inode to be set, this is done with the
+.B inode
+command.
+.PP
+The current address/type information is actually maintained in a
+stack that can be explicitly manipulated with the
+.BR push ", " pop ", and " stack
+commands.
+This allows for easy examination of a nested filesystem structure.
+Also, the last several locations visited are stored in a ring buffer
+which can be manipulated with the
+.BR forward ", " back ", and " ring
+commands.
+.PP
+XFS filesystems are divided into a small number of allocation groups.
+.B xfs_db
+maintains a notion of the current allocation group which is
+manipulated by some commands. The initial allocation group is 0.
+.SH COMMANDS
+.PP
+Many commands have extensive online help. Use the
+.B help
+command for more details on any command.
+.TP
+.B a
+See the
+.B addr
+command.
+.TP
+.BI ablock " filoff"
+Set current address to the offset
+.I filoff
+(a filesystem block number) in the attribute area of the current inode.
+.TP
+.BI "addr [" field-expression ]
+Set current address to the value of the
+.IR field-expression .
+This is used to "follow" a reference in one structure to the object
+being referred to. If no argument is given, the current address is printed.
+.TP
+.BI "agf [" agno ]
+Set current address to the AGF block for allocation group
+.IR agno .
+If no argument is given, use the current allocation group.
+.TP
+.BI "agfl [" agno ]
+Set current address to the AGFL block for allocation group
+.IR agno .
+If no argument is given, use the current allocation group.
+.TP
+.BI "agi [" agno ]
+Set current address to the AGI block for allocation group
+.IR agno .
+If no argument is given, use the current allocation group.
+.TP
+.BI "agresv [" agno ]
+Displays the length, free block count, per-AG reservation size, and per-AG
+reservation usage for a given AG.
+If no argument is given, display information for all AGs.
+.TP
+.BI "attr_remove [\-r|\-u|\-s] [\-n] " name
+Remove the specified extended attribute from the current file.
+.RS 1.0i
+.TP 0.4i
+.B \-r
+Sets the attribute in the root namespace.
+Only one namespace option can be specified.
+.TP
+.B \-u
+Sets the attribute in the user namespace.
+Only one namespace option can be specified.
+.TP
+.B \-s
+Sets the attribute in the secure namespace.
+Only one namespace option can be specified.
+.TP
+.B \-n
+Do not enable 'noattr2' mode on V4 filesystems.
+.RE
+.TP
+.BI "attr_set [\-r|\-u|\-s] [\-n] [\-R|\-C] [\-v " namelen "] " name
+Sets an extended attribute on the current file with the given name.
+.RS 1.0i
+.TP 0.4i
+.B \-r
+Sets the attribute in the root namespace.
+Only one namespace option can be specified.
+.TP
+.B \-u
+Sets the attribute in the user namespace.
+Only one namespace option can be specified.
+.TP
+.B \-s
+Sets the attribute in the secure namespace.
+Only one namespace option can be specified.
+.TP
+.B \-n
+Do not enable 'noattr2' mode on V4 filesystems.
+.TP
+.B \-R
+Replace the attribute.
+The command will fail if the attribute does not already exist.
+.TP
+.B \-C
+Create the attribute.
+The command will fail if the attribute already exists.
+.TP
+.B \-v
+Set the attribute value to a string of this length containing the letter 'v'.
+.RE
+.TP
+.B b
+See the
+.B back
+command.
+.TP
+.B back
+Move to the previous location in the position ring.
+.TP
+.B blockfree
+Free block usage information collected by the last execution of the
+.B blockget
+command. This must be done before another
+.B blockget
+command can be given, presumably with different arguments than the previous one.
+.TP
+.BI "blockget [\-npvs] [\-b " bno "] ... [\-i " ino "] ..."
+Get block usage and check filesystem consistency.
+The information is saved for use by a subsequent
+.BR blockuse ", " ncheck ", or " blocktrash
+command.
+.RS 1.0i
+.TP 0.4i
+.B \-b
+is used to specify filesystem block numbers about which verbose
+information should be printed.
+.TP
+.B \-i
+is used to specify inode numbers about which verbose information
+should be printed.
+.TP
+.B \-n
+is used to save pathnames for inodes visited, this is used to support the
+.BR xfs_ncheck (8)
+command. It also means that pathnames will be printed for inodes that have
+problems. This option uses a lot of memory so is not enabled by default.
+.TP
+.B \-p
+causes error messages to be prefixed with the filesystem name being
+processed. This is useful if several copies of
+.B xfs_db
+are run in parallel.
+.TP
+.B \-s
+restricts output to severe errors only. This is useful if the output is
+too long otherwise.
+.TP
+.B \-v
+enables verbose output. Messages will be printed for every block and
+inode processed.
+.RE
+.TP
+.BI "blocktrash [-z] [\-o " offset "] [\-n " count "] [\-x " min "] [\-y " max "] [\-s " seed "] [\-0|1|2|3] [\-t " type "] ..."
+Trash randomly selected filesystem metadata blocks.
+Trashing occurs to randomly selected bits in the chosen blocks.
+This command is available only in debugging versions of
+.BR xfs_db .
+It is useful for testing
+.BR xfs_repair "(8).
+.RS 1.0i
+.TP 0.4i
+.BR \-0 " | " -1 " | " -2 " | " -3
+These are used to set the operating mode for
+.BR blocktrash .
+Only one can be used:
+.B \-0
+changed bits are cleared;
+.B \-1
+changed bits are set;
+.B -2
+changed bits are inverted;
+.B -3
+changed bits are randomized.
+.TP
+.B \-n
+supplies the
+.I count
+of block-trashings to perform (default 1).
+.TP
+.B \-o
+supplies the bit
+.I offset
+at which to start trashing the block. If the value is preceded by a '+', the
+trashing will start at a randomly chosen offset that is larger than the value
+supplied. The default is to randomly choose an offset anywhere in the block.
+.TP
+.B \-s
+supplies a
+.I seed
+to the random processing.
+.TP
+.B \-t
+gives a
+.I type
+of blocks to be selected for trashing. Multiple
+.B \-t
+options may be given. If no
+.B \-t
+options are given then all metadata types can be trashed.
+.TP
+.B \-x
+sets the
+.I minimum
+size of bit range to be trashed. The default value is 1.
+.TP
+.B \-y
+sets the
+.I maximum
+size of bit range to be trashed. The default value is 1024.
+.TP
+.B \-z
+trashes the block at the top of the stack. It is not necessary to
+run
+.BI blockget
+if this option is supplied.
+.RE
+.TP
+.BI "blockuse [\-n] [\-c " count ]
+Print usage for current filesystem block(s).
+For each block, the type and (if any) inode are printed.
+.RS 1.0i
+.TP 0.4i
+.B \-c
+specifies a
+.I count
+of blocks to process. The default value is 1 (the current block only).
+.TP
+.B \-n
+specifies that file names should be printed. The prior
+.B blockget
+command must have also specified the
+.B \-n
+option.
+.RE
+.TP
+.BI "bmap [\-a] [\-d] [" block " [" len ]]
+Show the block map for the current inode.
+The map display can be restricted to an area of the file with the
+.I block
+and
+.I len
+arguments. If
+.I block
+is given and
+.I len
+is omitted then 1 is assumed for len.
+.IP
+The
+.B \-a
+and
+.B \-d
+options are used to select the attribute or data
+area of the inode, if neither option is given then both areas are shown.
+.TP
+.B btdump [-a] [-i]
+If the cursor points to a btree node, dump the btree from that block downward.
+If instead the cursor points to an inode, dump the data fork block mapping btree if there is one.
+If the cursor points to a directory or extended attribute btree node, dump that.
+By default, only records stored in the btree are dumped.
+.RS 1.0i
+.TP 0.4i
+.B \-a
+If the cursor points at an inode, dump the extended attribute block mapping btree, if present.
+.TP
+.B \-i
+Dump all keys and pointers in intermediate btree nodes, and all records in leaf btree nodes.
+.RE
+.TP
+.BI "btheight [\-b " blksz "] [\-n " recs "] [\-w " max "|" min "|" absmax "] btree types..."
+For a given number of btree records and a btree type, report the number of
+records and blocks for each level of the btree, and the total number of blocks.
+The btree type must be given after the options.
+
+A raw btree geometry can be provided in the format
+"record_bytes:key_bytes:ptr_bytes:header_type", where header_type is one of
+"short", "long", "shortcrc", or "longcrc".
+
+The supported btree types are:
+.IR bnobt ,
+.IR cntbt ,
+.IR inobt ,
+.IR finobt ,
+.IR bmapbt ,
+.IR refcountbt ,
+and
+.IR rmapbt .
+The magic value
+.I all
+can be used to walk through all btree types.
+
+Options are as follows:
+.RS 1.0i
+.TP 0.4i
+.B \-b
+is used to override the btree block size.
+The default is the filesystem block size.
+.TP
+.B \-n
+is used to specify the number of records to store.
+This argument is required.
+.TP
+.B \-w absmax
+shows the maximum possible height for the given btree types.
+.TP
+.B \-w max
+shows only the best case scenario, which is when the btree blocks are
+maximally loaded.
+.TP
+.B \-w min
+shows only the worst case scenario, which is when the btree blocks are
+half full.
+.RE
+.TP
+.B check
+See the
+.B blockget
+command.
+.TP
+.BI "convert " "type number" " [" "type number" "] ... " type
+Convert from one address form to another.
+The known
+.IR type s,
+with alternate names, are:
+.RS 1.0i
+.PD 0
+.HP
+.B agblock
+or
+.B agbno
+(filesystem block within an allocation group)
+.HP
+.B agino
+or
+.B aginode
+(inode number within an allocation group)
+.HP
+.B agnumber
+or
+.B agno
+(allocation group number)
+.HP
+.B bboff
+or
+.B daddroff
+(byte offset in a
+.BR daddr )
+.HP
+.B blkoff
+or
+.B fsboff or
+.B agboff
+(byte offset in a
+.B agblock
+or
+.BR fsblock )
+.HP
+.B byte
+or
+.B fsbyte
+(byte address in filesystem)
+.HP
+.B daddr
+or
+.B bb
+(disk address, 512-byte blocks)
+.HP
+.B fsblock
+or
+.B fsb
+or
+.B fsbno
+(filesystem block, see the
+.B fsblock
+command)
+.HP
+.B ino
+or
+.B inode
+(inode number)
+.HP
+.B inoidx
+or
+.B offset
+(index of inode in filesystem block)
+.HP
+.B inooff
+or
+.B inodeoff
+(byte offset in inode)
+.PD
+.RE
+.IP
+Only conversions that "make sense" are allowed.
+The compound form (with more than three arguments) is useful for
+conversions such as
+.B convert agno
+.I ag
+.B agbno
+.I agb
+.BR fsblock .
+.TP
+.B crc [\-i|\-r|\-v]
+Invalidates, revalidates, or validates the CRC (checksum)
+field of the current structure, if it has one.
+This command is available only on CRC-enabled filesystems.
+With no argument, validation is performed.
+Each command will display the resulting CRC value and state.
+.RS 1.0i
+.TP 0.4i
+.B \-i
+Invalidate the structure's CRC value (incrementing it by one),
+and write it to disk.
+.TP
+.B \-r
+Recalculate the current structure's correct CRC value, and write it to disk.
+.TP
+.B \-v
+Validate and display the current value and state of the structure's CRC.
+.RE
+.TP
+.BI "daddr [" d ]
+Set current address to the daddr (512 byte block) given by
+.IR d .
+If no value for
+.I d
+is given, the current address is printed, expressed as a daddr.
+The type is set to
+.B data
+(uninterpreted).
+.TP
+.BI dblock " filoff"
+Set current address to the offset
+.I filoff
+(a filesystem block number) in the data area of the current inode.
+.TP
+.BI "debug [" flagbits ]
+Set debug option bits. These are used for debugging
+.BR xfs_db .
+If no value is given for
+.IR flagbits ,
+print the current debug option bits. These are for the use of the implementor.
+.TP
+.BI "dquot [" \-g | \-p | \-u ] " id"
+Set current address to a group, project or user quota block for the given ID. Defaults to user quota.
+.TP
+.BI "dump_iunlinked [-a " agno " ] [-b " bucket " ] [-q] [-v]"
+Dump the contents of unlinked buckets.
+
+Options include:
+.RS 1.0i
+.TP 0.4i
+.B \-a
+Print only this AG's unlinked buckets.
+.TP 0.4i
+.B \-b
+Print only this bucket within each AGI.
+.TP 0.4i
+.B \-q
+Only print the essentials.
+.TP 0.4i
+.B \-v
+Print resource usage of each file on the unlinked lists.
+.RE
+.TP
+.BI "echo [" arg "] ..."
+Echo the arguments to the output.
+.TP
+.B f
+See the
+.B forward
+command.
+.TP
+.B forward
+Move forward to the next entry in the position ring.
+.TP
+.B frag [\-adflqRrv]
+Get file fragmentation data. This prints information about fragmentation
+of file data in the filesystem (as opposed to fragmentation of freespace,
+for which see the
+.B freesp
+command). Every file in the filesystem is examined to see how far from ideal
+its extent mappings are. A summary is printed giving the totals.
+.RS 1.0i
+.TP 0.4i
+.B \-v
+sets verbosity, every inode has information printed for it.
+The remaining options select which inodes and extents are examined.
+If no options are given then all are assumed set,
+otherwise just those given are enabled.
+.TP
+.B \-a
+enables processing of attribute data.
+.TP
+.B \-d
+enables processing of directory data.
+.TP
+.B \-f
+enables processing of regular file data.
+.TP
+.B \-l
+enables processing of symbolic link data.
+.TP
+.B \-q
+enables processing of quota file data.
+.TP
+.B \-R
+enables processing of realtime control file data.
+.TP
+.B \-r
+enables processing of realtime file data.
+.RE
+.TP
+.BI "freesp [\-bcds] [\-A " alignment "] [\-a " ag "] ... [\-e " i "] [\-h " h1 "] ... [\-m " m ]
+Summarize free space for the filesystem. The free blocks are examined
+and totalled, and displayed in the form of a histogram, with a count
+of extents in each range of free extent sizes.
+.RS 1.0i
+.TP 0.4i
+.B \-A
+reports only free extents with starting blocks aligned to
+.I alignment
+blocks.
+.TP
+.B \-a
+adds
+.I ag
+to the list of allocation groups to be processed. If no
+.B \-a
+options are given then all allocation groups are processed.
+.TP
+.B \-b
+specifies that the histogram buckets are binary-sized, with the starting
+sizes being the powers of 2.
+.TP
+.B \-c
+specifies that
+.B freesp
+will search the by-size (cnt) space Btree instead of the default
+by-block (bno) space Btree.
+.TP
+.B \-d
+specifies that every free extent will be displayed.
+.TP
+.B \-e
+specifies that the histogram buckets are
+equal-sized, with the size specified as
+.IR i .
+.TP
+.B \-h
+specifies a starting block number for a histogram bucket as
+.IR h1 .
+Multiple
+.BR \-h 's
+are given to specify the complete set of buckets.
+.TP
+.B \-m
+specifies that the histogram starting block numbers are powers of
+.IR m .
+This is the general case of
+.BR \-b .
+.TP
+.B \-s
+specifies that a final summary of total free extents,
+free blocks, and the average free extent size is printed.
+.RE
+.TP
+.B fsb
+See the
+.B fsblock
+command.
+.TP
+.BI "fsblock [" fsb ]
+Set current address to the fsblock value given by
+.IR fsb .
+If no value for
+.I fsb
+is given the current address is printed, expressed as an fsb.
+The type is set to
+.B data
+(uninterpreted). XFS filesystem block numbers are computed
+.RI (( agno " << " agshift ") | " agblock )
+where
+.I agshift
+depends on the size of an allocation group. Use the
+.B convert
+command to convert to and from this form. Block numbers given for file blocks
+(for instance from the
+.B bmap
+command) are in this form.
+.TP
+.BI "fsmap [ " start " ] [ " end " ]
+Prints the mapping of disk blocks used by an XFS filesystem. The map
+lists each extent used by files, allocation group metadata,
+journalling logs, and static filesystem metadata, as well as any
+regions that are unused. All blocks, offsets, and lengths are specified
+in units of 512-byte blocks, no matter what the filesystem's block size is.
+.BI "The optional " start " and " end " arguments can be used to constrain
+the output to a particular range of disk blocks.
+.TP
+.BI "fuzz [\-c] [\-d] " "field action"
+Write garbage into a specific structure field on disk.
+Expert mode must be enabled to use this command.
+The operation happens immediately; there is no buffering.
+.IP
+The fuzz command can take the following
+.IR action "s"
+against a field:
+.RS 1.0i
+.TP 0.4i
+.B zeroes
+Clears all bits in the field.
+.TP 0.4i
+.B ones
+Sets all bits in the field.
+.TP 0.4i
+.B firstbit
+Flips the first bit in the field.
+For a scalar value, this is the highest bit.
+.TP 0.4i
+.B middlebit
+Flips the middle bit in the field.
+.TP 0.4i
+.B lastbit
+Flips the last bit in the field.
+For a scalar value, this is the lowest bit.
+.TP 0.4i
+.B add
+Adds a small value to a scalar field.
+.TP 0.4i
+.B sub
+Subtracts a small value from a scalar field.
+.TP 0.4i
+.B random
+Randomizes the contents of the field.
+.RE
+.IP
+The following switches affect the write behavior:
+.RS 1.0i
+.TP 0.4i
+.B \-c
+Skip write verifiers and CRC recalculation; allows invalid data to be written
+to disk.
+.TP 0.4i
+.B \-d
+Skip write verifiers but perform CRC recalculation; allows invalid data to be
+written to disk to test detection of invalid data.
+.RE
+.TP
+.BI hash [-d]" strings
+Prints the hash value of
+.I string
+using the hash function of the XFS directory and attribute implementation.
+
+If the
+.B \-d
+option is specified, the directory-specific hash function is used.
+This only makes a difference on filesystems with ascii case-insensitive
+lookups enabled.
+.TP
+.BI "hashcoll [-a] [-s seed] [-n " nr "] [-p " path "] -i | " names...
+Create directory entries or extended attributes names that all have the same
+hash value.
+The metadump name obfuscation algorithm is used here.
+Names are written to standard output, with a NULL between each name for use
+with xargs -0.
+.RS 1.0i
+.PD 0
+.TP 0.4i
+.TP 0.4i
+.B \-a
+Create extended attribute names.
+.TP 0.4i
+.B \-i
+Read the first name to create from standard input.
+Up to 255 bytes are read.
+If this option is not specified, first names are taken from the command line.
+.TP 0.4i
+.BI \-n " nr"
+Create this many duplicated names.
+The default is to create one name.
+.TP 0.4i
+.BI \-p " path"
+Create directory entries or extended attributes in this file instead of
+writing the names to standard output.
+.TP 0.4i
+.BI \-s " seed"
+Seed the random number generator with this value.
+.PD
+.RE
+.TP
+.BI "help [" command ]
+Print help for one or all commands.
+.TP
+.B info
+Displays selected geometry information about the filesystem.
+The output will have the same format that
+.BR "mkfs.xfs" "(8)"
+prints when creating a filesystem or
+.BR "xfs_info" "(8)"
+prints when querying a filesystem.
+.TP
+.BI "inode [" inode# ]
+Set the current inode number. If no
+.I inode#
+is given, print the current inode number.
+.TP
+.BI "iunlink [-n " nr " ]"
+Allocate inodes and put them on the unlinked list.
+
+Options include:
+.RS 1.0i
+.TP 0.4i
+.B \-n
+Create this number of unlinked inodes.
+If not specified, 1 inode will be created.
+.RE
+.TP
+.BI "label [" label ]
+Set the filesystem label. The filesystem label can be used by
+.BR mount (8)
+instead of using a device special file.
+The maximum length of an XFS label is 12 characters \- use of a longer
+.I label
+will result in truncation and a warning will be issued. If no
+.I label
+is given, the current filesystem label is printed.
+.TP
+.BI "log [stop | start " filename ]
+Start logging output to
+.IR filename ,
+stop logging, or print the current logging status.
+.TP
+.BI "logformat [\-c " cycle "] [\-s " sunit "]"
+Reformats the log to the specified log cycle and log stripe unit.
+This has the effect of clearing the log destructively.
+If the log cycle is not specified, the log is reformatted to the current cycle.
+If the log stripe unit is not specified, the stripe unit from the filesystem
+superblock is used.
+.TP
+.B logres
+Print transaction reservation size information for each transaction type.
+This makes it easier to find discrepancies in the reservation calculations
+between xfsprogs and the kernel, which will help when diagnosing minimum
+log size calculation errors.
+.TP
+.BI "ls [\-i] [" paths "]..."
+List the contents of a directory.
+If a path resolves to a directory, the directory will be listed.
+If no paths are supplied and the IO cursor points at a directory inode,
+the contents of that directory will be listed.
+
+The output format is:
+directory cookie, inode number, file type, hash, name length, name.
+.RS 1.0i
+.TP 0.4i
+.B \-i
+Resolve each of the given paths to an inode number and print that number.
+If no paths are given and the IO cursor points to an inode, print the inode
+number.
+.RE
+.TP
+.BI "metadump [\-egow] " filename
+Dumps metadata to a file. See
+.BR xfs_metadump (8)
+for more information.
+.TP
+.BI "ncheck [\-s] [\-i " ino "] ..."
+Print name-inode pairs. A
+.B blockget \-n
+command must be run first to gather the information.
+.RS 1.0i
+.TP 0.4i
+.B \-i
+specifies an inode number to be printed. If no
+.B \-i
+options are given then all inodes are printed.
+.TP
+.B \-s
+specifies that only setuid and setgid files are printed.
+.RE
+.TP
+.B p
+See the
+.B print
+command.
+.TP
+.BI "path " dir_path
+Walk the directory tree to an inode using the supplied path.
+Absolute and relative paths are supported.
+.TP
+.B pop
+Pop location from the stack.
+.TP
+.BI "print [" field-expression "] ..."
+Print field values.
+If no argument is given, print all fields in the current structure.
+.TP
+.BI "push [" command ]
+Push location to the stack. If
+.I command
+is supplied, set the current location to the results of
+.I command
+after pushing the old location.
+.TP
+.B q
+See the
+.B quit
+command.
+.TP
+.B quit
+Exit
+.BR xfs_db .
+.TP
+.BI "ring [" index ]
+Show position ring (if no
+.I index
+argument is given), or move to a specific entry in the position ring given by
+.IR index .
+.TP
+.BI "sb [" agno ]
+Set current address to SB header in allocation group
+.IR agno .
+If no
+.I agno
+is given, use the current allocation group number.
+.TP
+.BI "source " source-file
+Process commands from
+.IR source-file .
+.B source
+commands can be nested.
+.TP
+.B stack
+View the location stack.
+.TP
+.BI "type [" type ]
+Set the current data type to
+.IR type .
+If no argument is given, show the current data type.
+The possible data types are:
+.BR agf ", " agfl ", " agi ", " attr ", " bmapbta ", " bmapbtd ,
+.BR bnobt ", " cntbt ", " data ", " dir ", " dir2 ", " dqblk ,
+.BR inobt ", " inode ", " log ", " refcntbt ", " rmapbt ", " rtbitmap ,
+.BR rtsummary ", " sb ", " symlink " and " text .
+See the TYPES section below for more information on these data types.
+.TP
+.BI "timelimit [" OPTIONS ]
+Print the minimum and maximum supported values for inode timestamps,
+quota expiration timers, and quota grace periods supported by this
+filesystem.
+Options include:
+.RS 1.0i
+.TP 0.4i
+.B \--bigtime
+Print the time limits of an XFS filesystem with the
+.B bigtime
+feature enabled.
+.TP 0.4i
+.B \--classic
+Print the time limits of a classic XFS filesystem.
+.TP 0.4i
+.B \--compact
+Print all limits as raw values on a single line.
+.TP 0.4i
+.B \--pretty
+Print the timestamps in the current locale's date and time format instead of
+raw seconds since the Unix epoch.
+.RE
+.TP
+.BI "uuid [" uuid " | " generate " | " rewrite " | " restore ]
+Set the filesystem universally unique identifier (UUID).
+The filesystem UUID can be used by
+.BR mount (8)
+instead of using a device special file.
+The
+.I uuid
+can be set directly to the desired UUID, or it can
+be automatically generated using the
+.B generate
+option. These options will both write the UUID into every copy of the
+superblock in the filesystem. On a CRC-enabled filesystem, this will
+set an incompatible superblock flag, and the filesystem will not be
+mountable with older kernels. This can be reverted with the
+.B restore
+option, which will copy the original UUID back into place and clear
+the incompatible flag as needed.
+.B rewrite
+copies the current UUID from the primary superblock
+to all secondary copies of the superblock.
+If no argument is given, the current filesystem UUID is printed.
+.TP
+.BI "version [" feature " | " "versionnum features2" ]
+Enable selected features for a filesystem (certain features can
+be enabled on an unmounted filesystem, after
+.BR mkfs.xfs (8)
+has created the filesystem).
+Support for unwritten extents can be enabled using the
+.B extflg
+option. Support for version 2 log format can be enabled using the
+.B log2
+option. Support for extended attributes can be enabled using the
+.B attr1
+or
+.B attr2
+option. Once enabled, extended attributes cannot be disabled, but the user
+may toggle between
+.B attr1
+and
+.B attr2
+at will (older kernels may not support the newer version).
+.IP
+If no argument is given, the current version and feature bits are printed.
+With one argument, this command will write the updated version number
+into every copy of the superblock in the filesystem.
+If two arguments are given, they will be used as numeric values for the
+.I versionnum
+and
+.I features2
+bits respectively, and their string equivalent reported
+(but no modifications are made).
+.TP
+.BI "write [\-c|\-d] [" "field value" "] ..."
+Write a value to disk.
+Specific fields can be set in structures (struct mode),
+or a block can be set to data values (data mode),
+or a block can be set to string values (string mode, for symlink blocks).
+The operation happens immediately: there is no buffering.
+.IP
+Struct mode is in effect when the current type is structural,
+i.e. not data. For struct mode, the syntax is "\c
+.B write
+.I field value\c
+".
+.IP
+Data mode is in effect when the current type is data. In this case the
+contents of the block can be shifted or rotated left or right, or filled
+with a sequence, a constant value, or a random value. In this mode
+.B write
+with no arguments gives more information on the allowed commands.
+.RS 1.0i
+.TP 0.4i
+.B \-c
+Skip write verifiers and CRC recalculation; allows invalid data to be written
+to disk.
+.TP 0.4i
+.B \-d
+Skip write verifiers but perform CRC recalculation.
+This allows invalid data to be written to disk to
+test detection of invalid data. (This is not possible for some types.)
+.RE
+.SH TYPES
+This section gives the fields in each structure type and their meanings.
+Note that some types of block cover multiple actual structures,
+for instance directory blocks.
+.TP 1.0i
+.B agf
+The AGF block is the header for block allocation information;
+it is in the second 512-byte block of each allocation group.
+The following fields are defined:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magicnum
+AGF block magic number, 0x58414746 ('XAGF').
+.TP
+.B versionnum
+version number, currently 1.
+.TP
+.B seqno
+sequence number starting from 0.
+.TP
+.B length
+size in filesystem blocks of the allocation group. All allocation
+groups except the last one of the filesystem have the superblock's
+.B agblocks
+value here.
+.TP
+.B bnoroot
+block number of the root of the Btree holding free space
+information sorted by block number.
+.TP
+.B cntroot
+block number of the root of the Btree holding free space
+information sorted by block count.
+.TP
+.B bnolevel
+number of levels in the by-block-number Btree.
+.TP
+.B cntlevel
+number of levels in the by-block-count Btree.
+.TP
+.B flfirst
+index into the AGFL block of the first active entry.
+.TP
+.B fllast
+index into the AGFL block of the last active entry.
+.TP
+.B flcount
+count of active entries in the AGFL block.
+.TP
+.B freeblks
+count of blocks represented in the freespace Btrees.
+.TP
+.B longest
+longest free space represented in the freespace Btrees.
+.TP
+.B btreeblks
+number of blocks held in the AGF Btrees.
+.PD
+.RE
+.TP
+.B agfl
+The AGFL block contains block numbers for use of the block allocator;
+it is in the fourth 512-byte block of each allocation group.
+Each entry in the active list is a block number within the allocation group
+that can be used for any purpose if space runs low.
+The AGF block fields
+.BR flfirst ", " fllast ", and " flcount
+designate which entries are currently active.
+Entry space is allocated in a circular manner within the AGFL block.
+Fields defined:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B bno
+array of all block numbers. Even those which are not active are printed.
+.PD
+.RE
+.TP
+.B agi
+The AGI block is the header for inode allocation information;
+it is in the third 512-byte block of each allocation group.
+Fields defined:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magicnum
+AGI block magic number, 0x58414749 ('XAGI').
+.TP
+.B versionnum
+version number, currently 1.
+.TP
+.B seqno
+sequence number starting from 0.
+.TP
+.B length
+size in filesystem blocks of the allocation group.
+.TP
+.B count
+count of inodes allocated.
+.TP
+.B root
+block number of the root of the Btree holding inode allocation information.
+.TP
+.B level
+number of levels in the inode allocation Btree.
+.TP
+.B freecount
+count of allocated inodes that are not in use.
+.TP
+.B newino
+last inode number allocated.
+.TP
+.B dirino
+unused.
+.TP
+.B unlinked
+an array of inode numbers within the allocation group. The entries
+in the AGI block are the heads of lists which run through the inode
+.B next_unlinked
+field. These inodes are to be unlinked the next time the filesystem is mounted.
+.PD
+.RE
+.TP
+.B attr
+An attribute fork is organized as a Btree with the actual data embedded
+in the leaf blocks. The root of the Btree is found in block 0 of the fork.
+The index (sort order) of the Btree is the hash value of the attribute name.
+All the blocks contain a
+.B blkinfo
+structure at the beginning, see type
+.B dir
+for a description. Nonleaf blocks are identical in format to those for
+version 1 and version 2 directories, see type
+.B dir
+for a description. Leaf blocks can refer to "local" or "remote" attribute
+values. Local values are stored directly in the leaf block.
+Leaf blocks contain the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B hdr
+header containing a
+.B blkinfo
+structure
+.B info
+(magic number 0xfbee), a
+.B count
+of active entries,
+.B usedbytes
+total bytes of names and values, the
+.B firstused
+byte in the name area,
+.B holes
+set if the block needs compaction, and array
+.B freemap
+as for
+.B dir
+leaf blocks.
+.TP
+.B entries
+array of structures containing a
+.BR hashval ,
+.B nameidx
+(index into the block of the name), and flags
+.BR incomplete ,
+.BR root ,
+and
+.BR local .
+.TP
+.B nvlist
+array of structures describing the attribute names and values. Fields
+always present:
+.B valuelen
+(length of value in bytes),
+.BR namelen ,
+and
+.BR name .
+Fields present for local values:
+.B value
+(value string). Fields present for remote values:
+.B valueblk
+(fork block number of containing the value).
+.PD
+.RE
+.IP
+Remote values are stored in an independent block in the attribute fork.
+Prior to v5, value blocks had no structure, but in v5 they acquired a header
+structure with the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+attr3 remote block magic number, 0x5841524d ('XARM').
+.TP
+.B offset
+Byte offset of this data block within the overall attribute value.
+.TP
+.B bytes
+Number of bytes stored in this block.
+.TP
+.B crc
+Checksum of the attribute block contents.
+.TP
+.B uuid
+Filesystem UUID.
+.TP
+.B owner
+Inode that owns this attribute value.
+.TP
+.B bno
+Block offset of this block within the inode's attribute fork.
+.TP
+.B lsn
+Log serial number of the last time this block was logged.
+.TP
+.B data
+The attribute value data.
+.PD
+.RE
+.TP
+.B bmapbt
+Files with many extents in their data or attribute fork will have the
+extents described by the contents of a Btree for that fork,
+instead of being stored directly in the inode.
+Each bmap Btree starts with a root block contained within the inode.
+The other levels of the Btree are stored in filesystem blocks.
+The blocks are linked to sibling left and right blocks at each level,
+as well as by pointers from parent to child blocks.
+Each block contains the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+bmap Btree block magic number, 0x424d4150 ('BMAP').
+.TP
+.B level
+level of this block above the leaf level.
+.TP
+.B numrecs
+number of records or keys in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of extent records.
+Each record contains
+.BR startoff ,
+.BR startblock ,
+.BR blockcount ,
+and
+.B extentflag
+(1 if the extent is unwritten).
+.TP
+.B keys
+[non-leaf blocks only] array of key records. These are the first key
+value of each block in the level below this one. Each record contains
+.BR startoff .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers.
+Each pointer is a filesystem block number to the next level in the Btree.
+.PD
+.RE
+.TP
+.B bnobt
+There is one set of filesystem blocks forming the by-block-number
+allocation Btree for each allocation group. The root block of this
+Btree is designated by the
+.B bnoroot
+field in the corresponding AGF block.
+The blocks are linked to sibling left and right blocks at each level,
+as well as by pointers from parent to child blocks.
+Each block has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+BNOBT block magic number, 0x41425442 ('ABTB').
+.TP
+.B level
+level number of this block, 0 is a leaf.
+.TP
+.B numrecs
+number of data entries in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of freespace records. Each record contains
+.B startblock
+and
+.BR blockcount .
+.TP
+.B keys
+[non-leaf blocks only] array of key records. These are the first value
+of each block in the level below this one. Each record contains
+.B startblock
+and
+.BR blockcount .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers. Each pointer is a
+block number within the allocation group to the next level in the Btree.
+.PD
+.RE
+.TP
+.B cntbt
+There is one set of filesystem blocks forming the by-block-count
+allocation Btree for each allocation group. The root block of this
+Btree is designated by the
+.B cntroot
+field in the corresponding AGF block. The blocks are linked to sibling
+left and right blocks at each level, as well as by pointers from parent
+to child blocks. Each block has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+CNTBT block magic number, 0x41425443 ('ABTC').
+.TP
+.B level
+level number of this block, 0 is a leaf.
+.TP
+.B numrecs
+number of data entries in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of freespace records. Each record contains
+.B startblock
+and
+.BR blockcount .
+.TP
+.B keys
+[non-leaf blocks only] array of key records. These are the first value
+of each block in the level below this one. Each record contains
+.B blockcount
+and
+.BR startblock .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers. Each pointer is a
+block number within the allocation group to the next level in the Btree.
+.PD
+.RE
+.TP
+.B data
+User file blocks, and other blocks whose type is unknown, have this
+type for display purposes in
+.BR xfs_db .
+The block data is displayed in hexadecimal format.
+.TP
+.B dir
+A version 1 directory is organized as a Btree with the directory data
+embedded in the leaf blocks. The root of the Btree is found in block 0
+of the file. The index (sort order) of the Btree is the hash value of
+the entry name. All the blocks contain a
+.B blkinfo
+structure at the beginning with the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B forw
+next sibling block.
+.TP
+.B back
+previous sibling block.
+.TP
+.B magic
+magic number for this block type.
+.RE
+.IP
+
+The non-leaf (node) blocks have the following fields:
+.RS 1.4i
+.TP 1.2i
+.B hdr
+header containing a
+.B blkinfo
+structure
+.B info
+(magic number 0xfebe), the
+.B count
+of active entries, and the
+.B level
+of this block above the leaves.
+.TP
+.B btree
+array of entries containing
+.B hashval
+and
+.B before
+fields. The
+.B before
+value is a block number within the directory file to the child block, the
+.B hashval
+is the last hash value in that block.
+.RE
+.IP
+
+The leaf blocks have the following fields:
+.RS 1.4i
+.TP 1.2i
+.B hdr
+header containing a
+.B blkinfo
+structure
+.B info
+(magic number 0xfeeb), the
+.B count
+of active entries,
+.B namebytes
+(total name string bytes),
+.B holes
+flag (block needs compaction), and
+.B freemap
+(array of
+.BR base ", " size
+entries for free regions).
+.TP
+.B entries
+array of structures containing
+.BR hashval ,
+.B nameidx
+(byte index into the block of the name string), and
+.BR namelen .
+.TP
+.B namelist
+array of structures containing
+.B inumber
+and
+.BR name .
+.RE
+.PD
+.TP
+.B dir2
+A version 2 directory has four kinds of blocks.
+Data blocks start at offset 0 in the file.
+There are two kinds of data blocks: single-block directories have
+the leaf information embedded at the end of the block, data blocks
+in multi-block directories do not.
+Node and leaf blocks start at offset 32GiB (with either a single
+leaf block or the root node block).
+Freespace blocks start at offset 64GiB.
+The node and leaf blocks form a Btree, with references to the data
+in the data blocks.
+The freespace blocks form an index of longest free spaces within the
+data blocks.
+.IP
+A single-block directory block contains the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B bhdr
+header containing
+.B magic
+number 0x58443242 ('XD2B') and an array
+.B bestfree
+of the longest 3 free spaces in the block
+.RB ( offset ", " length ).
+.TP
+.B bu
+array of union structures. Each element is either an entry or a freespace.
+For entries, there are the following fields:
+.BR inumber ,
+.BR namelen ,
+.BR name ,
+and
+.BR tag .
+For freespace, there are the following fields:
+.B freetag
+(0xffff),
+.BR length ,
+and
+.BR tag .
+The
+.B tag
+value is the byte offset in the block of the start of the entry it
+is contained in.
+.TP
+.B bleaf
+array of leaf entries containing
+.B hashval
+and
+.BR address .
+The
+.B address
+is a 64-bit word offset into the file.
+.TP
+.B btail
+tail structure containing the total
+.B count
+of leaf entries and
+.B stale
+count of unused leaf entries.
+.RE
+.IP
+
+A data block contains the following fields:
+.RS 1.4i
+.TP 1.2i
+.B dhdr
+header containing
+.B magic
+number 0x58443244 ('XD2D') and an array
+.B bestfree
+of the longest 3 free spaces in the block
+.RB ( offset ", " length ).
+.TP
+.B du
+array of union structures as for
+.BR bu .
+.RE
+.IP
+
+Leaf blocks have two possible forms. If the Btree consists of a single
+leaf then the freespace information is in the leaf block,
+otherwise it is in separate blocks and the root of the Btree is
+a node block. A leaf block contains the following fields:
+.RS 1.4i
+.TP 1.2i
+.B lhdr
+header containing a
+.B blkinfo
+structure
+.B info
+(magic number 0xd2f1 for the single leaf case, 0xd2ff for the true
+Btree case), the total
+.B count
+of leaf entries, and
+.B stale
+count of unused leaf entries.
+.TP
+.B lents
+leaf entries, as for
+.BR bleaf .
+.TP
+.B lbests
+[single leaf only] array of values which represent the longest freespace
+in each data block in the directory.
+.TP
+.B ltail
+[single leaf only] tail structure containing
+.B bestcount
+count of
+.BR lbests .
+.RE
+.IP
+
+A node block is identical to that for types
+.B attr
+and
+.BR dir .
+
+A freespace block contains the following fields:
+.RS 1.4i
+.TP 1.2i
+.B fhdr
+header containing
+.B magic
+number 0x58443246 ('XD2F'),
+.B firstdb
+first data block number covered by this freespace block,
+.B nvalid
+number of valid entries, and
+.B nused
+number of entries representing real data blocks.
+.TP
+.B fbests
+array of values as for
+.BR lbests .
+.PD
+.RE
+.TP
+.B dqblk
+The quota information is stored in files referred to by the superblock
+.B uquotino
+and
+.B pquotino
+fields. Each filesystem block in a quota file contains a constant number of
+quota entries. The quota entry size is currently 136 bytes, so with a 4KiB
+filesystem block size there are 30 quota entries per block. The
+.B dquot
+command is used to locate these entries in the filesystem.
+The file entries are indexed by the user or project identifier
+to determine the block and offset.
+Each quota entry has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.5i
+.B magic
+magic number, 0x4451 ('DQ').
+.TP
+.B version
+version number, currently 1.
+.TP
+.B flags
+flags, values include 0x01 for user quota, 0x02 for project quota.
+.TP
+.B id
+user or project identifier.
+.TP
+.B blk_hardlimit
+absolute limit on blocks in use.
+.TP
+.B blk_softlimit
+preferred limit on blocks in use.
+.TP
+.B ino_hardlimit
+absolute limit on inodes in use.
+.TP
+.B ino_softlimit
+preferred limit on inodes in use.
+.TP
+.B bcount
+blocks actually in use.
+.TP
+.B icount
+inodes actually in use.
+.TP
+.B itimer
+time when service will be refused if soft limit is violated for inodes.
+.TP
+.B btimer
+time when service will be refused if soft limit is violated for blocks.
+.TP
+.B iwarns
+number of warnings issued about inode limit violations.
+.TP
+.B bwarns
+number of warnings issued about block limit violations.
+.TP
+.B rtb_hardlimit
+absolute limit on realtime blocks in use.
+.TP
+.B rtb_softlimit
+preferred limit on realtime blocks in use.
+.TP
+.B rtbcount
+realtime blocks actually in use.
+.TP
+.B rtbtimer
+time when service will be refused if soft limit is violated for realtime blocks.
+.TP
+.B rtbwarns
+number of warnings issued about realtime block limit violations.
+.PD
+.RE
+.TP
+.B inobt
+There is one set of filesystem blocks forming the inode allocation Btree for
+each allocation group. The root block of this Btree is designated by the
+.B root
+field in the corresponding AGI block.
+The blocks are linked to sibling left and right blocks at each level,
+as well as by pointers from parent to child blocks.
+Each block has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+INOBT block magic number, 0x49414254 ('IABT').
+.TP
+.B level
+level number of this block, 0 is a leaf.
+.TP
+.B numrecs
+number of data entries in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of inode records. Each record contains
+.B startino
+allocation-group relative inode number,
+.B freecount
+count of free inodes in this chunk, and
+.B free
+bitmap, LSB corresponds to inode 0.
+.TP
+.B keys
+[non-leaf blocks only] array of key records. These are the first value of each
+block in the level below this one. Each record contains
+.BR startino .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers. Each pointer is a
+block number within the allocation group to the next level in the Btree.
+.PD
+.RE
+.TP
+.B inode
+Inodes are allocated in "chunks" of 64 inodes each. Usually a chunk is
+multiple filesystem blocks, although there are cases with large filesystem
+blocks where a chunk is less than one block. The inode Btree (see
+.B inobt
+above) refers to the inode numbers per allocation group. The inode numbers
+directly reflect the location of the inode block on disk. Use the
+.B inode
+command to point
+.B xfs_db
+to a specific inode. Each inode contains four regions:
+.BR core ,
+.BR next_unlinked ,
+.BR u ", and "
+.BR a .
+.B core
+contains the fixed information.
+.B next_unlinked
+is separated from the core due to journaling considerations, see type
+.B agi
+field
+.BR unlinked .
+.B u
+is a union structure that is different in size and format depending
+on the type and representation of the file data ("data fork").
+.B a
+is an optional union structure to describe attribute data,
+that is different in size, format, and location depending on the presence
+and representation of attribute data, and the size of the
+.B u
+data ("attribute fork").
+.B xfs_db
+automatically selects the proper union members based on information
+in the inode.
+.IP
+The following are fields in the inode core:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+inode magic number, 0x494e ('IN').
+.TP
+.B mode
+mode and type of file, as described in
+.BR chmod (2),
+.BR mknod (2),
+and
+.BR stat (2).
+.TP
+.B version
+inode version, 1 or 2.
+.TP
+.B format
+format of
+.B u
+union data (0: xfs_dev_t, 1: local file \- in-inode directory or symlink,
+2: extent list, 3: Btree root, 4: unique id [unused]).
+.TP
+.B nlinkv1
+number of links to the file in a version 1 inode.
+.TP
+.B nlinkv2
+number of links to the file in a version 2 inode.
+.TP
+.B projid_lo
+owner's project id (low word; version 2 inode only).
+.B projid_hi
+owner's project id (high word; version 2 inode only).
+.TP
+.B uid
+owner's user id.
+.TP
+.B gid
+owner's group id.
+.TP
+.B atime
+time last accessed (seconds and nanoseconds).
+.TP
+.B mtime
+time last modified.
+.TP
+.B ctime
+time created or inode last modified.
+.TP
+.B size
+number of bytes in the file.
+.TP
+.B nblocks
+total number of blocks in the file including indirect and attribute.
+.TP
+.B extsize
+basic/minimum extent size for the file.
+.TP
+.B nextents
+number of extents in the data fork.
+.TP
+.B naextents
+number of extents in the attribute fork.
+.TP
+.B forkoff
+attribute fork offset in the inode, in 64-bit words from the start of
+.BR u .
+.TP
+.B aformat
+format of
+.B a
+data (1: local attribute data, 2: extent list, 3: Btree root).
+.TP
+.B dmevmask
+DMAPI event mask.
+.TP
+.B dmstate
+DMAPI state information.
+.TP
+.B newrtbm
+file is the realtime bitmap and is "new" format.
+.TP
+.B prealloc
+file has preallocated data space after EOF.
+.TP
+.B realtime
+file data is in the realtime subvolume.
+.TP
+.B gen
+inode generation number.
+.RE
+.IP
+
+The following fields are in the
+.B u
+data fork union:
+.RS 1.4i
+.TP 1.2i
+.B bmbt
+bmap Btree root. This looks like a
+.B bmapbtd
+block with redundant information removed.
+.TP
+.B bmx
+array of extent descriptors.
+.TP
+.B dev
+dev_t for the block or character device.
+.TP
+.B sfdir
+shortform (in-inode) version 1 directory. This consists of a
+.B hdr
+containing the
+.B parent
+inode number and a
+.B count
+of active entries in the directory, followed by an array
+.B list
+of
+.B hdr.count
+entries. Each such entry contains
+.BR inumber ,
+.BR namelen ,
+and
+.B name
+string.
+.TP
+.B sfdir2
+shortform (in-inode) version 2 directory. This consists of a
+.B hdr
+containing a
+.B count
+of active entries in the directory, an
+.B i8count
+of entries with inumbers that don't fit in a 32-bit value, and the
+.B parent
+inode number, followed by an array
+.B list
+of
+.B hdr.count
+entries. Each such entry contains
+.BR namelen ,
+a saved
+.B offset
+used when the directory is converted to a larger form, a
+.B name
+string, and the
+.BR inumber .
+.TP
+.B symlink
+symbolic link string value.
+.RE
+.IP
+
+The following fields are in the
+.B a
+attribute fork union if it exists:
+.RS 1.4i
+.TP 1.2i
+.B bmbt
+bmap Btree root, as above.
+.TP
+.B bmx
+array of extent descriptors.
+.TP
+.B sfattr
+shortform (in-inode) attribute values. This consists of a
+.B hdr
+containing a
+.B totsize
+(total size in bytes) and a
+.B count
+of active entries, followed by an array
+.B list
+of
+.B hdr.count
+entries. Each such entry contains
+.BR namelen ,
+.BR valuelen ,
+.BR root
+flag,
+.BR name ,
+and
+.BR value .
+.PD
+.RE
+.TP
+.B log
+Log blocks contain the journal entries for XFS.
+It's not useful to examine these with
+.BR xfs_db ,
+use
+.BR xfs_logprint (8)
+instead.
+.TP
+.B refcntbt
+There is one set of filesystem blocks forming the reference count Btree for
+each allocation group. The root block of this Btree is designated by the
+.B refcntroot
+field in the corresponding AGF block. The blocks are linked to sibling left
+and right blocks at each level, as well as by pointers from parent to child
+blocks. Each block has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+REFC block magic number, 0x52334643 ('R3FC').
+.TP
+.B level
+level number of this block, 0 is a leaf.
+.TP
+.B numrecs
+number of data entries in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of reference count records. Each record contains
+.BR startblock ,
+.BR blockcount ,
+and
+.BR refcount .
+.TP
+.B keys
+[non-leaf blocks only] array of key records. These are the first value
+of each block in the level below this one. Each record contains
+.BR startblock .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers. Each pointer is a
+block number within the allocation group to the next level in the Btree.
+.PD
+.RE
+.TP
+.B rmapbt
+There is one set of filesystem blocks forming the reverse mapping Btree for
+each allocation group. The root block of this Btree is designated by the
+.B rmaproot
+field in the corresponding AGF block. The blocks are linked to sibling left
+and right blocks at each level, as well as by pointers from parent to child
+blocks. Each block has the following fields:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magic
+RMAP block magic number, 0x524d4233 ('RMB3').
+.TP
+.B level
+level number of this block, 0 is a leaf.
+.TP
+.B numrecs
+number of data entries in the block.
+.TP
+.B leftsib
+left (logically lower) sibling block, 0 if none.
+.TP
+.B rightsib
+right (logically higher) sibling block, 0 if none.
+.TP
+.B recs
+[leaf blocks only] array of reference count records. Each record contains
+.BR startblock ,
+.BR blockcount ,
+.BR owner ,
+.BR offset ,
+.BR attr_fork ,
+.BR bmbt_block ,
+and
+.BR unwritten .
+.TP
+.B keys
+[non-leaf blocks only] array of double-key records. The first ("low") key
+contains the first value of each block in the level below this one. The second
+("high") key contains the largest key that can be used to identify any record
+in the subtree. Each record contains
+.BR startblock ,
+.BR owner ,
+.BR offset ,
+.BR attr_fork ,
+and
+.BR bmbt_block .
+.TP
+.B ptrs
+[non-leaf blocks only] array of child block pointers. Each pointer is a
+block number within the allocation group to the next level in the Btree.
+.PD
+.RE
+.TP
+.B rtbitmap
+If the filesystem has a realtime subvolume, then the
+.B rbmino
+field in the superblock refers to a file that contains the realtime bitmap.
+Each bit in the bitmap file controls the allocation of a single realtime extent
+(set == free). The bitmap is processed in 32-bit words, the LSB of a word is
+used for the first extent controlled by that bitmap word. The
+.B atime
+field of the realtime bitmap inode contains a counter
+that is used to control where the next new realtime file will start.
+.TP
+.B rtsummary
+If the filesystem has a realtime subvolume, then the
+.B rsumino
+field in the superblock refers to a file that contains the realtime summary
+data. The summary file contains a two-dimensional array of 16-bit values.
+Each value counts the number of free extent runs
+(consecutive free realtime extents)
+of a given range of sizes that starts in a given bitmap block.
+The size ranges are binary buckets (low size in the bucket is a power of 2).
+There are as many size ranges as are necessary given the size of the
+realtime subvolume.
+The first dimension is the size range,
+the second dimension is the starting bitmap block number
+(adjacent entries are for the same size, adjacent bitmap blocks).
+.TP
+.B sb
+There is one sb (superblock) structure per allocation group.
+It is the first disk block in the allocation group.
+Only the first one (block 0 of the filesystem) is actually used;
+the other blocks are redundant information for
+.BR xfs_repair (8)
+to use if the first superblock is damaged. Fields defined:
+.RS 1.4i
+.PD 0
+.TP 1.2i
+.B magicnum
+superblock magic number, 0x58465342 ('XFSB').
+.TP
+.B blocksize
+filesystem block size in bytes.
+.TP
+.B dblocks
+number of filesystem blocks present in the data subvolume.
+.TP
+.B rblocks
+number of filesystem blocks present in the realtime subvolume.
+.TP
+.B rextents
+number of realtime extents that
+.B rblocks
+contain.
+.TP
+.B uuid
+unique identifier of the filesystem.
+.TP
+.B logstart
+starting filesystem block number of the log (journal).
+If this value is 0 the log is "external".
+.TP
+.B rootino
+root inode number.
+.TP
+.B rbmino
+realtime bitmap inode number.
+.TP
+.B rsumino
+realtime summary data inode number.
+.TP
+.B rextsize
+realtime extent size in filesystem blocks.
+.TP
+.B agblocks
+size of an allocation group in filesystem blocks.
+.TP
+.B agcount
+number of allocation groups.
+.TP
+.B rbmblocks
+number of realtime bitmap blocks.
+.TP
+.B logblocks
+number of log blocks (filesystem blocks).
+.TP
+.B versionnum
+filesystem version information.
+This value is currently 1, 2, 3, or 4 in the low 4 bits.
+If the low bits are 4 then the other bits have additional meanings.
+1 is the original value.
+2 means that attributes were used.
+3 means that version 2 inodes (large link counts) were used.
+4 is the bitmask version of the version number.
+In this case, the other bits are used as flags
+(0x0010: attributes were used,
+0x0020: version 2 inodes were used,
+0x0040: quotas were used,
+0x0080: inode cluster alignment is in force,
+0x0100: data stripe alignment is in force,
+0x0200: the
+.B shared_vn
+field is used,
+0x1000: unwritten extent tracking is on,
+0x2000: version 2 directories are in use).
+.TP
+.B sectsize
+sector size in bytes, currently always 512.
+This is the size of the superblock and the other header blocks.
+.TP
+.B inodesize
+inode size in bytes.
+.TP
+.B inopblock
+number of inodes per filesystem block.
+.TP
+.B fname
+obsolete, filesystem name.
+.TP
+.B fpack
+obsolete, filesystem pack name.
+.TP
+.B blocklog
+log2 of
+.BR blocksize .
+.TP
+.B sectlog
+log2 of
+.BR sectsize .
+.TP
+.B inodelog
+log2 of
+.BR inodesize .
+.TP
+.B inopblog
+log2 of
+.BR inopblock .
+.TP
+.B agblklog
+log2 of
+.B agblocks
+(rounded up).
+.TP
+.B rextslog
+log2 of
+.BR rextents .
+.TP
+.B inprogress
+.BR mkfs.xfs (8)
+or
+.BR xfs_copy (8)
+aborted before completing this filesystem.
+.TP
+.B imax_pct
+maximum percentage of filesystem space used for inode blocks.
+.TP
+.B icount
+number of allocated inodes.
+.TP
+.B ifree
+number of allocated inodes that are not in use.
+.TP
+.B fdblocks
+number of free data blocks.
+.TP
+.B frextents
+number of free realtime extents.
+.TP
+.B uquotino
+user quota inode number.
+.TP
+.B pquotino
+project quota inode number; this is currently unused.
+.TP
+.B qflags
+quota status flags
+(0x01: user quota accounting is on,
+0x02: user quota limits are enforced,
+0x04: quotacheck has been run on user quotas,
+0x08: project quota accounting is on,
+0x10: project quota limits are enforced,
+0x20: quotacheck has been run on project quotas).
+.TP
+.B flags
+random flags. 0x01: only read-only mounts are allowed.
+.TP
+.B shared_vn
+shared version number (shared readonly filesystems).
+.TP
+.B inoalignmt
+inode chunk alignment in filesystem blocks.
+.TP
+.B unit
+stripe or RAID unit.
+.TP
+.B width
+stripe or RAID width.
+.TP
+.B dirblklog
+log2 of directory block size (filesystem blocks).
+.PD
+.RE
+.TP
+.B symlink
+Symbolic link blocks are used only when the symbolic link value does
+not fit inside the inode. The block content is just the string value.
+Bytes past the logical end of the symbolic link value have arbitrary values.
+.TP
+.B text
+User file blocks, and other blocks whose type is unknown,
+have this type for display purposes in
+.BR xfs_db .
+The block data is displayed in two columns: Hexadecimal format
+and printable ASCII chars.
+.SH DIAGNOSTICS
+Many messages can come from the
+.B check
+.RB ( blockget )
+command.
+If the filesystem is completely corrupt, a core dump might
+be produced instead of the message
+.RS
+.I device
+.B is not a valid filesystem
+.RE
+.PP
+If the filesystem is very large (has many files) then
+.B check
+might run out of memory. In this case the message
+.RS
+.B out of memory
+.RE
+is printed.
+.PP
+The following is a description of the most likely problems and the associated
+messages.
+Most of the diagnostics produced are only meaningful with an understanding
+of the structure of the filesystem.
+.TP
+.BI "agf_freeblks " n ", counted " m " in ag " a
+The freeblocks count in the allocation group header for allocation group
+.I a
+doesn't match the number of blocks counted free.
+.TP
+.BI "agf_longest " n ", counted " m " in ag " a
+The longest free extent in the allocation group header for allocation group
+.I a
+doesn't match the longest free extent found in the allocation group.
+.TP
+.BI "agi_count " n ", counted " m " in ag " a
+The allocated inode count in the allocation group header for allocation group
+.I a
+doesn't match the number of inodes counted in the allocation group.
+.TP
+.BI "agi_freecount " n ", counted " m " in ag " a
+The free inode count in the allocation group header for allocation group
+.I a
+doesn't match the number of inodes counted free in the allocation group.
+.TP
+.BI "block " a/b " expected inum 0 got " i
+The block number is specified as a pair
+(allocation group number, block in the allocation group).
+The block is used multiple times (shared), between multiple inodes.
+This message usually follows a message of the next type.
+.TP
+.BI "block " a/b " expected type unknown got " y
+The block is used multiple times (shared).
+.TP
+.BI "block " a/b " type unknown not expected
+.SH SEE ALSO
+.BR mkfs.xfs (8),
+.BR xfs_admin (8),
+.BR xfs_copy (8),
+.BR xfs_logprint (8),
+.BR xfs_metadump (8),
+.BR xfs_ncheck (8),
+.BR xfs_repair (8),
+.BR mount (8),
+.BR chmod (2),
+.BR mknod (2),
+.BR stat (2),
+.BR xfs (5).