| = Magic Numbers |
| |
| These are the magic numbers that are known to XFS, along with links to the |
| relevant chapters. Magic numbers tend to have consistent locations: |
| |
| * 32-bit magic numbers are always at offset zero in the block. |
| * 16-bit magic numbers for the directory and attribute B+tree are at offset eight. |
| * The quota magic number is at offset zero. |
| * The inode magic is at the beginning of each inode. |
| |
| [options="header"] |
| |===== |
| | Flag | Hexadecimal | ASCII | Data structure |
| | +XFS_SB_MAGIC+ | 0x58465342 | XFSB | xref:Superblocks[Superblock] |
| | +XFS_AGF_MAGIC+ | 0x58414746 | XAGF | xref:AG_Free_Space_Block[Free Space] |
| | +XFS_AGI_MAGIC+ | 0x58414749 | XAGI | xref:Inode_Information[Inode Information] |
| | +XFS_AGFL_MAGIC+ | 0x5841464c | XAFL | xref:AG_Free_List[Free Space List], v5 only |
| | +XFS_DINODE_MAGIC+ | 0x494e | IN | xref:Inode_Core[Inodes] |
| | +XFS_DQUOT_MAGIC+ | 0x4451 | DQ | xref:Quota_Inodes[Quota Inodes] |
| | +XFS_SYMLINK_MAGIC+ | 0x58534c4d | XSLM | xref:Extent_Symbolic_Links[Symbolic Links] |
| | +XFS_ABTB_MAGIC+ | 0x41425442 | ABTB | xref:AG_Free_Space_Btrees[Free Space by Block B+tree] |
| | +XFS_ABTB_CRC_MAGIC+ | 0x41423342 | AB3B | xref:AG_Free_Space_Btrees[Free Space by Block B+tree], v5 only |
| | +XFS_ABTC_MAGIC+ | 0x41425443 | ABTC | xref:AG_Free_Space_Btrees[Free Space by Size B+tree] |
| | +XFS_ABTC_CRC_MAGIC+ | 0x41423343 | AB3C | xref:AG_Free_Space_Btrees[Free Space by Size B+tree], v5 only |
| | +XFS_IBT_MAGIC+ | 0x49414254 | IABT | xref:Inode_Btrees[Inode B+tree] |
| | +XFS_IBT_CRC_MAGIC+ | 0x49414233 | IAB3 | xref:Inode_Btrees[Inode B+tree], v5 only |
| | +XFS_FIBT_MAGIC+ | 0x46494254 | FIBT | xref:Inode_Btrees[Free Inode B+tree] |
| | +XFS_FIBT_CRC_MAGIC+ | 0x46494233 | FIB3 | xref:Inode_Btrees[Free Inode B+tree], v5 only |
| | +XFS_BMAP_MAGIC+ | 0x424d4150 | BMAP | xref:Btree_Extent_List[B+Tree Extent List] |
| | +XFS_BMAP_CRC_MAGIC+ | 0x424d4133 | BMA3 | xref:Btree_Extent_List[B+Tree Extent List], v5 only |
| | +XLOG_HEADER_MAGIC_NUM+ | 0xfeedbabe | | xref:Log_Records[Log Records] |
| | +XFS_DA_NODE_MAGIC+ | 0xfebe | | xref:Directory_Attribute_Internal_Node[Directory/Attribute Node] |
| | +XFS_DA3_NODE_MAGIC+ | 0x3ebe | | xref:Directory_Attribute_Internal_Node[Directory/Attribute Node], v5 only |
| | +XFS_DIR2_BLOCK_MAGIC+ | 0x58443242 | XD2B | xref:Block_Directories[Block Directory Data] |
| | +XFS_DIR3_BLOCK_MAGIC+ | 0x58444233 | XDB3 | xref:Block_Directories[Block Directory Data], v5 only |
| | +XFS_DIR2_DATA_MAGIC+ | 0x58443244 | XD2D | xref:Leaf_Directories[Leaf Directory Data] |
| | +XFS_DIR3_DATA_MAGIC+ | 0x58444433 | XDD3 | xref:Leaf_Directories[Leaf Directory Data], v5 only |
| | +XFS_DIR2_LEAF1_MAGIC+ | 0xd2f1 | | xref:Leaf_Directories[Leaf Directory] |
| | +XFS_DIR3_LEAF1_MAGIC+ | 0x3df1 | | xref:Leaf_Directories[Leaf Directory], v5 only |
| | +XFS_DIR2_LEAFN_MAGIC+ | 0xd2ff | | xref:Node_Directories[Node Directory] |
| | +XFS_DIR3_LEAFN_MAGIC+ | 0x3dff | | xref:Node_Directories[Node Directory], v5 only |
| | +XFS_DIR2_FREE_MAGIC+ | 0x58443246 | XD2F | xref:Node_Directories[Node Directory Free Space] |
| | +XFS_DIR3_FREE_MAGIC+ | 0x58444633 | XDF3 | xref:Node_Directories[Node Directory Free Space], v5 only |
| | +XFS_ATTR_LEAF_MAGIC+ | 0xfbee | | xref:Leaf_Attributes[Leaf Attribute] |
| | +XFS_ATTR3_LEAF_MAGIC+ | 0x3bee | | xref:Leaf_Attributes[Leaf Attribute], v5 only |
| | +XFS_ATTR3_RMT_MAGIC+ | 0x5841524d | XARM | xref:Remote_Values[Remote Attribute Value], v5 only |
| | +XFS_RMAP_CRC_MAGIC+ | 0x524d4233 | RMB3 | xref:Reverse_Mapping_Btree[Reverse Mapping B+tree], v5 only |
| | +XFS_REFC_CRC_MAGIC+ | 0x52334643 | R3FC | xref:Reference_Count_Btree[Reference Count B+tree], v5 only |
| |===== |
| |
| The magic numbers for log items are at offset zero in each log item, but items |
| are not aligned to blocks. |
| |
| [options="header"] |
| |===== |
| | Flag | Hexadecimal | ASCII | Data structure |
| | +XFS_TRANS_HEADER_MAGIC+ | 0x5452414e | TRAN | xref:Log_Transaction_Headers[Log Transactions] |
| | +XFS_LI_EFI+ | 0x1236 | | xref:EFI_Log_Item[Extent Freeing Intent Log Item] |
| | +XFS_LI_EFD+ | 0x1237 | | xref:EFD_Log_Item[Extent Freeing Done Log Item] |
| | +XFS_LI_IUNLINK+ | 0x1238 | | Unknown? |
| | +XFS_LI_INODE+ | 0x123b | | xref:Inode_Log_Item[Inode Updates Log Item] |
| | +XFS_LI_BUF+ | 0x123c | | xref:Buffer_Log_Item[Buffer Writes Log Item] |
| | +XFS_LI_DQUOT+ | 0x123d | | xref:Quota_Update_Log_Item[Update Quota Log Item] |
| | +XFS_LI_QUOTAOFF+ | 0x123e | | xref:Quota_Off_Log_Item[Quota Off Log Item] |
| | +XFS_LI_ICREATE+ | 0x123f | | xref:Inode_Create_Log_Item[Inode Creation Log Item] |
| | +XFS_LI_RUI+ | 0x1240 | | xref:RUI_Log_Item[Reverse Mapping Update Intent] |
| | +XFS_LI_RUD+ | 0x1241 | | xref:RUD_Log_Item[Reverse Mapping Update Done] |
| | +XFS_LI_CUI+ | 0x1242 | | xref:CUI_Log_Item[Reference Count Update Intent] |
| | +XFS_LI_CUD+ | 0x1243 | | xref:CUD_Log_Item[Reference Count Update Done] |
| | +XFS_LI_BUI+ | 0x1244 | | xref:BUI_Log_Item[File Block Mapping Update Intent] |
| | +XFS_LI_BUD+ | 0x1245 | | xref:BUD_Log_Item[File Block Mapping Update Done] |
| |===== |
| |
| = Theoretical Limits |
| |
| XFS can create really big filesystems! |
| |
| [options="header"] |
| |===== |
| | Item | 1KiB blocks | 4KiB blocks | 64KiB blocks |
| | Blocks | 2^52^ | 2^52^ | 2^52^ |
| | Inodes | 2^63^ | 2^63^ | 2^64^ |
| | Allocation Groups | 2^32^ | 2^32^ | 2^32^ |
| | File System Size | 8EiB | 8EiB | 8EiB |
| | Blocks per AG | 2^31^ | 2^31^ | 2^31^ |
| | Inodes per AG | 2^32^ | 2^32^ | 2^32^ |
| | Max AG Size | 2TiB | 8TiB | 128TiB |
| | Blocks Per File | 2^54^ | 2^54^ | 2^54^ |
| | File Size | 8EiB | 8EiB | 8EiB |
| | Max Dir Size | 32GiB | 32GiB | 32GiB |
| |===== |
| |
| Linux doesn't suppport files or devices larger than 8EiB, so the block |
| limitations are largely ignorable. |