适用于大型 NAS(8+ 5TB 磁盘)的 Btrfs raid 级别

适用于大型 NAS(8+ 5TB 磁盘)的 Btrfs raid 级别

我计划构建一个新的 NAS 来存储大量媒体(20TB 以上)。我希望在 NAS 和备份中使用 btrfs(可能是单独的系统,尚不确定)

  1. 我想使用 raid1 或 raid10 来弥补磁盘故障和位腐烂
  2. 我想使用 1 个大型文件系统和 8-15 个子卷 - 高效利用空间等

我的问题是 - 看起来 raid 6 还没有达到标准,单个 raid1 或 raid10 文件系统只能保护我免受单个磁盘故障的影响 - 我担心在磁盘故障后使用 5TB-10TB 大小的磁盘重建文件系统至少需要几天时间,并且如果另一个磁盘故障,我将面临完全损失的风险。我知道我还会保留我的备份,但我又遇到了同样的问题

  1. 对于上述场景,我可以使用 btrfs 做什么
  2. 是否有任何用于组合磁盘的 btrfs 文件系统模式,如果发生故障,只会丢失该磁盘上的文件?
  3. btrfs 可以使用备份文件系统而不是 raid 来恢复校验和错误吗?
  4. 那 zfs 怎么样
  5. 对我的情况来说,unraid、flexraid 等怎么样?

谢谢

答案1

  1. 那 zfs 怎么样

你好,Shaun,

我无法告诉你太多关于 btrfs 的信息,它仍然在我的待办事项清单上。对于 ZFS,有几个可用的解决方案,一些带有图形界面(它们通常提供供私人使用的免费版本)。我还在 Solaris、OpenIndiana 和 OmniOS 上使用命令行对其进行了测试,但为了易于使用,我建议使用特殊的 NAS 发行版,如 nexentastor(更面向业务,GUI 不太直观)或在您的情况下可能是 FreeNAS(良好的全能型,webGUI,免费)。

FreeNAS 安装非常简单(例如,将图像写入 USB 记忆棒(我更喜欢基于 SLC 的芯片,因为它具有更好的弹性),将其粘贴到主板上,启动,在命令行上配置网络并插入网络 - 之后,其他一切都通过 Web-GUI 完成),社区非常活跃。并且它有一个简单的选项来安装(作为独立模块)媒体服务器(plex 媒体服务器)并让它看到选定的目录或文件系统,可以选择只读。

对我来说最重要的是:您可以获得(几乎无限的)快照和基于快照的复制到另一个盒子。这意味着:您可以引入一个任务,定期制作快照,然后将它们复制到另一个盒子。那个盒子不必完全相同,它可以是一个低成本的系统配置(甚至基于不同的系统/操作系统),仅用作存档 - 或一个成熟的双胞胎。

现在,说到磁盘配置,需要一些基本信息,主要是关于使用类型:媒体文件通常很大,对任何系统来说,将它们逐个从存储复制到存储通常不是什么大任务。您还需要什么?同时访问多个不同的媒体?大量向前/向后跳过?或者简单地说:您的读取访问有多随机?写入访问也是如此。单用户,存储文件并时不时观看应该不是什么大问题。家庭影院盒定期扫描 NAS 上的所有媒体以为每个文件建立索引,或流式传输到 5 个或 50 个是完全不同的事情。20 个人在不同的项目中工作,编辑、剪切和合并媒体文件完全是另一回事。

好消息是:ZFS 可以满足上述任何一项要求。甚至所有要求。但成本自然会有所不同。让我举几个例子:

提供 24TB 的“入门级配置”(主要是单用户吞吐量)可能如下所示:* 一个分别具有 6 个 RAIDZ2 或 Z3 配置的池 7 个 6TB HD(“Z”后面跟着可能发生故障但没有实际数据丢失的磁盘数量,最多 3 个)* 8GB RAM(4GB 有点紧,对于 ZFS 来说通常是:越多越好!)* 一个或多个 1GBit 以太网端口(如果需要/可行,最好添加一个专用网络用于复制)

此设置(约 24TB)应足以满足主要单用户访问,将大文件连续复制到盒子上,然后单独读取/流式传输。与足够的 CPU(最近一代 2-4 核,2.5+ GHz)配对,它应该提供良好的读写吞吐量,但由于单片磁盘布局,IO 性能会较低(尤其是写入)。吞吐量预计会保持在单磁盘性能的 4 倍以下,但特别是写入 IOPS 预计不会超过单磁盘(当然,缓存读取除外)。磁盘故障后的重建自然会进一步抑制性能,但由于只复制使用过的块,因此它通常比“通常”的 RAID 重建完成得更快(取决于池的填充率)。

为了提高并行读取性能,您可以添加“性能 SSD”(高 IO、良好的吞吐量)作为 L2ARC,这是一种智能读取缓存,否则将完全驻留在 RAM 中。这应该会大大提高读取性能,但据我所知,L2ARC 在重新启动时会被“清空”。因此,在重新启动后,它必须根据文件的“工作集”/访问模式逐渐“重新填充”。

下面是一个更好的并行(读/写)执行器的示例:* 一个池包含 6 个镜像,每个镜像有 3 个 4TB 磁盘(意味着每个磁盘都镜像两次以实现冗余,从而减少镜像重建期间的负载,此时可以读取一个副本进行重新镜像,另一个副本用于读取请求)* 32GB RAM * 2x 200GB+ L2ARC * 一个或多个 10GBit 以太网端口(再次添加一个用于盒子之间的复制)

