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 不会在至少有一个标签完好无损的情况下导入池,然后简单地恢复其他三个。
该问题的背景如下:
- 我做了一件蠢事,创建了两个池,设备名称应该是 /dev/disk/by-uuid/1234,而不是 /dev/sda。老实说,我不知道当时我在想什么,因为我以前也遇到过这种情况
- 今天我插入了一个新驱动器,想要创建一个新的、更大的池。
- 当然,失败的两个池是其“sda”名称移动了一个字母的池。
- 当我意识到这一点后,我重新启动了新驱动器,并使用标签内使用的正确设备名称顺利导入。
为什么报告为标签问题?即使导入后,标签仍然损坏,只有标签 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