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. |