此设置应提供第一种设置的几倍(读取和写入)IO(数据分布在 6 个镜像上,而不是一个 RAIDZ 设备上),重建期间的性能应该会更好,重建时间更短(由于磁盘较小)。冗余(ok-to-fail)是 2 个磁盘 - 每个镜像。自然,您总共拥有更多磁盘 -> 更有可能在某个时候出现磁盘故障。但重建速度更快,影响更小。

当然,IO 也取决于磁盘:比较 10.000rpm 的寻道时间 <3ms 与 5.400rpm 的寻道时间 >12ms,更不用说仅为其一小部分的 SSD。

说到 SSD,还有一个选项是使用单独的设备进行“写入日志记录”,称为 SLOG(独立日志),通常使用一个或多个 SSD(或 PCIe 卡),但这经常被误解,因此使用不当。除了一点之外,我现在不会深入探讨这个主题:它仅用于同步数据传输(写入事务在数据实际写入稳定存储(例如磁盘)后立即确认,意思是“我完成了”),而不是异步传输(写入事务在收到数据后立即确认,但部分(或全部)数据可能仍驻留在缓存/RAM 中等待写入稳定存储,意思是“我会尽快完成”)。通常,当我们谈论文件存储的网络共享时,我们谈论的是异步传输。没有任何“调整”,同步写入总是比异步写入慢。如果您需要这种完整性,请回来要求更多。 ;-)

差点忘了:为了确保数据完整性,最好使用 ECC-RAM(以及兼容的主板和 CPU),以避免由于未注意到的内存故障而导致数据损坏。在生产环境中,您肯定不希望出现这种情况。

您可能想要了解的其他一些功能 * ZFS 通常(但并非总是)) 基于相同 ZFS 版本的发行版/操作系统之间兼容(如果没有激活其他“特殊功能”)* 几个不错的“内联”压缩选项 - 但可能不适合你的情况(我想是预压缩媒体)* 自动修复完整性 * 磁盘故障后重建 ZFS 仅复制磁盘上的实时数据,而不是与 Active Directory 的可用空间集成(用于商业用途)* FreeNAS 具有内置磁盘加密选项 - 最好与适当的 CPU(加速)一起使用 - 但要注意,它会破坏与其他发行版的兼容性

好的,关于基于 ZFS 的解决方案的简短描述就这么多...我希望它能提供更多的答案,而不是引发新的问题。

问候,Kjartan

答案2

2/3/5 — 您始终可以将 mhddfs 与 snapraid 一起使用。

基本上,如果正常运行时间不是主要问题,您可以使用 snapraid 进行最多 6 个磁盘故障恢复。我目前在 Windows 中与 DrivePool 一起使用它,但我以前使用带有 mhddfs 和 snapraid 的 ubuntu 14.04LTS。我所做的是;

逐对驱动器。假设您将驱动器标记为 A00->A05,将奇偶校验驱动器标记为 P00 和 P01,并且它们都格式化为 ext4。您的奇偶校验驱动器将包含奇偶校验和三个内容文件中的两个。最后一个内容文件将存储在您的系统驱动器上。内容文件检查文件完整性。

获取 mhddfs

sudo apt-get install mhddfs

编辑 fstab:

# Archive
LABEL=A00 /mnt/A00 ext4 default 0 0
LABEL=A01 /mnt/A01 ext4 default 0 0
LABEL=A02 /mnt/A02 ext4 default 0 0
LABEL=A03 /mnt/A03 ext4 default 0 0
LABEL=A04 /mnt/A04 ext4 default 0 0
LABEL=A05 /mnt/A05 ext4 default 0 0

# Storage Pool
mhddfs#/mnt/A00,/mnt/A01,/mnt/A02,/mnt/A03,/mnt/A04,/mnt/A05 /media/Archive fuse defaults,allow_other 0 0

# Parity
LABEL=P00 /mnt/P00 ext4 default 0 0
LABEL=P01 /mnt/P01 ext4 default 0 0

下载并编译 snapraid 后,请像这样编辑其配置文件:

parity /mnt/P00/snapraid.parity
2-parity /mnt/P01/snapraid.parity

content /mnt/P00/snapraid.content
content /mnt/P01/snapraid.content
content /mnt/snapraid.content

disk d0 /mnt/A00
disk d1 /mnt/A01
disk d2 /mnt/A02
disk d3 /mnt/A03
disk d4 /mnt/A04
disk d5 /mnt/A05

exclude *.unrecoverable
exclude Thumbs.db
exclude lost+found
exclude \Downloading\

然后在终端

sudo snapraid sync

我建议时不时地做一下磨砂(也许一个月一次?);

sudo snapraid scrub

使用此方法,您可以随时添加驱动器,而无需调整任何 raid 解决方案的大小。您将失去从 raid 获得的任何速度提升,但您可以放心并进行简单的设置。如果驱动器坏了,只需阅读 SnapRAID 的手册。这是一个简单的驱动器更换和恢复。我丢失了驱动器,但由于此设置,我没有丢失任何数据。如果您无法从上面看出,您的所有空间都集中到一个名为 /media/Archive 的卷中,添加的数据将均匀分布在驱动器上。

相关内容