Zpool 故障并更换磁盘

Zpool 故障并更换磁盘

所以这可能是一个新手的问​​题所以我提前道歉。

我有一个由 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>

相关内容