如何恢复/写入标签(克隆现有标签)?

如何恢复/写入标签(克隆现有标签)?

ZFS 存储 4 个标签,2 个位于设备开头,2 个位于设备结尾。如果这些标签损坏,则无法挂载池。

我有一个箱子,里面有 3 个标签破损(failed to unpack),但 1 个仍然完好无损。我可以zdb -lu很好地列出它。

zpool import -d /dev/sda失败。使用-f、 和/或-F、 和/或-D失败。

cannot import '/dev/sda': no such pool available

有什么方法可以将标签 #2 复制到标签 #0、#1、#3 吗?

我假设它们是冗余副本,存在是为了提高可靠性。但是,如果这是真的,我不明白为什么 zfs 不会在至少有一个标签完好无损的情况下导入池,然后简单地恢复其他三个。

该问题的背景如下:

  1. 我做了一件蠢事,创建了两个池,设备名称应该是 /dev/disk/by-uuid/1234,而不是 /dev/sda。老实说,我不知道当时我在想什么,因为我以前也遇到过这种情况
  2. 今天我插入了一个新驱动器,想要创建一个新的、更大的池。
  3. 当然,失败的两个池是其“sda”名称移动了一个字母的池。
  4. 当我意识到这一点后,我重新启动了新驱动器,并使用标签内使用的正确设备名称顺利导入。

为什么报告为标签问题?即使导入后,标签仍然损坏,只有标签 2 完好无损。我该如何修复它们?

附加问题:是否有这样的工具zpool note-my-device-has-a-new-name /dev/sda /dev/disk/by-uuid/1234?考虑到遇到此问题的人数量,这似乎很有帮助。一旦我更新了这些池的备份,我会再试一次。

答案1

我仍然不知道如何从一个或多个剩余的好标签中恢复损坏的标签。

但要“重命名”设备接入点:

zpool note-my-device-has-a-new-name /dev/sda /dev/disk/by-id/1234

zpool export tank
zpool import /dev/disk/by-id/1234

如果导出失败(设备繁忙),您可以使用 搜索lsof | grep tank用户,但通常只是 nfs 和 samba 服务正在运行,仍在访问您的存储。systemctl stop smbd.service nfs-server.service,然后重试导出。如果您的 shell 仍保留该池内的当前工作目录,则应该cd ~或该存储之外的某个地方。如果仍然失败,您可以尝试添加-f选项,但请注意,带有的 zfs 命令-f可能会导致数据丢失。请三思。

答案2

zhack:添加修复标签选项 · openzfs/zfs@d04b5c9

[扎克(1)][1]

我没有使用过它,但在这种情况下可能会使用(将数据复制到新池后):

root@mowa219-gjp4-8570p-freebsd:~ # zdb -l /dev/da2p1
------------------------------------
LABEL 0 
------------------------------------
    version: 5000
    name: 'Transcend'
    state: 0
    txg: 6557176
    pool_guid: 8076233369858608335
    errata: 0
    hostid: 635545813
    hostname: 'mowa219-gjp4-8570p-freebsd'
    top_guid: 13893535540375859253
    guid: 13893535540375859253
    vdev_children: 2
    vdev_tree:
        type: 'disk'
        id: 0
        guid: 13893535540375859253
        path: '/dev/gpt/Transcend'
        whole_disk: 1
        metaslab_array: 256
        metaslab_shift: 32
        ashift: 12
        asize: 500102070272
        is_log: 0
        DTL: 273
        create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
        com.delphix:device_removal
    labels = 0 1 2 3 
root@mowa219-gjp4-8570p-freebsd:~ # zpool scrub Transcend
root@mowa219-gjp4-8570p-freebsd:~ # date ; uname -aKU
Sat Feb  4 01:41:37 GMT 2023
FreeBSD mowa219-gjp4-8570p-freebsd 14.0-CURRENT FreeBSD 14.0-CURRENT #30 main-n260316-9922bccbc9c4: Sat Jan 28 20:39:00 GMT 2023     grahamperrin@mowa219-gjp4-8570p-freebsd:/usr/obj/usr/src/amd64.amd64/sys/GENERIC-NODEBUG amd64 1400078 1400078
root@mowa219-gjp4-8570p-freebsd:~ # ```

  [1]: https://openzfs.github.io/openzfs-docs/man/1/zhack.1.html

相关内容