虚拟机导出vmdk文件的标准步骤是:先在vCenter或vSphere Client中关闭虚拟机,然后通过“导出OVF模板”功能获取OVF和vmdk,或在VMware Workstation中直接复制关机后的vmdk文件。 看似简单,但实际操作中很多人分不清“导出”和“复制”的区别,导致拿到的文件无法被其他平台识别,下面按场景拆解完整的操作流程。
虚拟机导出vmdk文件步骤是什么?先分清OVF与vmdk的形态差异
vmdk是VMware虚拟磁盘的原始格式,它本身就是一个硬盘镜像文件,而OVF是一种打包标准,导出的OVF模板里通常包含.ovf配置文件和.vmdk虚拟磁盘文件,搞清楚这一点,你才能理解为什么不同场景下的“导出”操作长得完全不一样。
- vSphere平台导出OVF模板:最终产物是OVF + VMDK 两个文件,适合迁移到其他虚拟化平台。
- Workstation本地复制vmdk:直接拷贝工作目录下的.vmdk文件,适合简单备份或手动挂载。
- 命令行工具导出:用ovftool或vmkfstools手动提取vmdk,适合批量处理和自动化脚本。
行业共识认为,绝大多数“导出vmdk”需求都来自虚拟机迁移,而OVF导出是最安全、兼容性最高的方式,如果你只是想要一个单独的.vmdk文件,那完全可以直接复制,但必须确保虚拟机处于关机状态,否则文件处于使用中状态,复制出来的数据不完整。
vmware虚拟机vmdk文件怎么导出?本地场景下的完整操作路径
在VMware Workstation或Fusion里,导出vmdk没有一键式按钮,很多人因此卡住,实际上有两条主流路径,你可以根据当前环境选择。
直接复制工作目录中的vmdk文件
先在虚拟机里执行关机操作,然后打开虚拟机的工作目录(默认路径是D:\Virtual Machines\虚拟机名称),你会看到至少两个带vmdk后缀的文件:
- 虚拟机名称.vmdk:这是描述文件,体积很小,记录虚拟磁盘的元数据。
- 虚拟机名称-flat.vmdk:真正存放数据的文件,体积等于虚拟磁盘分配的大小。
复制时必须把这两个文件放在一起,并且保持文件名一致,如果你只复制了-flat.vmdk,其他工具无法识别,如果是IDE接口的旧虚拟机,还可能看到

-s001.vmdk之类的分卷文件,这些也要一起拷贝。
用ovftool导出vmdk文件到本地目录
ovftool是VMware官方提供的转换工具,装在vSphere Client或单独安装包里,它可以从运行中的虚拟机上导出vmdk,而无需关机,但为了数据一致性,建议先关虚拟机,命令格式如下:
ovftool --acceptAllEulas --overwrite vi://root@ESXI_IP/虚拟机名称 D:\export\目标虚拟机.ovf
执行后,目标目录里会自动生成.ovf和-disk1.vmdk,这个vmdk是精简格式,比原始平面文件更紧凑,适合上传到云平台或重新导入虚拟机。
假设你已经在kvm平台上想使用这个vmdk,直接用qemu-img convert也可以,但那是另一套流程,对于多数用户,直接复制工作目录文件就是最快捷的“vmware虚拟机vmdk文件怎么导出”答案。
ESXi主机上导出vmdk文件到本地电脑的三种实际做法
服务器场景下,vmdk存在ESXi的数据存储里,你无法像本地磁盘那样直接拷贝,导出vmdk文件到本地电脑时,需要借助管理界面或命令行。
vSphere Client的存储浏览器
- 登录vSphere Client,切换到“存储”视图。
- 选择对应的数据存储,找到虚拟机文件夹。
- 其中
虚拟机名称.vmdk是描述文件,虚拟机名称-flat.vmdk是数据文件。 - 右键点击
flat.vmdk,选择“下载”,浏览器就会开始下载数据文件。
这个方法的局限是只能下载单独的文件,且没有描述文件,下载后你需要手动创建一个同名的.vmdk描述文件,再配合这个flat文件才能在其他虚拟机里使用,更推荐的方法是用OVF导出,因为会自动生成全部配套文件。
vCenter中的“导出OVF模板”
在vCenter列表里选择虚拟机,确保该虚拟机已经关机,
- 右键虚拟机,选择“模板” > “导出为OVF模板”。
- 在弹窗中指定本地目录。
- 等待导出完成,检查目录中的
.ovf和.vmdk文件。
如果虚拟机处于开机状态,导出时会自动创建VM快照,快照可能暂时冻结I/O,影响业务,业内专家指出,生产虚拟机最好在维护窗口执行导出,避免数据不一致。

