所以这可能是一个新手的问题所以我提前道歉。
我有一个由 5 个磁盘组成的 raid6 池,我还有另外 3 个磁盘,所以我把它们扔进去并添加它们,当池的大小没有增加时,我阅读了相关内容,据我了解,一旦创建磁盘,实际上就无法增加磁盘数量。好的,所以我让磁盘放在那里,现在其中一个坏了,导致整个池脱机,因为它已经损坏了数据。
我确实有实际 raid 的备份,但如果能够删除错误添加的磁盘,然后再次导入 zpool,一切就都好了?有帮助吗?
sudo zpool import -f -d /dev/disk/by-id/
pool: BigTank
id: 8888859370501390120
state: FAULTED
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
config:
BigTank FAULTED corrupted data
raidz2-0 ONLINE
ata-ST4000DM000-1F2168_Z304VLYW ONLINE
ata-ST4000DM000-1F2168_Z304YPPP ONLINE
ata-ST4000DM000-1F2168_W3010A40 ONLINE
ata-ST4000DM000-1F2168_W3010AE1 ONLINE
ata-ST4000DM000-1F2168_W300ZV1B ONLINE
wwn-0x5000c5008bc70a5e ONLINE
wwn-0x5000c50086eef044 ONLINE
sdd FAULTED corrupted data
答案1
耶!
处理 zpools 时要非常非常小心,尤其是当这些 zpools 包含 raidz 时。
您所做的是创建与 raid60 等效的版本,也就是说,您通过将 raidz2 的冗余性分布到您添加的其他磁盘上来消除它的冗余性。
这意味着您的冗余度已经消失 —— 由于原始 raidz 中的一个磁盘发生故障,其数据已无法挽回地丢失。
除了从备份中恢复之外没有其他办法。
并且在将来,请注意 raidz 是静态的;您拥有在创建池时添加的 vdev 数量。
您不能修改 raidz 定义:
- 您可以将其分布到更多磁盘上(如本例所示)
- 您可以使用一个或多个至少大小相同的 vdev 来对其进行镜像。
无论哪种方式,您都需要做出牺牲;条带化使得任何冗余都变得毫无意义,而镜像则要求您添加原本不需要的冗余。
升级 raidz 意味着用更大的 vdev 替换池中的所有 vdev。
答案2
现在的情况
我能想到的最明显的答案是从您的池中删除不需要的设备(您可能从一开始就应该这样做)。
要删除这些多余的设备,您可以运行以下命令:
sudo zpool remove BigTank wwn-0x5000c5008bc70a5e wwn-0x5000c50086eef044 sdd
如果这不能解决问题,我认为除了从头开始重新创建 RaidZ 并恢复备份之外别无选择。
将来
RaidZ 扩展是最近刚刚在 Github 上合并到 ZFS 主树中的一项功能(2023 年 11 月 8 日)。据消息人士透露,该功能将从 OpenZFS 2.3 版开始默认可用。
当此功能发布时(并且只有在那时),您可以使用此特定功能一次将 RaidZ 扩大一个磁盘,使用以下命令:
sudo zpool attach <POOL> raidzP-N <NEW_DEVICE>