loca1h0st's Blog
loca1h0st's Blog

PVE 7.x下的qcow2+lvm虚拟机文件找回记录

PVE 7.x下的qcow2+lvm虚拟机文件找回记录

最近发现家里的All in one小主机上有几个服务运行异常,尝试ssh到虚拟机内进行修复,结果发现即使是使用`cat`命令查看文件也显示Input/output error,多敲了几个回车之后shell被服务端终止,同时登录到PVE平台查看虚拟机被异常停止,无法重启,心想可能坏事了,随之对服务器进行了全面的检查。

经过排查,发现主机上的硬盘出现故障,S.M.A.R.T运行状态为Failed,详细信息显示硬盘的备用空间已经耗尽。

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-1024x520.png
关于这块硬盘的插曲
  • 这块硬盘实际上使用只有一年半,但是Power On Hours显示我用了2.3年…经过与厂家一顿拉扯,最终给了我一个答复说是FW固件问题….好处是直接退货了,坏处是,厂家真耍流氓啊..

抢救数据

已知硬盘挂了且无法修复,接下来就是试图抢救数据,首先是将整个虚拟机下载到本地做备份:

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-1-1024x91.png

尝试使用qemu-img对qcow2文件进行修复

尝试对这个qcow2文件进行修复,使用qemu-img info命令查看文件状态:

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-2.png

使用qemu-img check -r all进行修复。从结果可以看到修复是失败的,只能合理怀疑因为SSD的损坏导致写/读的数据块异常,且无法进行修复了。

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-3-1024x280.png

尝试通过转换格式修复qcow2

尝试通过qemu-img convert转换qcow2成为vmdk或者img格式对文件进行修复,修复失败。从错误信息中也可以看到报错出现了Input/output error。

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-4-1024x167.png

使用qemu-nbd挂载镜像结合dd恢复文件(有效)

在各种常见方法均失效后,只剩使用qemu-nbd的方式挂载qcow2进行数据抢救恢复这一条路了,具体操作如下:

  • qemu-nbd -d /dev/nbd0 #创建一个nbd设备,部分时候你需要先应用nbd模块
  • 挂载qcow2文件到/dev/nbd0
  • 若需要恢复文件的虚拟机vgname和现运行的操作系统vgname相同,则需要修改其中一个,避免后续无法指定到正确的vg
https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-5-1024x580.png

挂载完成后对挂载的/dev/nbd0进行扫描,从而识别到对应的vg/lv

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-6.png
https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-7.png

用只读的方式将需要恢复数据的qcow2挂载mount到虚拟机内:

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-1024x312.jpg

挂载完成后,使用dd命令将mount的文件夹拷贝成一个虚拟磁盘镜像文件,需要注意的是,图中的命令是错误的:

  • bs=1M的block太大,建议改成默认或者更小,否则会导致当碰到坏块时整个块的文件都没有了,在我的实际情况中碰到的是/var/lib的文件夹入口丢失,没办法直接找到文件。
  • status应该是noerror,progress,否则碰到错误就会停止执行
https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-8-1024x167.png

实际正确的执行完成截图:

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-9.png

完成dd后,我是使用了diskgenius对虚拟磁盘镜像打开,成功恢复了数据:

https://blog.mrtblogs.net/wp-content/uploads/2024/03/9801711325840_.pic_-1024x396.png

后记

还好当时发现的早并及时的同步了qcow2文件到本地,在下载文件的同时,PVE的web界面和ssh同时宕机,无法通过任何方式访问。若我没有及时下载,则数据的恢复难度将会更大或无法恢复…

https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-10-1024x415.png
https://blog.mrtblogs.net/wp-content/uploads/2024/03/image-11.png

发表回复

textsms
account_circle
email

loca1h0st's Blog

PVE 7.x下的qcow2+lvm虚拟机文件找回记录
最近发现家里的All in one小主机上有几个服务运行异常,尝试ssh到虚拟机内进行修复,结果发现即使是使用`cat`命令查看文件也显示Input/output error,多敲了几个回车之后shell被服务端终…
扫描二维码继续阅读
2024-03-30