将每个(整个)文件存储在一个磁盘上的条带阵列(zfs/lvm?)

将每个(整个)文件存储在一个磁盘上的条带阵列(zfs/lvm?)

我的配置是:两个HDD驱动器(3TB+4TB),我想将其用作条带阵列。

我希望实现这一目标:如果我的一个驱动器发生故障,我的一半文件(在良好的驱动器上)保证是安全的。换句话说,我希望我的每个文件都会完全存储在任一驱动器上,而不是分散在两个驱动器上(按块分割)。

这个任务可以通过 ZFS 还是 LVM 来完成?

如果没有,也许还有其他选项可用于该任务?

同样,我想将两个驱动器合并为一个大分区。当第二个驱动器关闭时,我想访问存储在第一个驱动器上的文件。

答案1

ZFS 中唯一可能的配置是分别使用一个磁盘创建两个单独的池。

如果您将它们加入到一个池中,它们将以一种条带化的方式进行,丢失一个磁盘对于整个池来说是致命的。如果不使用“copies=2”,单个文件的丢失也将是致命的。

Lambert 的建议是一个很好的解决方法,但由于您将拥有 2x3TB 而不是 3+4TB,因此您将需要超过 2.0 的压缩(这对于单用户系统来说已经很难实现)。

答案2

最后,经过一番研究,我找到了我想要的东西。

正确的关键字是“union mount”。

Linux 有一些选项:

  • 覆盖文件系统
  • UnionFS、aufs
  • unionfs-fuse、funionfs、mhddfs 和合并文件系统

我最终的选择是合并文件系统。我会解释原因。

OverlayFS 内置于内核中(这是一个很大的优势)。但。根据设计,它始终写入一个分区,而保持另一个分区不变。当您需要使只读分区可写(就像在 LiveCD 中所做的那样)时,这很方便,但我想平等地写入两个分区。

接下来是UnionFS 和aufs。不确定 UnionFS,但 aufs 需要重建内核(以应用 aufs 补丁),这是不可取的。

第三种选择是基于 FUSE 的软件。其中一些(funionfs)我在发行版的存储库中找不到,其中一些(unionfs-fuse)版本号为1.0,所以我认为它相当原始。

所以我尝试了 mergefs 并没有发现任何缺点(对于我的用例)。它可以使用任何文件系统和任何大小的逻辑卷。文件不会分散在所有驱动器上(如 RAID0、lvm 和 zfs)。如果某些驱动器(少于总数)不可用,某些数据仍然可以访问。平衡! (新文件将写入具有更多可用空间的驱动器)。并且无需重建内核:)

相关内容