FreeBSD ZFS:zpool 中缺少顶层设备

FreeBSD ZFS:zpool 中缺少顶层设备

由于 FreeBSD 10.4 机器上的 2 个愚蠢的系统管理员技巧,我有一个处于这种状态的不可导入的 zpool:

# zpool import
   pool: v
     id: 5630710617833891462
  state: UNAVAIL
 status: One or more devices are missing from the system.
 action: The pool cannot be imported. Attach the missing
    devices and try again.
   see: http://illumos.org/msg/ZFS-8000-6X
 config:

    v                               UNAVAIL  missing device
      raidz2-0                      ONLINE
        gpt/vault_R0_Row3_Col1.eli  ONLINE
        gpt/vault_R0_Row2_Col2.eli  ONLINE
        gpt/vault_R0_Row1_Col1.eli  ONLINE
        gpt/vault_R0_Row3_Col3.eli  ONLINE
        gpt/vault_R0_Row1_Col2.eli  ONLINE
        gpt/vault_R0_Row3_Col2.eli  ONLINE
        gpt/vault_R0_Row3_Col4.eli  ONLINE
        gpt/vault_R0_Row2_Col3.eli  ONLINE
        gpt/vault_R0_Row1_Col3.eli  ONLINE
        gpt/vault_R0_Row4_Col1.eli  ONLINE
      gpt/vault_R0_Row2_Col1.eli    ONLINE

    Additional devices are known to be part of this pool, though their
    exact configuration cannot be determined.

丢失的设备名义上存在,但 ZFS 标签已被清除,因此 ZFS 不会接受它。最初的错误是添加最后一个仍然可见的顶层设备,并将丢失的设备作为顶层设备,而不是添加到 raidz2-0 vdev 中。此外,还试图通过销毁并重新创建现在丢失的 geli 设备来让 ZFS 接受删除,这让情况更加复杂。

问题是 raidz2-0 vdev 中有大量数据没有备份(由于一系列不同的错误),虽然这不是很关键,但我会喜欢才能恢复。此外,备份位于加密的 ZFS 发送流的磁带上,因此恢复是一项漫长的任务。

据我从文档以及尝试使用“-F”和“-FX”选项但未成功的情况来看zfs importzfs clear我基本上运气不佳。但我是吗?真的?真的没有办法告诉 ZFS 我不在乎那 2 个意外添加的顶层设备,因为这些设备从未写入任何实际数据吗?也许有办法编辑 ZFS 标签,让它认为 zpool 只有一个子节点?

答案1

如果您的 ZFS 版本足够新,则可以导入缺少顶层 vdev 的 ZFS 池。为此,您需要设置vfs.zfs.max_missing_tvds缺少的顶层 vdev 的数量(在本例中为 1)。缺少的 vdev 越多,“体验”就越差。

您应该能够在运行时使用以下命令调整此值sysctl

sudo sysctl vfs.zfs.max_missing_tvds=1

然后,您可以以只读方式导入池:

sudo zpool import -o readonly=on your-pool

如果运气好的话,所有数据集都会被装载。然后你应该能够备份大部分数据。

此后,您可以重新创建该池。


如果您不了解 ZFS 池检查点,我建议您查阅一下。它们允许您恢复 ZFS 池上的大多数操作,包括添加 vdev。

相关内容