Verity 文件¶
ext4 支持 fs-verity,这是一项文件系统功能,为单个只读文件提供基于 Merkle 树的哈希。大多数 fs-verity 对于所有支持它的文件系统都是通用的;请参阅 Documentation/filesystems/fsverity.rst 以获取 fs-verity 文档。然而,verity 元数据的磁盘布局是文件系统特定的。在 ext4 上,verity 元数据存储在文件数据本身之后,格式如下:
零填充到下一个 65536 字节边界。此填充实际上无需在磁盘上分配,即它可能是一个空洞。
Merkle 树,如 Documentation/filesystems/fsverity.rst 中所述,其中树级别按从根到叶的顺序存储,每个级别内的树块按其自然顺序存储。
零填充到下一个文件系统块边界。
verity 描述符,如 Documentation/filesystems/fsverity.rst 中所述,可选附加签名 blob。
零填充到下一个偏移量,该偏移量位于文件系统块边界之前 4 字节处。
verity 描述符的大小(以字节为单位),作为 4 字节小端整数。
Verity inode 必须设置 EXT4_VERITY_FL 标志,并且它们必须使用 extent,即 EXT4_EXTENTS_FL 必须设置,而 EXT4_INLINE_DATA_FL 必须清除。它们可以设置 EXT4_ENCRYPT_FL 标志,在这种情况下,verity 元数据和数据本身都会被加密。
Verity 文件不能在 verity 元数据结束后分配块。
Verity 和 DAX 不兼容,尝试在文件上同时设置这两个标志将会失败。