目前,我有一个 Ubuntu 服务器设置,其中有 2 个 4TB 磁盘,每个磁盘都带有 ext4,采用 RAID 1(不使用 zfs)。我希望在驱动器发生故障时具有完全冗余。
我正在为机器添加另外 2 个 4TB 驱动器。我以后可能会再次这样做,所以我想我应该切换到 zfs 来支持这一点。
我读到一些指南说可以使用 zfs 进行条带化和镜像,我认为这就是我想要的方式。
通常我会将驱动器分成两对,然后对这两对进行 raid 以获得快速冗余的“8tb”驱动器。
我如何在 zfs 中实现这一点?这样是否可以轻松添加更多驱动器?
答案1
配置起来非常容易(分行使得结构更容易看清):
# zpool create <poolname> \
mirror <disk1> <disk2> \
mirror <disk3> <disk4>
这将创建一个具有两个条带的池,每个条带都是两个磁盘之间的镜像。这是一个非常灵活的设置(易于添加新驱动器,易于理解)。如果将来要添加另一个镜像,只需执行以下操作:
# zpool add -n <poolname> \
mirror <disk5> <disk6>
would update '<poolname>' to the following configuration:
<poolname>
mirror
<disk1>
<disk2>
mirror
<disk3>
<disk4>
mirror
<disk5>
<disk6>
(使用选项-n
首先进行试运行并打印池配置供您检查,我始终建议这样做,以避免事后难以/不可能撤消的错误配置!)
但是请注意,这种设置是“低效的”,因为它只担保一个磁盘故障时的数据安全性:只有当两个故障发生在不同的条带上时,您才可以保证数据安全,这种情况在双磁盘故障场景中约占 67%。此外,冗余数据仍会占用 50% 的池空间。
有一种灵活性较低的 ZFS 专用 RAID 格式,称为 RAID-Z,它允许您将所有磁盘集中起来并获得有效的数据保护。(我说灵活性较低是因为将来很难向池中添加更多磁盘,尽管目前正在开发该功能。)有raidz1
两种raidz2
变体,无论哪个磁盘发生故障,您分别可以丢失最多 1 个或最多 2 个磁盘。对于 4 个大小相同的磁盘,变raidz2
体仍将使用 50% 的存储空间来实现冗余,但可以保证您能够承受两次磁盘故障;变raidz1
体将把您的冗余开销从 50% 减少到仅 25%,但只能保证您能够承受一次磁盘故障。