我在文件服务器上使用 Ext3/4+lvm2+mdadm 文件系统设置已有大约 5 年了。它已经增长(并且移动了处理器几次),并且我已经在系统之间移动了磁盘(导出/导入卷组)并将物理卷移动到新磁盘上,所以我对此相当满意,但最近开始寻找替代方案文件系统,因为 mdadm 的检查和重新同步时间变得过多,而较新的系统似乎正在使用校验和和动态修复来避免这种情况。
我的设置使用从分区而不是整个磁盘构建的 RAID 阵列,以允许混合磁盘大小;例如,我之前混合了 4 个磁盘(2 个 3TB、1 个 2Tb 和 1 个 1Tb)来创建一个 9Tb 阵列,提供 6Tb 的可用空间。假设4块磁盘格式化为1Tb分区,mdadm/lvm2命令为:
# mdadm /dev/md0 --create -lraid5 -n3 /dev/sda1 /dev/sdb1 /dev/sdc1
# mdadm /dev/md1 --create -lraid5 -n3 /dev/sda2 /dev/sdb2 /dev/sdc2
# mdadm /dev/md2 --create -lraid5 -n3 /dev/sda3 /dev/sdb3 /dev/sdd1
# pvcreate /dev/md0 /dev/md1 /dev/md2
# vgcreate grp /dev/md0 /dev/md1 /dev/md2
# lvcreate -l100%FREE --name vol grp
对于 ZFS,忽略日志和任何缓存,命令为:
# zpool create puddle raidz sda1 sdb2 sdc1 raidz sda2 sdb2 sdc2 raidz sda3 sdb3 sdd1
然而,对于 BTRFS 来说,最好的办法似乎是创建 3 个 raid 阵列:
# mkfs.btrfs -draid5 /dev/sda1 /dev/sdb1 /dev/sdc1
# mkfs.btrfs -draid5 /dev/sda2 /dev/sdb2 /dev/sdc2
# mkfs.btrfs -draid5 /dev/sda3 /dev/sdb3 /dev/sdd1
除非我错过了一些东西,否则 BTRFS 中似乎没有办法将它们合并到单个文件系统中(此外,许多讨论暗示 raid5 实现相当新,可能不符合生产标准!)。有没有一种方法可以配置 BTRFS 以跨 4 个不同大小的磁盘获取单个文件系统,并为任何单个磁盘的丢失提供冗余并获得 2/3 的可用空间用于存储?
或者我的选择仅限于 ZFS 或我现有的 ext/lvm/mdadm 堆栈?
更新: 在等待 BTRFS RAID5 宣布稳定时,我创建了一个 BTRFS RAID1 设置。随后,BTRFS RAID5/6 被宣布为非常损坏且仅适合实验设置,因此我转而使用 ZFS RAIDZ2 (RAID6) 阵列。
答案1
对于您的示例磁盘大小(2 x 3TB、1 x 2TB、1 x 1TB),这应该可以很好地与 btrfs raid5 配合使用,正好有 2/3 的空间可供使用,并且具有足够的奇偶校验来丢失任何一个驱动器。无需分区,直接将所有设备交给btrfs即可。
您可以使用Btrfs 空间分配器网站尝试不同的配置,看看会浪费多少空间。
在您的示例中,我将通过执行以下操作来创建数组:
mkfs.btrfs -d raid5 -m raid5 /dev/sd[a-d]
但请注意,虽然 raid0/1/10 相当稳定(它们已经在内核中存在很长时间了,例如 SuSE Linux Enterprise Server 12 正式支持这些模式),但 raid5/6 代码仅变得半完整在linux 3.19中,raid5此时仍然容易受到“写入漏洞”的影响,因此,如果您尝试使用btrfs raid5,请确保您对所有重要数据都有良好的备份(无论如何,每个人都应该尝试这样做,无论文件系统如何)。
就我个人而言,我会再等待几个内核版本,然后再使用 btrfs raid5/6 进行非实验设置。
要了解 raid5/6 的最新状态btrfs raid56 维基页面通常应该是最新的。