diff options
Diffstat (limited to 'upstream/archlinux/man8/xfs_db.8')
-rw-r--r-- | upstream/archlinux/man8/xfs_db.8 | 2402 |
1 files changed, 2402 insertions, 0 deletions
diff --git a/upstream/archlinux/man8/xfs_db.8 b/upstream/archlinux/man8/xfs_db.8 new file mode 100644 index 00000000..f53ddd67 --- /dev/null +++ b/upstream/archlinux/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). |