![为什么ZFS采用树形结构存储?](https://linux22.com/image/1293737/%E4%B8%BA%E4%BB%80%E4%B9%88ZFS%E9%87%87%E7%94%A8%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%E5%AD%98%E5%82%A8%EF%BC%9F.png)
显然,在 ZFS(文件系统)中,有一个超级块指向 zpool 树的根。有人知道为什么这棵树使事情更高效/可靠,以及树本身存储在哪里吗?
答案1
树的目的是提高数据完整性,部分是通过存储校验和来实现的离开不受这些校验和保护的数据块的影响。整个文件系统层次结构形成一个自我修复的哈希树或默克尔树。以下是简化的描述我之前做过:
从左到右,目录 1 包含指向文件 A 的指针、文件 A 的校验和以及一些其他元数据。但目录 1 只是另一个数据块,由超级块指向。因此超级块包含目录 1 的校验和,依此类推。这确实意味着每次写入文件都涉及重新计算几个校验和,一直到根节点(超级块)。但 ZFS 的写时复制策略和事务性质减轻了性能损失。此外,ZFS 旨在利用摩尔定律:CPU 周期很便宜,但硬盘很慢。
ZFS 还使用重复块复制树中比较重要的部分(即靠近根的部分),以进一步防止损坏。