我有这个 backup.qcow2 映像,它之前在我的 kvm/qemu 虚拟机上运行良好。
当我将其附加到另一台虚拟机时,Windows 识别该磁盘但无法读取分区。磁盘在磁盘管理中显示为初始状态。
文件格式为qcow2版本2:
# qemu-img info backup.qcow2
file format: qcow2
virtual size: 246G (263704281088 bytes)
disk size: 137G
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
注意格式兼容:0.10。我不确定在这种情况下这是否重要。
我运行其他图像,它们运行良好,但具有 compat:1.1 设置,即 qcow2 的版本 3。
磁盘的 vm 配置部分:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/libvirt/backup.qcow2'/>
<target dev='vdc' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>
该图像上的 Hexeditor 显示了 qcow2 标头、一些 NTFS 标记和相关用户数据,因此我推测该图像具有有效数据。
检查图像告诉我:
#qemu-img check backup.qcow2
**ERROR refcount block 69 is outside image**
Leaked cluster 3 refcount=1 reference=0
...
1 errors were found on the image.
Data may be corrupted, or further writes to the image may corrupt it.
1966018 leaked clusters were found on the image.
This means waste of disk space, but no harm to data.
Image end offset: 147866845184
和
#virt-rescue --ro -a backup.qcow2
...
><rescue> fdisk -l /dev/sda
Disk /dev/sda: 245.6 GiB, 263704281088 bytes, 515047424 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
><rescue> gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.4
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
我不确定客户分区,但我认为它是 GPT 和 NTFS 文件系统。
我将图像转换为原始格式,但它在一秒钟内就完成了,我只能看到 00 个字节
qemu-img convert -f qcow2 -O raw backup.qcow2 backup.raw
我该如何处理这种情况?这可能只是主机虚拟机中的配置错误。
或者我是否需要先有一个有效的分区表,然后才能访问任何数据。我该如何恢复它?
主机系统:Linux(Fedora 28)、虚拟机管理器客户系统:Windows 7、Windows 2016
更新
# dnf history info 92
Packages Altered:
Upgraded ethtool-2:4.17-1.fc28.x86_64 @updates
Upgrade 2:5.0-1.fc28.x86_64 @updates
Upgraded fuse-common-3.4.2-2.fc28.x86_64 @updates
Upgrade 3.4.2-6.fc28.x86_64 @updates
Erase kernel-4.20.16-100.fc28.x86_64 @updates
Install kernel-5.0.16-100.fc28.x86_64 @updates
Erase kernel-core-4.20.16-100.fc28.x86_64 @updates
Install kernel-core-5.0.16-100.fc28.x86_64 @updates
Upgraded kernel-headers-5.0.9-100.fc28.x86_64 @updates
Upgrade 5.0.16-100.fc28.x86_64 @updates
Erase kernel-modules-4.20.16-100.fc28.x86_64 @updates
Install kernel-modules-5.0.16-100.fc28.x86_64 @updates
Erase kernel-modules-extra-4.20.16-100.fc28.x86_64 @updates
Install kernel-modules-extra-5.0.16-100.fc28.x86_64 @updates
Upgraded libqb-1.0.3-4.fc28.x86_64 @fedora
Upgrade 1.0.5-1.fc28.x86_64 @updates
Upgraded libxcrypt-4.4.4-2.fc28.x86_64 @updates
Upgrade 4.4.6-1.fc28.x86_64 @updates
Upgraded libxcrypt-devel-4.4.4-2.fc28.x86_64 @updates
Upgrade 4.4.6-1.fc28.x86_64 @updates
Upgraded libzstd-1.3.8-1.fc28.x86_64 @updates
Upgrade 1.4.0-1.fc28.x86_64 @updates
Upgraded mediawriter-4.1.2-1.fc28.x86_64 @updates
Upgrade 4.1.4-1.fc28.x86_64 @updates
Upgraded microcode_ctl-2:2.1-26.fc28.x86_64 @updates
Upgrade 2:2.1-29.fc28.x86_64 @updates
答案1
我怀疑以下事情:
- 大小(在第一个输出中显示 16,检查该机器的默认其他节点)
可以是 b (8 位)、h (16 位)、w (32 位) 或 g (64 位)。在 x86 上,可以使用 i 格式指定 h 或 w,以分别选择 16 位或 32 位代码指令大小。
compat(可能两个版本不同)
确定要使用的 qcow2 版本。 compat=0.10 使用可由任何 QEMU(自 0.10 起)读取的传统图像格式。 compat=1.1 启用只有 QEMU 1.1 及更新版本才能理解的图像格式扩展(这是默认设置)。其中包括零集群,它允许对稀疏图像进行高效的读取时复制。
尝试使源和目标相同。