我注意到 zfs+redundancy+performance 上的指南倾向于强调镜像是一个不错的选择,但是与基于 raidz 的指南相比,zfs 管理信息往往提供关于管理镜像设置的信息相对较少。
我计划将我的 zfs 池从 Windows 下的镜像磁盘迁移。我首选的设置一直是纯镜像,在研究了 zfs 之后,我想保留这种设置,并使用纯镜像而不是 RAIDZ 来实现冗余。理想情况下,每个驱动器在逻辑上保持独立可读,即对于 6 个磁盘,数据实际上存储为(1+2+3 mirror) + (4+5+6 mirror)
而不是((1+2 stripe) x 3 mirror)
。我知道这不会很高效,而且需要拥有多个较小的池/数据集,但之前丢失过数据,它比效率更有优势。它在读取和重新同步方面可能也更快,而且在物理上更灵活。
如果我想运行这种设置,那么在 vdev 内镜像与镜像 vdev 有何区别?如果将来通过添加一组 3 个新磁盘来扩展存储,最好将它们添加为单独的池还是单独的 vdev(或 3 个单独的 vdev)?
答案1
在 ZFS 中在 vdev 级别始终具有任何类型的冗余,在池级别则不能具有冗余。
vdev 可以由单个磁盘(1 个磁盘)、镜像磁盘(2 个以上磁盘)、Z1 条带(2 个以上磁盘)、Z2 条带(3 个以上磁盘)或 Z3 条带(4 个以上磁盘)组成。然后,您可以构建池,每个池由 1 个以上 vdev 支持,您可以拥有任意数量的池。每个池都使用所有支持 vdev,没有任何冗余(在 vdev 级别管理),丢失单个 vdev(不是磁盘)意味着整个池都丢失。
因此,如果您拆分池,那么您基本上会拥有几个彼此相邻且完全独立的 RAID1 阵列 - 一个池的丢失不会影响其他池,但您会获得较低的性能,因为它们都是 RAID1 而不是 RAID10。
扩展也有这种权衡——如果你扩大单个池,它会变得更快(至少对于新写入的数据,没有自动重新平衡),但你的失败机会也会增加。
除此之外,还有一个问题:您是否希望为您的 vdev 配备双向还是三向镜像 - 三向更安全(四向几乎无用),但成本更高(需要更多磁盘或空间更少)。三向的读取速度也更快一些,但写入速度不会改变。
因此,这是一个成本、性能、安全性和易用性之间的权衡。