HFS+ Overview HFS+ Overview

Extended Hierarchical Files and Folders Extents - Replaced the flat file system MFS ( File System) - Names can be up to 255 Unicode - Each part (or fragment) of a file is - HFSJ adds journaling characters stored as Older Motorola 68k, PowerPC, - Files can be comprised of two forks - Starting block address - HFSX adds journaling and and small disks use case sensitive file names Big Endian! - Data and - Number of blocks and Allocating Sectors - Similar to the alternate data streams of - Similar to data runs of NTFS NTFS - Allocation Block Intel - Uniquely identified by a CNID - Similar to Ext Blocks Little Endian GUID Partition Map - Catalog Node ID - Clumps - Similar to Ext Block Groups UInt16 - 2- Unsigned Integer 4-byte Unsigned Integer All times are GMT UInt32 -

HFS+ Partitions HFS+ B-Trees 0 Reserved Node 0 Volume Header 1024 Volume Header (Header Node) Size - Describes volume layout Node Descriptor NodeHeader Descriptor Record Node 1 24 TreeNext DepthNode - Copy stored 1024 bytes from end of volume Allocation File 4 RootPrevious Node Node Header Record Allocation File Node 2 (106 bytes) 41 LeafNode RecordsType - Bitmap flagging used blocks Catalog File 41 FirstHeight Leaf In TreeNode Node 3 42 LastNum RecordsLeaf Node User Data Record Startup File (max size is 8 blocks) Extents Overflow File (128 bytes) 2 NodeReserved Size Bytes 00 00 - Permits non-Macs from HFS volumes Node 4 usually all 00’s 2 Max Key Length 4 Total Nodes ID Node Type Catalog File B-Tree Node 5 B-Tree Map Record 4 Free Nodes Attributes File (Bitmap) -1 Leaf Node 2 Reserved - Files and folders stored on volume 0 Index Node Catalog File 4 Clump Size . . . . 1 Header Node Extents Overflow File B-Tree 1 B-Tree Type Start Up File . . . . 2 Map Node - Range of blocks allocated to a fork (after first 8 extents) . . . . Offset to Freespace 1 Key Compare Type Offset to Record 2 4 Attributes Attributes File B-Tree Volume Header Copy Node n Offset to Record 1 Reserved - Additional file and folder data Reserved Sector Offset to Record 0

HFS+ B-Trees HFS+ B-Trees

Node 0 Node 0 Node 0 (Header Node) (Header Node) (Header Node) Size First Node (212) Last Node (117) Node Descriptor Bytes Node Descriptor Root Node (12) Node 1 4 Next Node Node 1 4 Previous Node Record 0 Node 12 Node 2 1 Node Type Node 2 (Index Node) 1 Height In Tree Index Record (23) Record 1 Node 3 2 Num Records Node 3 Index Record (254) 2 Reserved Bytes 00 00 Node 254 Record 2 Node 23 (Index Node) Node 4 Node 4 (Index Node) Index Record (17) Index Record (212) Index Record (18) ID Node Type Node 5 Node 5 Index Record (111) Index Record (117) -1 Leaf Node 0 Index Node Catalog File Catalog File Node 18 . . . . 1 Header Node . . . . (Leaf Node) . . . . 2 Map Node . . . . Node 17 . . . . Offset to Freespace . . . . Node 212 Node 111 Data Record Node 117 (Leaf Node) (Leaf Node) (Leaf Node) (Leaf Node) Offset to Record 2 Data Record Data Record Data Record Data Record Data Record Node n Offset to Record 1 Node n Offset to Record 0 Data Record Data Record Data Record Data Record Data Record