SSH + vmkfstools命令行导出
对于习惯命令行的管理员,可以先用SSH登录ESXi主机,然后使用vmkfstools连接数据存储中的VMDK,但注意,vmkfstools本身不提供“复制到本地”的功能,你需要结合scp或sftp将提取出的vmdk文件拉到本地,典型流程:
# 登录ESXi ssh root@esxi_ip # 查找虚拟机vmdk位置 vmkfstools --list /vmfs/volumes/datastore1/ # 使用scp下载描述文件和flat文件 scp root@esxi_ip:/vmfs/volumes/datastore1/虚拟机/虚拟机-flat.vmdk D:\export\
这种方式适合做自动化备份,但步骤繁琐,新手容易把文件权限搞错,如果你只需要一次性导出,OVF模板方式更靠谱。
导出vmdk文件到本地电脑时报错怎么办?高频问题排查
实际操作中,大多数卡点集中在这几个现象上。
vmdk文件被锁定导致无法复制或导出
虚拟机关机后,文件仍可能残留一个-lck文件夹,这是VMware会话留下的锁机制,解决办法是重启VMware服务,或者删除工作目录下的-lck文件夹,但删除锁文件前必须确认没有其他VMware进程正在访问该vmdk,否则会损坏磁盘。
导出的vmdk无法在VirtualBox或KVM中启动
这是因为vmdk有两种格式:固定大小和动态增长,VirtualBox虽然支持vmdk,但它对固定大小vmdk的支持更稳定,动态增长vmdk在性能不佳时会有错误,建议用vmkfstools -i 原文件 目标文件 -d zerofilled转换格式,然后再导入其他平台。
导出后vmdk文件比实际占用空间大很多
多数情况下这是磁盘预分配造成的,如果你创建虚拟机时选择了“立即分配所有空间”,那么vmdk文件大小就等于磁盘上限,可以先用ovftool导出,它会自动生成较低占用的精简vmdk,统计数据表明,大多数动态增长vmdk的导出大小会缩减到原始分配量的30%至60%。
用ovftool批量导出多个vmdk的实战细节
如果你有几十台虚拟机要迁移,手动右键导出一个个操作显然不现实,ovftool支持批量处理,我们可以写一个简单脚本循环执行。
以下是一个Windows批处理示例,省略了部分细节,但足够展示思路:
@echo off for /f %%i in (vm_list.txt) do ( ovftool --acceptAllEulas --overwrite vi://admin@esxi_ip/%%i D:\export\%%i.ovf echo 已导出 %%i )

需要注意,批量导出时尽量关闭所有虚拟机,否则每个导出任务都会触发快照,可能导致存储空间吃紧,同时建议检查本地磁盘空间,因为OVF会包含所有磁盘内容,一个2TB的vmdk导出后仍然是约2TB(如果你保留了完整格式),如果空间紧张,可以在命令中添加--vmdkName参数指定精简格式。
关于vmdk导出频率与备份策略的小建议
导出vmdk文件的本质是备份整个虚拟磁盘,如果你的虚拟机里有数据库或关键业务系统,那么单纯依赖vmdk导出不够实时,更好的做法是配合Veeam、vSphere Data Protection等定期备份工具,但作为应急逃生通道,手动导出vmdk每次只需要5-10分钟,适合在重大变更前做一次快照式存档。
导出的vmdk文件可以挂载到其他虚拟机中:新建一台空虚拟机,然后添加现有磁盘,选择该vmdk文件,即可读取数据,这比整个导入虚拟机更快,也是验证备份有效性的常用手段。
Q&A:关于虚拟机导出vmdk文件步骤是什么,还有哪些延伸问题
问:vmdk文件怎么打开?
如果你在Windows操作系统,直接用VMware Workstation打开的方法是:新建虚拟机,选择“使用现有虚拟磁盘”,定位到vmdk文件即可,如果只是查看数据而不启动系统,可以使用7-Zip解压工具,它支持读取vmdk文件内容,但无法解析虚拟分区结构,无法直接看到系统文件。
问:导出的vmdk文件可以转换为qcow2格式吗?
可以,使用qemu-img convert -f vmdk -O qcow2 disk.vmdk disk.qcow2命令即可,转换前最好将vmdk描述文件和flat文件放在同一目录,否则工具无法识别,转换完成后请务必校验目标qcow2文件的启动能力,因为vmdk中包含的UUID信息在转换后可能失效。
问:不关闭虚拟机能不能直接导出vmdk?
能,但风险较高,ovftool支持在线导出,它会在导出过程中创建虚拟机快照,如果虚拟机有高频写入,导出后的vmdk可能包含部分未落盘的数据,导致文件系统状态不一致,数据库类虚拟机尤其不建议在线导出,最稳妥的方式还是先关机再导出。