我知道 ZFS 更希望所有磁盘的大小相同。但是,如果我有两个大小不同的磁盘(1TB 和 1.5TB),我希望有一定的冗余,但不希望镜像。因此,我将两个磁盘分成 5 个分区,每个分区大约 500GB,并创建一个“raidz”池……zfs 很乐意这样做。设置后,可靠性真的提高了吗?我的想法是,如果磁盘没有完全损坏,只有部分磁盘发生故障,我仍然可以访问数据?
答案1
想法是,如果磁盘没有完全损坏,而只有部分出现故障,我仍然可以访问数据?
理论上,这个想法是正确的。只要您在 RAIDZ1 vdev 的单个设备上遇到错误,ZFS 就可以通知您并纠正错误,前提是其他设备没有错误。
实际情况可能有所不同:
- 错误可能会跨分区发生,因此两个或更多设备会受到影响,这可能会导致不可恢复的错误,甚至整个池丢失(取决于错误的位置和数量)。您可以使用 RAIDZ2 或 Z3 来缓解这种情况,但问题始终存在。
- 在重新同步分区时,磁盘需要同时随机地读取(2 次)和写入(1 次)同一磁盘。除非您使用具有顺序重新同步的 Solaris 11.3,否则这将非常非常慢。在完成重新同步过程之前,您很容易受到其他分区上的错误的影响。如果重新同步时间较长,则遇到额外 URE 的机会就会增加。它还会给驱动器带来额外的负载,从而增加驱动器完全故障的可能性。
- 假设您的第三个分区(1.5TB 磁盘上的最后一个分区)显示的错误足以使池降级并需要更换。如果您无法添加另一个磁盘,则无法在不关闭/导出的情况下进行更换,即使这样也比平常更复杂。
基于这些观点,如果可靠性是您的主要目标,我建议不要这样做。假设硬件情况固定,我会执行以下操作之一:
- 使用镜像,损失 500GB,但获得简单的设置,并且将来易于扩展
- 使用两个独立的池,
copies = 2
如果您希望对较小的错误有一定的弹性(与您的设置相比,整个磁盘故障只会杀死 2/5 或 3/5 的数据) - 如果你想鱼与熊掌兼得,请使用 ZFS 以外的其他文件系统
答案2
你所描述的有点俗气。
ZFS 需要大小和容量相同的完整磁盘。出于多种原因,这一点至关重要,但也是常识。
在你所描述的情况下,你所做的就是增加环境的复杂性,增加你的风险。
答案3
让我们将其视为一般情况:
如果磁盘一上有 1 TB 的数据,则可以将其复制到磁盘二,并且您可以承受丢失任何一个磁盘。
如果磁盘二上有 1.5 TB 的数据,则只能将前 1 TB 的数据复制到磁盘一。在这种情况下,如果磁盘二发生故障,您将丢失数据。
ZFS 功能强大,但一般来说,根据上述两点,混合磁盘设置很愚蠢,而且用处不大。如果您关心可靠性和冗余,请假设第二个磁盘也只有 1TB。