首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为libvirt/kvm修复已损坏的qcow2磁盘映像?

如何为libvirt/kvm修复已损坏的qcow2磁盘映像?
EN

Server Fault用户
提问于 2017-05-21 14:04:14
回答 2查看 20.3K关注 0票数 8

今天,我想增加VM的大小,所以我做了我一直做的事情(以前做过):

代码语言:javascript
复制
qemu-img resize diskimage.qcow2 +22GB

然后文件中断,VM不再启动。我尝试从CD引导VM以调整分区,但系统将不再读取磁盘:

代码语言:javascript
复制
qemu-img check -r all diskimage.qcow2
tcmalloc: large alloc 389841715200 bytes == (nil) @  0x7fdb4ea66bf3 0x7fdb4ea88488 0x7fdb4e5674a6 0x7fdb50236a37 0x7fdb50236bc8 0x7fdb50237011 0x7fdb5023941e 0x7fdb5023d891 0x7fdb5027848b 0x7fdb5027c196 0x7fdb491efb35 0x7fdb5021ee4d (nil)
No errors were found on the image.

没有错误?听起来不错,但virsh start vm不起作用,日志显示:

代码语言:javascript
复制
2017-05-21T10:02:30.755824Z qemu-system-x86_64: -drive file=/.../diskimage.qcow2,format=qcow2,if=none,id=drive-virtio-disk0: could not open disk image /.../diskimage.qcow2: qcow2: Image is corrupt; cannot be opened read/write

我尝试转换为raw,但转换失败(退出1):

代码语言:javascript
复制
qemu-img convert -f qcow2 diskimage.qcow2 -O raw diskimage.raw
qcow2: Image is corrupt: L2 table offset 0x2d623039326500 unaligned (L1 index: 0); further non-fatal corruption events will be suppressed
qemu-img: error while reading block status of sector 0: Input/output error

这个进程创建了一个354334801920字节的文件(比+22 get的文件要大得多),但是它显然是不可用的--当我试图将它转换回qcow2时,我得到一个200 it的文件。

是否有一种方法从qcow2文件中提取数据,或者在有损坏的情况下以某种方式挂载它的读写?我在机器上没有nbd内核模块。

EN

回答 2

Server Fault用户

发布于 2017-05-22 08:45:14

当QEMU进程仍然在打开相同的磁盘时运行“QEMU调整diskimage.qcow2 +22 was”吗?如果是这样的话,这肯定会解释数据损坏的原因,因为您可能会有两个进程同时写入qcow2文件,如果两种写入都需要可能破坏内部文件数据结构的qcow2元数据分配。

“qemu检查”的结果看起来非常虚假。特别是tcmalloc抱怨它不能分配360 GB的内存块。看起来qemu误解了这个错误为成功,打印了假消息“没有发现错误”。这是一个您肯定应该向QEMU报告的bug。

“转换”错误看起来只是tcmalloc命中的相同错误的后续。

不幸的是,我没有任何解决问题的建议--我只是想推荐"check -r“来解决这个问题。您可能剩下的唯一机会是发送qemu并查看是否有任何qcow2维护人员有建议。

票数 4
EN

Server Fault用户

发布于 2017-06-06 16:52:21

将qcow2的腐败处理为带有坏块的硬盘驱动器。

关闭那个VM。

那就做:

代码语言:javascript
复制
modprobe nbd
qemu-nbd --connect=/dev/nbd0 diskimage.qcow2
ddrescue /dev/nbd0 new_diskimage.raw
qemu-nbd --disconnect /dev/nbd0
qemu-img convert -O qcow2 new_diskimage.raw new_diskimage.qcow2

现在试着引导并祈祷,希望它能让你进入救援模式,在那里你可以在磁盘上运行fsck。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/851389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档