通过分区不同大小的磁盘提高可靠性?

我知道ZFS会更喜欢所有尺寸相同的磁盘。 但是,如果我有两个不同大小的磁盘(1TB和1.5TB),我想要有一定的冗余,但不能镜像。 所以我把两个磁盘分成5个分区,每个分区大约500GB,并创build一个“raidz”池… zfs高兴地被迫。 它设置实际上增加任何可靠性? 我们的想法是,如果磁盘没有完全被破坏,只有一部分失败,我仍然可以访问数据?

我们的想法是,如果磁盘没有完全被破坏,只有一部分失败,我仍然可以访问数据?

从理论上讲,这个想法是正确的。 只要您在RAIDZ1 vdev的单个设备上遇到错误,ZFS就会通知您并纠正错误(假设其他设备没有错误)。

现实中可能存在的差异有几点:

  • 错误可能会跨越分区,因此两个或更多设备将受到影响,这可能会导致不可恢复的错误甚至整个池损失(取决于错误的位置和数量)。 你可以使用RAIDZ2或Z3来缓解这个问题,但问题总是存在的。
  • 在重新同步分区时,磁盘需要同时读取(2次)和同时写入(1次)同一个磁盘。 除非您使用顺序重新同步的Solaris 11.3,否则这将非常慢。 在完成重新启动过程之前,您很容易在其他分区上发生错误。 如果你的重复时间更长,遇到额外的URE的机会就会增加。 这也增加了驱动器的额外负载,增加了完全驱动器故障的可能性。
  • 想象一下,你的第三个分区(1.5TB磁盘上的最后一个分区)显示了足够的错误来降低池并要求更换。 如果你不能添加另一个磁盘,你不能不进行更换没有关机/导出,即使如此,它比平时更复杂。

基于这些观点,如果可靠性是您的主要目标,我会build议不要这样做。 假设一个固定的硬件情况,我会做下面的一个:

  1. 使用镜像,并失去500GB,但获得一个简单的设置,在未来容易扩展
  2. 使用两个单独的池和copies = 2如果你想要一些弹性较小的错误(整个磁盘故障只会杀死2/5或3/5的数据相比,你的设置)
  3. 如果你想吃蛋糕,也可以使用ZFS以外的文件系统

你所描述的有点俗气。

ZFS希望具有相同大小和容量的完整磁盘。 这是多种原因的关键,但也是常理。

你所描述的所有情况都会增加环境的复杂性并增加风险。

让我们这样说:

  • 如果磁盘1上有1 TB的数据,则可以将其复制到磁盘2,并且可以承受丢失的磁盘。

  • 如果在磁盘2上有1.5 TB的数据,则只能将第一个1 TB的数据复制到第一个磁盘上。 在这种情况下,如果磁盘2出现故障,您将丢失数据。

ZFS是非常有能力的,但作为一般规则,根据以上两点,混合磁盘设置是愚蠢的,不是超级有用的。 如果你关心可靠性和冗余度,假装第二个磁盘也只有1TB。