ZFS Internals

Max Bruning wrote an excellent paper on how to examine the internals of a ZFS data structure. (Look for the article on the ZFS On-Disk Data Walk) The structure is defined in ZFS On-Disk Specification. Some key structures:

uberblock_t The starting point when examining a ZFS file system. 128k array of 1k uberblock_t structures, starting at 0x20000 bytes within a vdev label. Defined in uts/common/fs/zfs/sys/uberblock_impl.h Only one uberblock is active at a time; the active uberblock can be found with
# zdb -uuu zpool-name
blkptr_t Locates, describes, and verifies blocks on a disk. Defined in uts/common/fs/zfs/sys/spa.h.
dnode_phys_t Describes an object. Defined by uts/common/fs/zfs/sys/dmu.h
objset_phys_t Describes a group of objects. Defined by uts/common/fs/zfs/sys/dmu_objset.h
ZAP Objects Blocks containing name/value pair attributes. (ZAP stands for ZFS Attribute Processor). Defined by uts/common/fs/zfs/sys/zap_leaf.h
Bonus Buffer Objects
dsl_dir_phys_t Contained in a DSL directorydnode_phys_t; contains object ID for a DSL datasetdnode_phys_t
dsl_dataset_phys_t Contained in a DSL datasetdnode_phys_t; contains a blkprt_t pointing indirectly at a second array of dnode_phys_t for objects within a ZFS file system.
znode_phys_t In the bonus buffer of dnode_phys_t structures for files and directories; contains attributes of the file or directory. Similar to a UFS inode in a ZFS context.