这可能是一个幼稚的问题,因为我对此很陌生,并且我找不到有关 mdadm+zfs 的任何结果,但经过一些测试后,它似乎可能有效:
用例是一台使用 RAID6 的服务器,用于存储一些不经常备份的数据。我认为 ZFS 或 RAID6 都可以很好地满足我的需求。平台是 Linux。性能是次要的。因此,我正在考虑的两种设置是:
- RAID6 阵列加上常规 LVM 和 ext4
- RAID6 阵列加 ZFS(无冗余)。这是我完全没有看到讨论的第二个选项。
为什么是 ZFS+RAID6?主要是因为 ZFS 无法用新磁盘扩展 raidz2。我知道,你可以用更大的磁盘替换磁盘,但不能添加另一个磁盘。你可以使用 mdadm 作为冗余层来实现 2 磁盘冗余和 ZFS 磁盘增长。
除了这个主要观点之外(否则我可以直接使用 raidz2,而不使用 RAID),这些是我认为每个选项的优缺点:
- ZFS 具有没有预分配空间的快照。LVM 需要预分配(可能不再如此)。
- ZFS 具有校验和功能(对此非常感兴趣)和压缩功能(很好的奖励)。
- LVM 具有在线文件系统增长功能(ZFS 可以使用 export/mdadm --grow/import 离线进行)。
- LVM 有加密功能(ZFS-on-Linux 没有)。这是我看到的这个组合的唯一主要缺点。我想我可以选择 RAID6+LVM+ZFS... 似乎太重了,不是吗?
因此,最后我们来问一个正确的问题:
1) 是否有任何内在因素阻碍或妨碍 RAID6+ZFS?有谁有这样的设置经验?
2) 是否有可能通过校验和和压缩使 ZFS 变得不必要(保持文件系统增长的可能性)?因为 RAID6+LVM 组合似乎是经过认可和测试的方法。
答案1
如果您选择 MDADM raid6 + ZFS 解决方案,您将失去自我修复功能,因为 ZFS 没有关于如何重新计算/恢复损坏数据块的数据,除非您将副本设置为 2 或更多(这将使用两倍的存储空间)。您的 ZFS 存储将仅报告数据不一致。
这意味着如果无法正确读取数据块,ZFS 将告诉您哪些文件受到影响。您的整个文件系统不会处于危险之中,因为元数据是双重冗余的,如果检测到任何不一致,可以自我修复。
您还可以通过向池中添加更多 vdev 来扩展 ZFS 文件系统,这些 vdev 将动态地进行条带化。例如,您可以创建一个具有 4 到 8 个磁盘的新 raidz2 vdev,并将其添加到池中。您甚至可以向其中添加镜像 vdev。