问题的出现
我打开一个虚拟机, VMware 报错

报错: VMware 找不到文件: D:\Virtual Machines\openStack\openStack.vmdk
然后我去对应的路径找 openStack.vmdk, 发现那个文件就在对应的路径下, 文件路径没问题
我尝试运行虚拟机, 依旧报错
但在报错的对话框中点击浏览, 再点击 openStack.vmdk 也能正常启动虚拟机
我就纳闷了, 明明文件就在那, 为什么 VMware 会给我报个 "找不到文件" 的错误?
引起问题的原因
VMware 报错前, 我曾做过一个非正常的操作
首先, 我创建了4个大小为20GB的虚拟硬盘, 并挂载至虚拟机上
然后, 我嫌4个虚拟硬盘太占空间, 遂取消挂载并删除4个虚拟硬盘,改为4个2GB的虚拟硬盘
但我发现, 4个虚拟硬盘仍然存在于物理硬盘上, 占用着磁盘空间(即 openStack-s001.vmdk 系列文件)
于是我手动删除这些虚拟硬盘文件
删除这些文件后, VMware 的报错就来了
我猜测, 可能是 VMware 关于虚拟机硬盘的配置与实际不符, 造成报错
配置文件
.vmdk 本质上是一个配置文件, 里面存储的是字符串, 可用记事本打开
vmx 配置文件
VMware 的虚拟机启动依赖 .vmx 配置文件, 这个配置文件详细记录了虚拟机需要的
虚拟硬件信息, 其中就有启动磁盘文件的相关配置
vmxf 配置文件
在 .vmx 配置文件中, 有一个名叫 extendedConfigFile 的配置项
译为: 扩展配置文件
extendedConfigFile = "openStack.vmxf"顾名思义, vmxf 的作用就是一个扩展的配置文件
vmdk 配置文件
.vmdk 是关于虚拟机磁盘的描述文件
openstack.vmdk 文件:
# Disk DescriptorFile
...
# Extent description
RW 8323072 SPARSE "openStack-s001.vmdk"
RW 8323072 SPARSE "openStack-s002.vmdk"
RW 8323072 SPARSE "openStack-s003.vmdk"
RW 8323072 SPARSE "openStack-s004.vmdk"
RW 8323072 SPARSE "openStack-s005.vmdk"
RW 327680 SPARSE "openStack-s006.vmdk"结合之前所说的, openStack-s001.vmdk 是我原先删除的虚拟磁盘文件
该文件下描述的 .vmdk 文件并不存在
解决方法
在 VMware 中, 导致这类报错的原因各种各样, 没有一个统一的解决办法, 要针对性的进行分析.
查看前面描述的三个配置文件, 发现 openstack.vmdk 文件中的部分描述内容与实际不符
因此删除或注释 # Extent description 下所有有关 openStack-s00x.vmdk 的描述
openstack.vmdk 文件:
# Disk DescriptorFile
...
# 全部注释掉
# Extent description
# RW 8323072 SPARSE "openStack-s001.vmdk"
# RW 8323072 SPARSE "openStack-s002.vmdk"
# RW 8323072 SPARSE "openStack-s003.vmdk"
# RW 8323072 SPARSE "openStack-s004.vmdk"
# RW 8323072 SPARSE "openStack-s005.vmdk"
# RW 327680 SPARSE "openStack-s006.vmdk"删除或注释后, 再次运行虚拟机, 无报错, 成功解决(╹ڡ╹ )
3 条评论
我没明白,你的意思是要进入openstack.vmdk里将哪些描述注释掉的话,一个vmdk文件就几个G呀,记事本根本打不开的呀
名称格式为虚拟机名-编号.vmdk, 这种 vmdk 文件是虚拟机的虚拟硬盘,自然改不了一点.
要用记事本打开的 vmdk 文件名称格式是 虚拟机名.vmdk 这种 vmdk 文件一般只有 1kb 的大小,要改注释的是这个文件.
我还是把我的vmdk给拿出来重新建了个虚拟机给导进去了,我那个centos7.vmdk都5G了....不知道咋回事