问题的出现

我打开一个虚拟机, VMware 报错

VMware_error.jpg

报错: 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"

删除或注释后, 再次运行虚拟机, 无报错, 成功解决(╹ڡ╹ )

最后修改:2024 年 02 月 21 日
如果觉得我的文章对你有用,请随意赞赏