问题的出现
我打开一个虚拟机, 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"
删除或注释后, 再次运行虚拟机, 无报错, 成功解决(╹ڡ╹ )