Ath*_*ius 7 zfs data-recovery zpool zfsonlinux
今天我做了一件非常愚蠢的事情,试图将第三个镜像添加到名为 的现有 Linux zpool 中backup
。可以说我犯了几个错误,因为除了每隔几年交换一次磁盘之外,我并没有对 ZFS 进行太多管理。在尝试纠正它们时,我误读了重新创建池的在线建议,并创建了一个新的池backup
,从而破坏了现有池。(是的,我-f
在它抱怨后使用了该选项。是的,我是个白痴。现在我知道再也不会这样做了。让我们继续吧。)
根据我在网上阅读的内容,我backup
“创建”的原始池可能无法恢复。这没什么问题,因为它的命名是backup
有原因的——它主要存放我 15 年前的备份。但是,有一些东西最好能恢复(一些非必要的数据我暂时移到那里),还有一些与备份设置有关的东西需要我几天的时间才能重新设置驻留在该卷上。(现在我知道在其他地方备份这些东西,所以这将是一次学习经历。)
但我有我的备份的备份 - 今天我正在更换第三个镜像,以替换几个月前在另一次系统升级(以及操作系统升级)期间删除的驱动器。该驱动器实际上并没有出现故障,但它很旧并且已经开始积累一些坏扇区,所以我想我最好把它拿出来,而不是等待它损坏或其他什么。
不管怎样,我仍然有那个旧驱动器,所以我想我可以将其放回我的系统并从那里恢复池数据。我只会丢失过去几个月的备份数据。现在,我从未正式导出该驱动器或其他任何东西上的池。我已经升级了操作系统,所以我没想到它会自动检测到该驱动器。(我不知道它是否插入同一个 SATA 端口,因为我移动了一些驱动器。)
但该zpool import
命令似乎没有自动找到任何内容。使用一些选项,zpool import
可以看到(现已被破坏的)backup
池的第二个版本,但这只是我在其他两个驱动器上意外创建的空池。
关于如何尝试读取第三个磁盘上的数据有什么建议吗?据我所知,在几个月前我把它从箱子里拿出来之前,它是 ZFS 池的一个功能完美且最新的镜像。尤其:
backup
可能会干扰检测并尝试恢复/导入这个旧池的能力吗?有办法解决这个问题吗?create -f
命令销毁。但如果有人知道我如何能够直接在那里恢复第一个池,那显然会很棒。感谢您的任何帮助或建议。
zdb -l /dev/sdb1
编辑:这是(这是第三个驱动器)的输出
------------------------------------
LABEL 0
------------------------------------
version: 5000
name: 'backup'
state: 0
txg: 0
pool_guid: 3936176493905234028
errata: 0
hostid: 8323329
hostname: [omitted]
top_guid: 14695910886267065742
guid: 17986383713788026938
vdev_children: 1
vdev_tree:
type: 'mirror'
id: 0
guid: 14695910886267065742
whole_disk: 0
metaslab_array: 34
metaslab_shift: 33
ashift: 12
asize: 1000197324800
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 17914838236907067293
path: '/dev/sdd1'
whole_disk: 0
DTL: 143
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 17986383713788026938
path: '/dev/sdb1'
whole_disk: 0
DTL: 141
children[2]:
type: 'disk'
id: 2
guid: 1683783279473519399
path: '/dev/sdc1'
whole_disk: 0
DTL: 145
create_txg: 4
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
create_txg: 0
labels = 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
如果我的解释正确,状态 0 意味着池应该完好无损。但是,当我尝试使用池 GUID 进行导入时zpool import 3936176493905234028
,我收到“无法导入...没有此类可用的池”错误。(我假设我应该使用 pool_guid,但我也尝试使用 guid 和 top_guid,但似乎没有任何效果。)
EDIT2:我从该池处于活动状态并尝试过的原始操作系统中恢复了 zpool.cache 文件zpool import -c zpool.cache
,这给出了以下内容:
pool: backup
id: 3936176493905234028
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
config:
backup UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
sdd1 FAULTED corrupted data
sdc1 FAULTED corrupted data
Run Code Online (Sandbox Code Playgroud)
这在某种程度上是可以预料的。这些是我的创建命令覆盖池的两个磁盘。然而,sdb1 没有被列为潜在的驱动器——可能是因为我在取出磁盘后将其从池中删除了。尽管如此,我认为我在 sdb1 上拥有完整的旧镜像数据副本,zdb 也同意。为什么不导入呢?