我目前有一个设置,使用旧台式机作为媒体服务器,但我没有容错能力,而且上面的媒体数量太多,我无法合理地备份所有内容。我没有可怕担心如果驱动器发生故障会丢失它,因为它只是电影和电视节目之类的东西(其中许多我仍然有 DVD,收拾在某个地方),但我目前正在升级我的系统,我想在这里添加一些容错功能。
目前,我有 1TB、2TB 和 3TB 的硬盘,大概使用了 5.5TB 左右,我正在考虑再买两个 4TB 的硬盘,并设置一个 4TB x 4TB x 3TB 的 RAIDZ 阵列。
我的问题是:
- 我的理解是,对于像这样的异构磁盘阵列,池大小将限制为最小的磁盘,这意味着我将看到一个 3 x 3 x 3 TB RAIDZ,其中有 6TB 可用空间和 2TB 非容错空间 - 这是真的吗?*
- 假设#1是正确的,当我最终需要更多空间时,如果我向阵列添加一个 4TB 或 6TB 驱动器,将池扩展为 4 x 4 x 4 TB 阵列是否是一件简单的事情,还是我需要在升级阵列时找到某个地方来存储 6TB 的数据?
*2TB 的非容错空间并不是什么大问题,因为我计划留出大约 2TB 用于“需要适当备份的东西”(个人照片、计算机快照等),我会将其镜像到剩下的 2TB 磁盘和第二个 2TB 外部驱动器上,我会把它保存在其他地方。
答案1
目前,我有 1TB、2TB 和 3TB 的硬盘,大概使用了 5.5TB 左右,我正在考虑再买两个 4TB 的硬盘,并设置一个 4TB x 4TB x 3TB 的 RAIDZ 阵列。
对于 4 TB 驱动器,您不应该考虑单冗余 RAIDZ。我建议使用 RAIDZ2,因为它可以提供额外的保护,以防某个驱动器因某种原因损坏或出现其他问题。
请记住,消费级硬盘的 URE 率通常为每读取 10^14 位就会有一个扇区发生故障。1 TB(即硬盘制造商的 TB)等于 10^12 字节或接近 10^13 位,上下浮动不大。从统计上看,您设想的阵列的完整读取过程很可能会遇到问题,而在实践中,读取问题往往会成批出现。
我不确定您为什么建议使用 RAIDZ2。如果我使用 RAIDZ1,是否比不使用 RAID 更有可能同时发生两个驱动器故障?我希望系统的容错能力有所提高。任何不可恢复的东西都不会只存在于一个地方,因此 RAID 阵列只是为了方便。
RAIDZ1 使用单个磁盘在 vdev 中提供冗余,而 RAIDZ2 使用两个磁盘(以及一些更复杂的计算,但无论如何,RAIDZ 计算不太可能限制吞吐量)。第二个冗余磁盘的好处是,如果第一个磁盘发生故障或不可用。由于只有一个磁盘的冗余,任何其他错误现在都是至关重要的。使用 4+4+3 TB,您将拥有 11 TB 的原始存储,最初可能需要读取其中的 6 TB 来重建丢失的磁盘(将 3 TB 驱动器升级为 4 TB 驱动器并扩展池以匹配后,将读取 8 TB)。对于数量级估计,四舍五入到 10^13 和 10^14 位之间。从统计上看,在重新同步期间发生不可恢复的读取错误的概率约为 50% 到 100%当使用单冗余时,数组的大小为该数量级。当然,你很可能走运,但这突然意味着你有不驱动器发生故障时提供保护。
我的理解是,对于像这样的异构磁盘阵列,池大小将被限制为最小磁盘的大小,这意味着我将看到一个 3 x 3 x 3 TB 的 RAIDZ,其中有 6TB 可用空间和 2TB 非容错空间 - 这是真的吗?
几乎。ZFS 会将 vdev 限制为最小组成设备的大小,因此您将获得由 3 TB 设备组成的三设备 RAIDZ vdev 的有效容量,因此用户可访问的存储空间为 6 TB(包括元数据)。剩余的 2 TB 原始存储空间被浪费了;即使没有冗余也无法使用。(它们将显示在EXPANDSZ
中的列中zpool list
,但未被使用。)
一旦您将 3 TB 驱动器替换为 4 TB 驱动器并扩展 vdev(这两者都是 ZFS 中的在线操作),池就可以使用额外的存储空间。
那里是解决这个问题的方法——例如,你可以对驱动器进行分区,向 ZFS 提供三个 3 TB 设备和两个 1 TB(两个 4 TB 驱动器的剩余部分)设备——但这将严重复杂化你的设置,并且不太可能按你计划的方式工作。我强烈建议不要这样做。
ZFS 不会将 2 TB 的非容错空间备份到离线磁盘,如果不清楚的话,请见谅。我建议我通过常规磁盘同步操作来备份它,例如
rsync
。
这意味着 ZFS 不知道这 2 x 1TB,并且您正在该空间中创建其他文件系统。是的,您可以这样做,但同样,这将严重复杂化您的设置,坦率地说,这似乎没有什么好处。
假设#1是正确的,当我最终需要更多空间时,如果我向阵列添加一个 4TB 或 6TB 驱动器,将池扩展为 4 x 4 x 4 TB 阵列是否是一件简单的事情,还是我需要在升级阵列时找到某个地方来存储 6TB 的数据?
正如我上面所说,如果您通过逐步替换设备来实现,ZFS vdev 和池可以作为在线操作进行扩展。(但是,不可能收缩ZFS 池或 vdev。)但是,您无法向现有 vdev(例如,您设想创建的三设备 RAIDZ vdev)添加其他设备;必须将全新的 vdev 添加到池中,然后将稍后写入的数据分条到池中的两个 vdev 之间。每个 vdev 都有自己的冗余要求,但它们可以共享热备件。您也无法从 vdev 中移除设备,镜像除外(移除设备只会降低该特定镜像 vdev 的冗余级别,而不会影响用户可访问的存储空间量),并且您无法从池中移除 vdev。执行后者的唯一方法(因此,也是修复某些池配置错误的唯一方法)是重新创建池并将数据从旧池(可能通过备份)传输到新池。
2TB 的非容错空间并不是什么大问题,因为我计划留出大约 2TB 用于“需要适当备份的东西”(个人照片、计算机快照等),我会将其镜像到剩下的 2TB 磁盘和第二个 2TB 外部驱动器上,我会把它保存在其他地方。
ZFS 冗余实际上并不是为大多数离线异地备份驱动器用例而设计的。我在一个驱动器大部分时间处于离线状态的 ZFS 镜像可以工作吗?但其基本原理是,最好使用zfs send
/zfs receive
复制 ZFS 文件系统的内容(包括快照和其他外围设备),或者rsync
如果您不关心快照,则复制普通文件,而不是在大部分离线设置中使用镜像。
如果我使用一半的磁盘来实现容错,我还不如使用传统的离线备份。
这无疑很大程度上取决于您的情况。在不同情况下,您的恢复时间要求是什么?RAID 关注的是正常运行时间和恢复时间,而不是保护数据;无论如何你都需要备份。
答案2
我的理解是,对于像这样的异构磁盘阵列,池大小将限制为最小磁盘的大小,这意味着我将看到一个 3 x 3 x 3 TB 的 RAIDZ,其中有 6TB 可用空间和 2TB 非容错空间 - 这是真的吗?*
是的。
假设#1是正确的,当我最终需要更多空间时,如果我向阵列添加一个 4TB 或 6TB 驱动器,将池扩展为 4 x 4 x 4 TB 阵列是否是一件简单的事情,还是我需要在升级阵列时找到某个地方来存储 6TB 的数据?
是的,这是可能的。
您可以逐个替换 Z1/Z2/Z3 vdev 中的所有磁盘,其中您的容量将等于 vdev 中当前使用的最小磁盘(您也可以将属性设置autoexpand
为on
自动执行此操作,而不是手动执行)。
另一方面,如果不彻底破坏并重新创建池(在此过程中丢失所有数据),您无法将任何驱动器添加(而不是替换)到现有的 Z1/Z2/Z3 vdev。在镜像和基本 vdev 上,您可以添加更多驱动器以创建 2 镜像、3 镜像、4 镜像等,但这只会增加可靠性,而不会增加可用大小。