VMware:无法打开磁盘G;\******.vmdk 或者某一个快照所依赖的磁盘

时间:2022-06-01 20:47:39

虚拟机版本:VMware10.0.

虚拟机操作系统:Windows server 2008 64 R2 

宿主机:win7 utimate

1 问题描述:

    不知道什么原因,我的虚拟机每次关闭的时候都很长时间是黑屏,强制关闭的时候提示虚拟机系统正忙,还没有关闭,所以我就会强制关机,今天突然打不开虚拟机了

报错如下:无法打开磁盘G;\******.vmdk 或者某一个快照所依赖的磁盘

2 网上解决办法:

    1  删除虚拟机配置文件和虚拟磁盘文件夹的所有以.lck结尾的文件以及文件夹,试了不行,然后又删除cache文件,都不行

    2 新建一个空的虚拟机,配置磁盘的时候指向已有的上述虚拟机的磁盘,这样我可以启动起来,但我有很多后缀为.vmdk格式的虚拟磁盘文件,打开某一个或者某几个都不是我想要的,里面的很多东西都是不完整的,不过这也让我对.vmdk格式的文件注意起来

3 最终解决办法

    由于我安装的时候的虚拟磁盘是自动扩展的,虚拟机目录下有很多.VMDK格式的文件,我挨个点开比较小的文件看了看,大体知道了一点内容:
虚拟磁盘是分父磁盘和子磁盘的,磁盘的大小和引用都要注意父子里面的配置是一致的,首先看一下我的虚拟机目录:
│  Windows Server 2008 R2 x64-0-000002-s001.vmdk
│  Windows Server 2008 R2 x64-0-000002-s002.vmdk
│  Windows Server 2008 R2 x64-0-000002-s003.vmdk
│  Windows Server 2008 R2 x64-0-000002-s004.vmdk
│  Windows Server 2008 R2 x64-0-000002-s005.vmdk
│  Windows Server 2008 R2 x64-0-000002-s006.vmdk
│  Windows Server 2008 R2 x64-0-000002-s007.vmdk
│  Windows Server 2008 R2 x64-0-000002-s008.vmdk
│  Windows Server 2008 R2 x64-0-000002-s009.vmdk
│  Windows Server 2008 R2 x64-0-000002-s010.vmdk
│  Windows Server 2008 R2 x64-0-000002-s011.vmdk
│  Windows Server 2008 R2 x64-0-000002-s012.vmdk
│  Windows Server 2008 R2 x64-0-000002-s013.vmdk
│  Windows Server 2008 R2 x64-0-000002-s014.vmdk
│  Windows Server 2008 R2 x64-0-000002-s015.vmdk
│  Windows Server 2008 R2 x64-0-000002-s016.vmdk
│  Windows Server 2008 R2 x64-0-000002-s017.vmdk
│  Windows Server 2008 R2 x64-0-000002-s018.vmdk
│  Windows Server 2008 R2 x64-0-000002-s019.vmdk
│  Windows Server 2008 R2 x64-0-000002-s020.vmdk
│  Windows Server 2008 R2 x64-0-000002-s021.vmdk
│  Windows Server 2008 R2 x64-0-000002.vmdk
│  Windows Server 2008 R2 x64-0-000002.vmdk.bak
│  Windows Server 2008 R2 x64-0-000004-s001.vmdk
│  Windows Server 2008 R2 x64-0-000004-s002.vmdk
│  Windows Server 2008 R2 x64-0-000004-s003.vmdk
│  Windows Server 2008 R2 x64-0-000004-s004.vmdk
│  Windows Server 2008 R2 x64-0-000004-s005.vmdk
│  Windows Server 2008 R2 x64-0-000004-s006.vmdk
│  Windows Server 2008 R2 x64-0-000004-s007.vmdk
│  Windows Server 2008 R2 x64-0-000004-s008.vmdk
│  Windows Server 2008 R2 x64-0-000004-s009.vmdk
│  Windows Server 2008 R2 x64-0-000004-s010.vmdk
│  Windows Server 2008 R2 x64-0-000004-s011.vmdk
│  Windows Server 2008 R2 x64-0-000004-s012.vmdk
│  Windows Server 2008 R2 x64-0-000004-s013.vmdk
│  Windows Server 2008 R2 x64-0-000004-s014.vmdk
│  Windows Server 2008 R2 x64-0-000004-s015.vmdk
│  Windows Server 2008 R2 x64-0-000004-s016.vmdk
│  Windows Server 2008 R2 x64-0-000004-s017.vmdk
│  Windows Server 2008 R2 x64-0-000004-s018.vmdk
│  Windows Server 2008 R2 x64-0-000004-s019.vmdk
│  Windows Server 2008 R2 x64-0-000004-s020.vmdk
│  Windows Server 2008 R2 x64-0-000004-s021.vmdk
│  Windows Server 2008 R2 x64-0-000004.vmdk
    上面中有两行标记为红色的文件,打开它后,里面的内容其实是其他内容的一个索引,我们来看一下 Windows Server 2008 R2 x64-0-000004.vmdk这个文件的内容:
# Disk DescriptorFile
version=1
encoding="GBK"
<span style="font-size:14px;color:#cc0000;">CID=681eb4c4
parentCID=a3bd705b</span>
isNativeSnapshot="no"
createType="twoGbMaxExtentSparse"
parentFileNameHint="<span style="font-size:14px;color:#990000;">Windows Server 2008 R2 x64-000002.vmdk</span>"
# Extent description
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s001.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s002.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s003.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s004.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s005.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s006.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s007.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s008.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s009.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s010.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s011.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s012.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s013.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s014.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s015.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s016.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s017.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s018.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s019.vmdk"
RW 4192256 SPARSE "Windows Server 2008 R2 x64-000004-s020.vmdk"
RW 40960 SPARSE "Windows Server 2008 R2 x64-000004-s021.vmdk"


# The Disk Data Base
#DDB


ddb.longContentID = "85083ef289ef211d1911ea81681eb4c4"
    我仔细比较了我目录下的文件和几个磁盘文件的索引文件,发现少了一个文件如下:
Windows Server 2008 R2 x64-000002-s001.vmdk
    具体解决办法:

    1 增加没有的文件

复制一个其他的文件(Windows Server 2008 R2 x64-000004-s001.vmdk),重命名为Windows Server 2008 R2 x64-000002-s001.vmdk
这时候再打开虚拟机,错误已经改变,至少让我看到希望,错误如下:
 “父虚拟磁盘在子虚拟磁盘创建之后被修改过。父虚拟磁盘的内容 ID 与子虚拟磁盘中对应的父内容 ID 不匹配”,这个错误的意思就是我的索引里面上下不一致,这可能是由于我在上面新建了一个其他的虚拟机,然后指向已有的磁盘文件导致索引改变造成的

    2 更改索引文件中的:parentCID,即下面这两行

CID=681eb4c4
parentCID=a3bd705b
更改这两行注意参考
parentFileNameHint="Windows Server 2008 R2 x64-000002.vmdk"
    最终虚拟机起来了,我的应用和数据都还在,谢天谢地