使用异构磁盘组创建具有冗余的单一逻辑卷的最佳方法是什么?

使用异构磁盘组创建具有冗余的单一逻辑卷的最佳方法是什么?

我正在使用一台 ubuntu 18.04 计算机,我想在其中拥有一个逻辑卷(将所有驱动器视为一个单元),但同时至少拥有 1 个驱动器故障恢复。

我有这个设置来存储家庭照片:

  • NAS SYNOLOGY 配备 4 TB raid 1
  • 台式电脑配有一堆用于备份的光盘。

NAS 的不同文件夹会定期备份到 PC 的不同磁盘上。然而,这是一个糟糕的解决方案,因为我必须将 NAS 的部分备份到不同的磁盘上,如果 NAS 完全故障/被盗,我就会剩下一堆杂乱无章的旧磁盘。

我最初想用计算机中的所有磁盘创建一个 LVM。这将解决必须创建部分备份的问题。但是,此解决方案增加了数据丢失的风险。就我而言,如果 LVM 的其中一个磁盘发生故障,则所有 LVM 都会丢失。

然后我想到用我拥有的异构磁盘创建 raid 1,但我无法找到合适的解决方案。

我目前用于备份的驱动器是:2x640GB 3x1TB 1x3TB

我想要至少有 1 个磁盘冗余的原因是有些驱动器有点旧并且很少使用。

是否有任何程序/分区(LVM/AUFS + RAID 1)方案可以允许这个 1 个逻辑卷和 1 个磁盘冗余?

注意:我知道购买新光盘是简单且安全的解决方案,但我想使用备用驱动器作为备份,我正在尝试使用当前拥有的硬件实现“尽可能最佳的设置”。

注意:我也读过有关使用 AUFS 和 snapRaid 的可能性,但无法计算最后剩下的总空间量。

答案1

我建议将所有 1 TB 磁盘和 3 TB 磁盘中的两个 1 TB 分区用作 RAID 6(两个磁盘冗余),并再使用 500G 分区组成另一个 RAID,然后将 2 个分区放入 3 TB 磁盘中(也使其成为 RAID 6),并使用每个磁盘上剩余的 140G 组成 RAID 1,然后使用 LVM 合并所有内容。这样,您就可以使用所有这些磁盘,并且不会因为 1 个物理磁盘故障而受到影响。

总结:

RAID 6 (#1):

  • 1 TB 磁盘

  • 1 TB 磁盘

  • 1 TB 磁盘
  • 3 TB 磁盘中的 1 TB 分区
  • 3 TB 磁盘中的 1 TB 分区

RAID 6 (#2):

  • 640G 磁盘 A 中的 500G 分区

  • 640G磁盘B中的500G分区

  • 3 TB 磁盘中的 500G 分区
  • 3 TB 磁盘中的 500G 分区

RAID 1(#3)

  • 640G磁盘A中的140G分区

  • 从 640G 磁盘 B 中划分出 140G 分区

使用 LVM 连接一切

答案2

这是基本的数学知识,对于单磁盘冗余,最大磁盘的大小必须作为冗余的基础。

如果你只想存储家庭照片,性能(尤其是延迟)就不是问题,所以我们甚至可以在性能较差的解决方案之间进行选择,这样你就可以

  • 要么使用 RAID1,将 3x1TB 与 4TB 磁盘上的 3 个分区(每个分区 1TB)和两个 640G 磁盘组合在一起
  • 或者使用 RAID5,使用两个 640G 磁盘和 3TB 磁盘上的 640G 分区创建一个 RAID5,使用三个 1TB 磁盘和 3TB 磁盘上的 1TB 分区创建另一个 RAID5。您可以将大磁盘的剩余部分用作暂存空间

在这两种情况下,您都可以使用这些 MD RAID 作为 LVM 的 PV,这样就可以将整个空间合并为一个 LV

答案3

如果您打算使用现有磁盘,那么我可能会建议您:

  • 2x 640 GB 磁盘 - 连接成单个 1280 GB 卷(使用 LVM)
    • 使用 1 TB 作为阵列
    • 剩余 280 GB 用于其他用途
    • /dev/Xda/dev/Xdb以下
  • 3 TB 磁盘
    • 使用 1TB 作为阵列
    • 剩余 2 TB 用于其他用途
    • /dev/Xdc以下
  • 1TB 磁盘
    • /dev/Xdd以下
  • 1TB 磁盘
    • /dev/Xde以下
  • 1TB 磁盘
    • /dev/Xdf以下

这将允许您生成 4 TB(“RAID5“/1 个磁盘冗余)或 3 TB(“RAID6“/2磁盘冗余)。

布局

我还建议使用像 ZFS 这样的系统来处理文件一致性(许多其他文件系统不这样做),允许检测和修复原本无声且无法检测到的文件损坏……它可以并且将要发生(个人经历)......这对于相对“重要”的事情(例如家庭照片)可能尤其重要。

设置看起来会像这样:

# setup LVM stripe over 2x 640 GB disks
pvcreate /dev/Xda
pvcreate /dev/Xdb
vgcreate ${vg_name} /dev/Xda /dev/Xdb
lvcreate --size 1TB --type striped ${vg_name} --name ${lv_name}

# make a 1TB partition on the 3TB disk, remove all others
sfdisk /dev/Xdc <<< "start=2048,size=+1T,type=0FC63DAF-8483-4772-8E79-3D69D8477DE4"

# make a ZFS raid Z2 filesystem on the stripe, 1TB partition, and 1TB disks
zpool create tank raidz2 /dev/${vg_name}/${lv_name} /dev/Xdc1 /dev/Xdd /dev/Xde /dev/Xdf

这应该会产生一个约 5 TB 的 ZFS 池,其中约 3 TB 可用...raidz1而是使用将奇偶校验磁盘从两个减少到一个,并获得约 4 TB 可用。

之后,您可以返回并添加另一个逻辑卷 ( lvcreate) 以使用 640 GB 磁盘上的剩余空间,并在/dev/Xdc( fdisk) 上添加另一个分区以使用 3 TB 磁盘上的剩余空间。

如果需要,您可以在 3 个 1 TB 磁盘上放置分区表,但这并不是绝对必要的。您还可以通过调整逻辑卷和分区的大小来更好地匹配实际大小,从而提高空间效率。1 TB 磁盘“。


如果您决定使用 ZFS,请确保zpool scrub tank每月大约运行一次 scrupt () - 使用 cronjob 来自动执行它。

此外,我无法评论性能影响或“感觉“使用 LVM 来合并两个磁盘,然后将其呈现给 ZFS。

相关内容