【问题标题】:Lost ZFS pool and looking for ways to recover丢失 ZFS 池并寻找恢复方法
【发布时间】:2020-10-30 01:57:04
【问题描述】:

在一台 Proxmox 机器上,我注意到一些 VM 的一些备份失败了,所以我想测试一下。 在测试整个主机停止响应时,我强制重新启动。 重新启动后,我似乎丢失了整个数据存储。 几乎每个 zfs 命令都会导致冻结。 zpool status,zpool list,你说它,它会被锁住,你甚至不能 ctrl 打破它。 我仍然可以创建一个新的 SSH 会话并尝试其他事情。 为了查看导致命令挂起的原因,我考虑运行

zpool set failmode=continue 

希望它会显示一个错误,但正如您所猜想的那样,该命令也会挂起。

这是在两个 nvme 驱动器上创建的池。创建池的原始命令是

zpool create -f -o ashift=12 storage-vm /dev/nvme0n1 /dev/nvme1n1

我首先想到的是其中一个 nvme 坏了,所以我检查了 SMART 状态,但它显示两个驱动器都非常健康。 然后在尝试其他东西之前,我决定使用 dd 命令将驱动器备份到 NFS 共享。

dd if=/dev/nvme0n1 of=/mnt/pve/recovery/nvme0n1
dd if=/dev/nvme1n1 of=/mnt/pve/recovery/nvme1n1

两个命令都完成并且在 NFS 共享上我有 2 个大小完全相同的图像(每个 2TB)

然后我尝试在 nvme 上使用 dd 进行非破坏性读/写测试,并且没有出现错误。 为了尽可能排除我使用备用硬件(相同品牌和类型等)构建另一台 Proxmox 机器并将驱动器放置在那里。 在新机器上,所有 zpool 命令也挂起。如果我在从主板上卸下驱动器的情况下运行 zpool status,它不会挂起,但显然它没有任何显示。 所以我把nvme的放回原机。

zdb -l /dev/nvme0n1给了

failed to unpack label 0
failed to unpack label 1
failed to unpack label 2
failed to unpack label 3

哪一种让我担心。对其他 nvme 也是如此。

现在我的想法已经不多了。我对 zfs 系统知之甚少,不知道有什么方法可以保存数据。 显然,驱动器并没有真正死掉,因为智能告诉我它是健康的,我可以从它们中添加图像。 硬件交换也几乎排除了诸如故障 RAM 或主板之类的事情。 有没有办法从该存储中恢复至少一些虚拟机? 帮助/指针将不胜感激。

【问题讨论】:

  • 我遇到了同样的问题,我想知道您是否有幸恢复了任何数据?
  • @nxet 是的,我能够恢复一切。稍后我会回复您。

标签: recovery zfs


【解决方案1】:

问题最终得到解决,这就是我所做的。 考虑到卷是由 2 个 nvme 驱动器组成的,我使用 dd 映像创建了 2 个循环设备。

losetup -fP /mnt/pve/recovery/nvme0n1
losetup -fP /mnt/pve/recovery/nvme1n1

您可以使用lsblk 检查已挂载的循环设备,并使用losetup -d /dev/loop[X] 卸载它们

最后我以只读模式将池设备导入 ZFS,并且能够访问/恢复我的所有数据

zpool import -f -d /dev/loop0p1 -f -d /dev/loop1p1 -o readonly=on storage-vm

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2021-05-07
    • 1970-01-01
    • 2020-05-31
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2018-09-30
    相关资源
    最近更新 更多