AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 432063
Accepted
Kevin
Kevin
Asked: 2012-09-26 23:01:44 +0800 CST2012-09-26 23:01:44 +0800 CST 2012-09-26 23:01:44 +0800 CST

ZFS 如何处理 RAID-Z 中的在线替换(理论上)

  • 772

这是一个关于 ZFS 和 RAID-Z 的理论问题。为清楚起见,我将使用三磁盘单奇偶校验阵列作为示例,但问题可以扩展到任意数量的磁盘和任意奇偶校验。

假设我们在池中有磁盘 A、B 和 C,并且它是干净的。

假设现在我们物理添加磁盘 D 以替换磁盘 C,并且磁盘 C 仍然正常运行并且只是出于预防性维护而被替换。一些管理员可能只是抽出 C 并安装 D,这样更有条理,因为设备不需要更改 ID - 但是这确实会使阵列暂时降级,因此对于这个例子,假设我们安装 D 而没有脱机或删除 C。Solaris 文档表明我们可以在不先离线的情况下更换磁盘,使用如下命令:

zpool replace pool C D

这应该导致在 D 上重新同步。假设重新同步沿着“光标”“向下”进行。(我不知道内部实现中使用的实际术语。)

现在假设在重新同步的中途,磁盘 A 出现故障。理论上,这应该是可恢复的,因为游标 B 和 D 上面包含足够的奇偶校验,而游标 B 和 C 下方包含足够的奇偶校验。但是,这是否实际上是可恢复的取决于 ZFS 中的内部设计决策,我不知道这一点(并且手册在某些方面没有说明)。

如果 ZFS 继续向光标下方的 C 发送写入,那么我们就没事了。但是,如果 ZFS 在内部将 C 视为已消失,仅根据 A 和 B 之间的奇偶校验重新同步 D 并且仅将 A 和 B 写入光标下方,那么我们就完蛋了。

一些实验可以回答这个问题,但我希望这里的人可能已经知道 ZFS 处理这种情况的方式。提前感谢您的任何见解!

zfs
  • 3 3 个回答
  • 1803 Views

3 个回答

  • Voted
  1. Best Answer
    USD Matt
    2012-09-27T04:52:50+08:002012-09-27T04:52:50+08:00

    使用基于文件的池(使用文件支持的 md 设备的 FreeBSD 8.3 上的 v28)进行测试表明它应该可以工作。在重新银化过程中,我能够使剩余磁盘之一脱机。理想情况下,它需要使用真实磁盘进行测试并实际拉出一个才能 100% 确定,但 ZFS 非常乐意让我使磁盘脱机。

    在使 md0 脱机之前,池仍然完全在线,所以在我看来 ZFS 只是将替换的磁盘镜像到新磁盘,但在此过程中仍然将整个磁盘视为可用。

        NAME                     STATE     READ WRITE CKSUM
        test                     DEGRADED     0     0     0
          raidz1-0               DEGRADED     0     0     0
            8480467682579886773  OFFLINE      0     0     0  was /dev/md0
            md1                  ONLINE       0     0     0
            replacing-2          ONLINE       0     0     0
              md2                ONLINE       0     0     0
              md3                ONLINE       0     0     0  (resilvering)
    
    • 6
  2. Chris S
    2012-09-27T06:35:44+08:002012-09-27T06:35:44+08:00

    磁盘 C 仍然在 RAIDZ 中使用,就像它从 VDev 中移除之前一样。正如 Matt 指出的那样,ZFS 通过使替换磁盘成为被替换磁盘的镜像并重新同步替换磁盘来替换磁盘。RAIDZ VDev 永远不会降级,也永远不会重新同步(直到 A 失败,这与替换操作完全分开)。

    • 2
  3. ewwhite
    2012-09-27T04:09:43+08:002012-09-27T04:09:43+08:00

    我不确定这是否重要。

    在大多数情况下,你不应该使用 RAIDZ,而不是镜像......如果你这样做,你应该用备用的。

    如果它正在读取的其中一个磁盘发生故障或不可用,则重新同步将失败。与Unrecoverable Read Error相同。到那时磁盘C将消失......

    • 1

相关问题

  • 从现有目录创建 zfs 的正确方法?

  • 如何将 ZFS ACL 从一个文件克隆到另一个文件?

  • ZFS 在演示期间在舞台上失败。这是正常行为吗?

  • Sneakernet 作为备份策略有意义吗?

  • ZFS 与 XFS

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve