在Proxmox机器中,我注意到一些VM的一些备份失败了,所以我想测试一些东西。在测试时,整个主机停止了响应,我强制重新启动。重新启动后,我似乎丢失了整个数据存储。几乎每个zfs命令都会导致冻结。zpool状态,zpool列表,你能说出它的名字,它被锁住了,你甚至不能用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共享上,我有两个大小完全相同的图像(每个2TB(
然后,我尝试在两个nvme上使用dd进行无损读/写测试,没有出现错误。为了尽可能多地排除这种可能性,我使用备用硬件(相同品牌和类型等(建造了另一台Proxmox机器,并将驱动器放在那里。在新机器上,所有zpool命令也挂起。如果我在从主板上卸下驱动器的情况下运行zpool状态,它不会挂起,但显然它没有什么可显示的。所以我把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
这让我很担心。对其他女主角来说也是如此。
现在我没什么想法了。我对zfs系统知之甚少,也不知道如何保存数据。显然,驱动器并没有真的死,因为智能告诉我它是健康的,我可以添加它们的图像。硬件交换也几乎排除了RAM或主板故障等问题。有没有办法从该存储中至少恢复一些虚拟机?我们将非常感谢您的帮助/指点。
问题最终得到了解决,我就是这么做的。考虑到卷是由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