vmdk修复(VERR_VD_VMDK_INVALID_HEADER错误)

本文介绍了解决virtualbox和vmware同时访问同一vmdk文件导致的文件系统损坏问题。通过使用fsck工具从live-CD引导进入Linux进行修复,解决了虚拟机无法开机的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       同时使用virtualbox和vmware对同一个vmdk访问,经常造成vmdk文件系统损坏,导致虚拟机无法开机的现象。使用vmware的vmware-vdiskmanager.exe -R xxx.vmdk修复没发现任何错误,但是总是开机不了。

原来文件系统错误,不是vmdk出错。使用fsck 修复既可。

使用live-CD引导进入linux,fsck /dev/sda? 修复。也可以把损坏的vmdk当作第二硬盘挂载在另外一台可用的虚拟机linux里面

root@ubuntu-desktop:/home/ubuntu# fsck /dev/sdb1

fsck from util-linux-ng 2.17.2
e2fsck 1.41.11 (14-Mar-2010)
/dev/sdb1: 正在修复日志
正在清除  inode 457358 (uid=1000, gid=1000, mode=0100644, size=32768)
正在清除  inode 410347 (uid=1000, gid=1000, mode=0100600, size=74136)
正在截断  inode 159782 (uid=1000, gid=1000, mode=0140755, size=0)
/dev/sdb1: clean, 754620/1253376 files, 3741330/5012992 blocks (check in 4 mounts)

OK,修复完毕。

