两个纠缠在一起的 ZFS 池?

两个纠缠在一起的 ZFS 池?

我正在尝试使用 ZFS 清理 Ubuntu 12.04 LTS 服务器系统上的混乱情况。以下是 zpool status 显示的内容:

  pool: TB2
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    TB2         UNAVAIL      0     0     0  insufficient replicas
      sdd       ONLINE       0     0     0
      sde       ONLINE       0     0     0
      sdf       ONLINE       0     0     0
      sdg       ONLINE       0     0     0
      sdh       ONLINE       0     0     0
      sdi       ONLINE       0     0     0
      sdj       ONLINE       0     0     0
      sds       ONLINE       0     0     0
      sdt       UNAVAIL      0     0     0

  pool: TB4
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb  6 09:27:46 2018
config:

    NAME                                              STATE     READ WRITE CKSUM
    TB4                                               DEGRADED     0     0     0
      raidz2-0                                        DEGRADED     0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T    ONLINE       0     0     0
        spare-4                                       DEGRADED     0     0     0
          ata-Hitachi_HDS724040ALE640_PK2311PAG614MM  UNAVAIL      0     0     0
          ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV  ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM    ONLINE       0     0     0
    spares
      ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV      INUSE     currently in use

errors: No known data errors

我想做两件事:1. 更换池 TB4 中的故障驱动器。我知道如何做。2. 彻底销毁并重新创建池 TB2。

通常情况下,我只需执行 zpool destroy TB2 并重新开始。但是,之前的管理员对 TB2 使用 sd* 名称,对 TB4 使用磁盘 ID。在查看 /dev/disk/by-id 时,我发现两个 TB4 驱动器(...71M 和 ...EAV)分别符号链接到 /dev/sdj 和 /dev/sds。但这些 sdj 和 sds 都列为 TB2 池的一部分。我担心执行 zpool destroy TB2 会损坏 TB4 池中的驱动器,因为文档说 destroy 会写入成员磁盘。有没有办法让 ZFS 直接忘记 TB2 而不实际写入?

我问过前任管理员为什么他使用了两种不同的方法(/dev/sd* 和 by-id)。他说,将驱动器号分配给特定硬盘似乎在每次启动时都不可重复,所以当他创建 TB4 时,他使用了 by-id。我猜 TB2 和 TB4 的纠缠就是由此导致的。

我目前的想法是这样做:

  1. 关掉机器
  2. 拉动所有驱动器。
  3. 重启。
  4. zpool 销毁 -f TB2
  5. 关闭并重新安装 TB4 驱动器
  6. 在另一台机器上重新格式化 TB2 驱动器
  7. 重新安装 TB2 驱动器并使用磁盘 ID(非 sd*)创建新池

这看起来合理吗?有没有更简单的方法?

感谢所有能帮助我摆脱困境的人。

迈克尔

答案1

你提出的方法似乎可行。但是,它也过于复杂。因此,我建议:

  1. zpool export TB2。这将卸载与池相关的所有资源,并且除非您zpool import先运行,否则系统将不会尝试重新安装它们(并可能写入它们)。
  2. 修复 TB4。(或者您可以稍后再做。)
  3. zpool create <new pool> ...(通过 ID 引用磁盘以避免再次重叠)。您可能必须强制创建,因为它可能会注意到这些磁盘正在被未导入的池使用。

如果您想试运行该过程,我认为您可以在 TB4 上创建一些卷(zfs create -V 5gb TB4/volume1),并用这些卷创建两个“嵌套池”(zpool create testpool1 ...),其中有一个重叠卷。其他一切都应与上述相同。

相关内容