<think>我们遇到了一个转换后的VMDK文件无法添加到虚拟机的问题。根据提供的`qemu-img info`输出,该VMDK文件是`monolithicSparse`格式的,这种格式在部分虚拟机软件中可能兼容性不佳。以下是解决方案: ### 问题原因分析 1. **格式兼容性问题**: - `monolithicSparse`是VMware的一种稀疏磁盘格式,但VirtualBox等软件可能不完全支持 - 输出中`create type: monolithicSparse`表明这是单文件稀疏格式 2. **磁盘标识符冲突**: - `cid: 4184504182`是磁盘内容ID,如果虚拟机配置中与其他磁盘冲突会导致添加失败 3. **虚拟大小不匹配**: - 原始镜像120MB,但转换后磁盘大小显示为32.3MB,部分虚拟机软件可能误判实际大小 ### 解决方案 #### 方法1:转换为兼容性更好的格式 ```bash # 转换为streamOptimized格式(广泛兼容) qemu-img convert -f vmdk -O vmdk \ -o subformat=streamOptimized \ openwrt.vmdk \ openwrt_fixed.vmdk ``` #### 方法2:转换为VirtualBox原生格式(VDI) ```bash VBoxManage convertdd openwrt.vmdk openwrt.vdi --format VDI ``` #### 方法3:重建VMDK描述符文件(解决CID冲突) ```bash # 生成新的描述符文件 cat > openwrt_fixed.vmdk <<EOF # Disk DescriptorFile version=1 CID=fffffffe parentCID=ffffffff createType="monolithicSparse" # Extent description RW 126123520 SPARSE "openwrt-flat.vmdk" # The disk Data Base #DDB ddb.virtualHWVersion = "4" ddb.adapterType="ide" ddb.geometry.cylinders="16383" ddb.geometry.heads="16" ddb.geometry.sectors="63" ddb.uuid.image="$(uuidgen)" ddb.uuid.parent="00000000-0000-0000-0000-000000000000" ddb.uuid.modification="00000000-0000-0000-0000-000000000000" ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000" EOF # 重命名原始数据文件 mv openwrt.vmdk openwrt-flat.vmdk ``` ### 虚拟机添加技巧 1. **VirtualBox 特定操作**: ```bash # 创建虚拟机时选择"使用现有虚拟硬盘" # 如果报UUID冲突,执行: VBoxManage internalcommands sethduuid openwrt_fixed.vmdk ``` 2. **VMware Workstation 添加步骤**: - 新建虚拟机 → 自定义 → 选择Linux 5.x内核64位 - 磁盘选择"使用现有虚拟磁盘" - 浏览到转换后的VMDK文件 ### 故障排除命令 ```bash # 检查磁盘完整性 qemu-img check openwrt_fixed.vmdk # 尝试挂载分区验证内容 sudo kpartx -av openwrt_fixed.vmdk sudo mount /dev/mapper/loop0p2 /mnt ``` > **注意**:如果仍然无法启动,建议使用原始raw镜像直接转换到VDI格式,避免多次转换引入错误。 §§相关问题§§ 1. VMDK格式中monolithicSparse和streamOptimized子格式的主要区别是什么? 2. 虚拟机软件如何通过CID值检测虚拟磁盘变更? 3. 为什么稀疏格式的磁盘文件实际大小会小于虚拟大小? 4. 在VirtualBox中出现UUID冲突时,除了修改UUID还有哪些解决方案? 5. 如何在不转换格式的情况下让VMware兼容VirtualBox创建的VMDK文件?</think>根据您提供的 `qemu-img info` 输出和无法添加到虚拟机的问题,以下是详细分析和解决方案: ### 问题诊断 1. **VMDK 格式问题**: ```bash create type: monolithicSparse ``` - `monolithicSparse` 格式是 VMware 的专有稀疏格式,部分虚拟机平台(如 VirtualBox)兼容性较差 - 实际磁盘大小(32.3 MiB)远小于虚拟大小(120 MiB),可能导致某些虚拟机管理器无法正确处理 2. **常见错误场景**: - VirtualBox 报错:`VD: error VERR_VD_VMDK_INVALID_HEADER` - VMware 报错:`The file specified is not a virtual disk` - Proxmox 报错:`unsupported VMDK file format` ### 解决方案 #### 方法 1:转换为标准 VMDK 格式 ```bash # 转换到兼容性更好的格式 qemu-img convert -f vmdk -O vmdk \ -o subformat=streamOptimized,adapter_type=lsilogic \ openwrt.vmdk \ openwrt_fixed.vmdk ``` #### 方法 2:转换为其他虚拟机格式(推荐) ```bash # 转换为 VirtualBox 原生格式(VDI) VBoxManage convertfromraw --format VDI \ openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img \ openwrt.vdi # 或直接转换为 QCOW2(KVM/QEMU 使用) qemu-img convert -f raw -O qcow2 \ openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img \ openwrt.qcow2 ``` #### 方法 3:修复现有 VMDK 文件 ```bash # 1. 重建 VMDK 描述符 echo "RW 126123520 FLAT \"openwrt-flat.vmdk\" 0" > descriptor.vmdk # 2. 重命名原始文件 mv openwrt.vmdk openwrt-flat.vmdk # 3. 创建新描述文件 cat <<EOF > openwrt_fixed.vmdk # Disk DescriptorFile version=1 CID=fffffffe parentCID=ffffffff createType="monolithicFlat" # Extent description RW 126123520 FLAT "openwrt-flat.vmdk" 0 # The Disk Data Base #DDB ddb.virtualHWVersion = "15" ddb.adapterType="lsilogic" ddb.geometry.cylinders="16383" ddb.geometry.heads="16" ddb.geometry.sectors="63" ddb.uuid.image="$(uuidgen)" ddb.uuid.parent="00000000-0000-0000-0000-000000000000" EOF ``` ### 虚拟机添加指南 **VirtualBox**: 1. 创建新虚拟机 → Linux → Other Linux (64-bit) 2. 内存:256MB 3. 硬盘 → **使用现有虚拟硬盘** → 选择转换后的 VDI修复VMDK 4. 系统 → 主板 → 启用 EFI **VMware Workstation**: ```bash vmware-vdiskmanager -R openwrt_fixed.vmdk # 修复磁盘 vmware-mount openwrt_fixed.vmdk X: # 验证可挂载 ``` **Proxmox/KVM**: ```bash qm create 999 --name openwrt --memory 256 --net0 virtio,bridge=vmbr0 qm importdisk 999 openwrt.qcow2 local-lvm qm set 999 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-999-disk-0 ``` ### 验证命令 ```bash # 检查修复后的磁盘 qemu-img info openwrt_fixed.vmdk | grep -E "format|size" # 尝试挂载分区 sudo kpartx -av openwrt_fixed.vmdk sudo mount /dev/mapper/loop0p2 /mnt ``` > **重要提示**:如果原始镜像有分区表问题(如之前的讨论),请先修复分区表再转换格式,否则所有转换结果都无法启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值