VMware 虚拟机核心文件格式详解

发布时间: 更新时间: 总字数:2680 阅读时间:6m 作者:IP:上海 网址

本文系统梳理 VMware 虚拟机在 Workstation/Fusion 与 ESXi/vSphere 两类环境下的核心文件体系:逐项解析 .vmx 主配置、.vmdk 虚拟磁盘及其 flat、sesparse、RDM 变体,以及 .nvram、.vmem、.vmsd、.vmsn 等配置、状态与快照文件的格式与作用,并结合 Broadcom 官方文档厘清快照链命名规则与桌面版、服务器版之间的关键差异。

概述

严格来说,VMware 中真正的“磁盘文件”是 .vmdk 及其衍生文件,而 .vmx 是虚拟机的主配置文件。一个虚拟机目录中往往同时存在配置、磁盘、快照、内存状态与日志等多类文件,它们共同构成虚拟机的完整可恢复状态。理解每类文件的角色,是虚拟机迁移、备份、快照清理与故障排查的基础。

核心文件总览

扩展名分类全称 / 含义作用说明
.vmdk磁盘虚拟磁盘文件 (Virtual Machine Disk)核心磁盘文件。在 Workstation 中通常直接包含磁盘数据(或分割为多个分卷);在 ESXi 中通常只是一个纯文本描述符文件,记录磁盘几何结构并指向实际存数据的 -flat.vmdk
-flat.vmdk磁盘扁平化数据文件 (Flat Disk Data)主要存在于 ESXi 中,是实际存储虚拟硬盘二进制数据的文件,占用真实物理存储空间。官方文档明确:该文件在 Datastore Browser 中不单独显示
-delta.vmdk / -sesparse.vmdk磁盘 (快照)快照增量磁盘 (Delta / SEsparse)打快照后原虚拟磁盘变为只读,系统生成增量文件记录其后所有写入。vSphere 官方文档确认:SEsparse 是 VMFS6 数据存储上所有 delta disk 的默认格式
-rdm.vmdk磁盘裸设备映射文件 (Raw Device Mapping)仅用于 ESXi 的 RDM 模式。官方文档:该文件与普通虚拟磁盘同为 .vmdk 扩展名,但只包含映射信息,实际数据直接存放在 SAN LUN 上
.vmx配置虚拟机主配置文件 (VM Configuration)虚拟机的“大脑”。纯文本文件,记录全部硬件配置(内存大小、CPU 核数、MAC 地址、vmdk 路径等)。早期 Linux 宿主机上曾使用 .cfg 扩展名
.vmxf配置补充配置文件 (Supplemental Config)XML 格式补充配置,历史上与 Workstation 的 Team(团队)功能相关。Workstation Pro 17 官方文件列表中已不再列出该文件
.nvram配置非易失性内存文件 (Non-Volatile RAM)相当于物理主板的 CMOS,保存虚拟机 BIOS/UEFI 固件设置(如启动顺序)
.vmem状态内存分页文件 (VM Memory / Paging)虚拟机开机运行时产生,充当客户机主内存的后备文件。仅虚拟机运行(或异常宕机)期间存在;带内存的快照也会产生对应的 .vmem
.vmss状态挂起状态文件 (Suspended State)保存挂起虚拟机的完整状态,开机时存在、恢复后删除。早期 VMware 产品曾使用 .std 扩展名
.vswp状态虚拟机交换文件 (VM Swap)ESXi 上开机时创建、关机时删除,大小约为分配内存减去内存预留量 (reservation)
.vmsd快照快照字典文件 (Snapshot Dictionary)纯文本文件,集中记录快照树结构、快照间依赖关系与相关文件路径,是 Snapshot Manager 的主要信息来源。无快照时该文件通常为空
.vmsn快照快照状态文件 (Snapshot State)创建快照时生成(如 vmname.Snapshot1.vmsn),保存快照那一刻虚拟机的运行状态;若勾选“包含内存”,其中还保存完整内存内容,可恢复到开机状态的快照点
.log日志运行日志文件 (VMware Log)通常为 vmware.log(滚动生成 vmware-1.log 等)。记录启动、硬件初始化与错误信息,是虚拟机无法启动、崩溃等问题排错的首要文件

磁盘文件体系:.vmdk 家族

基础磁盘:描述符与数据分离

在 ESXi/VMFS 环境下,一块基础磁盘由两个文件组成:

  • vmname.vmdk(或 vmname_1.vmdk 等按磁盘序号命名):体积很小的描述符文件,记录磁盘几何结构、父子关系(快照链)等元数据;
  • vmname-flat.vmdk:与描述符同名的扁平化数据文件,存放真正的二进制数据。

Datastore Browser 为防止误删,会自动将二者折叠显示为一个 .vmdk 文件;通过 SSH 登录 ESXi 命令行则能看到两个分离的文件:

bash
# SSH 登录 ESXi 主机,查看虚拟机目录中的完整文件列表
ls -lah /vmfs/volumes/datastore1/my-vm/

# 典型输出(注意描述符很小、flat 文件才占真实空间):
# -rw------- 1 root root          466 Nov  2 10:12 my-vm.vmdk
# -rw------- 1 root root 21474836480 Nov  2 10:12 my-vm-flat.vmdk

描述符文件丢失或损坏时,虚拟机会报 “File not found” 无法开机,可参照 Broadcom KB 321422 使用 vmkfstools -c <size> -d thin temp.vmdk 生成新描述符后改造复用。

快照增量磁盘:delta 与 sesparse

每次创建快照时,原磁盘变为只读基盘,系统生成一条增量磁盘链。官方文档将这类文件称为 child disk(子盘)或 redo log(重做日志),每块增量磁盘同样由“小描述符 + 数据文件”组成:

  • 旧格式:vmname_1-000001-delta.vmdk(VMFS 早期版本);
  • 新格式:vmname_1-000001-sesparse.vmdk,其中 000001 为按目录内已有文件递增生成的六位序号。

SEsparse(Space-Efficient Sparse)采用更小的分配粒度,显著降低快照链占用的空间,在 VMFS6 数据存储上已成为 delta disk 的默认格式。这也是“删除所有快照后目录仍长期占用空间”时应当检查的对象——快照合并期间数据会持续写回基盘。

RDM:裸设备映射

RDM (Raw Device Mapping) 用于让虚拟机直接访问 SAN/LUN 物理存储。映射文件放在 VMFS 数据存储上,.vmdk 扩展名与普通磁盘相同,但内容只是指向 LUN 的映射元数据;实际数据完全不经过该文件。映射文件命名上,虚拟兼容模式通常为 name-rdm.vmdk,物理兼容模式为 name-rdm-p.vmdk,这一后缀约定源自 VMware 传统 KB 文档。

桌面版与服务器版的差异

VMware Workstation / Fusion(桌面版)

  • 磁盘可选择“单文件”或“分割为多个 2GB 分卷”:可增长磁盘命名为 vmname-s001.vmdk、vmname-s002.vmdk(s 表示 split/growable),预分配磁盘则带 f 前缀编号(如 vmname-f001.vmdk)。分割方案主要为了兼容 FAT32 等单文件 2GB 上限的老旧文件系统,并便于拷贝移动;
  • 配置、磁盘、日志等文件默认集中在虚拟机目录下,直观可见;
  • 快照增量文件直接以 vmname-disk-###.vmdk 形式出现(官方文档称其为 redo log)。

VMware ESXi / vSphere(服务器版)

  • 磁盘采用 Thin/Thick Provisioning 模式,不进行桌面版那样的 2GB 切割,而是严格区分“描述符 .vmdk”与“数据 -flat.vmdk”两个文件;
  • 除磁盘外,运行期还会生成 .vswp 交换文件(默认与虚拟机目录同位,可通过集群 Swapfile Location 设置迁移到独立数据存储);
  • Datastore Browser 将 .vmdk 与 -flat.vmdk 折叠显示为同一个文件,只有 SSH 命令行能看到真实布局。

实践建议:迁移与备份的最小文件集

完整迁移一台虚拟机(脱离 vCenter 导出场景)至少需要携带:

  • .vmx(主配置,可手工检查或修正硬件定义)
  • 全部 .vmdk 描述符及对应的数据文件(-flat.vmdk、-sesparse.vmdk、-delta.vmdk 或 2GB 分卷,一个都不能少)
  • .nvram(保留固件设置,避免客户机启动顺序错乱)

快照相关文件(.vmsd、.vmsn 及增量磁盘)只有在需要保留快照历史时才必须一并复制;若仅关心最终状态,建议先在源端删除(合并)所有快照再迁移,可显著减小体积。单独拷贝 -flat.vmdk 或任何增量数据文件而不带描述符,都会导致磁盘无法被识别——这是实践中最常见的“拷贝后开不了机”事故来源。故障排查时,优先阅读 vmware.log 中最早的 ERROR 行,绝大多数启动失败都能在日志中定位到具体设备或文件缺失。

参考

  1. https://techdocs.broadcom.com/us/en/vmware-cis/desktop-hypervisors/workstation-pro/17-0/using-vmware-workstation-pro/creating-virtual-machines-in-workstation-user-guide/virtual-machine-files.html
  2. https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-virtual-machine-administration/managing-virtual-machines/using-snapshots-to-manage-virtual-machines/snapshot-file-names-and-description.html
  3. https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-storage/raw-device-mapping-in-vsphere.html
  4. https://knowledge.broadcom.com/external/article/321422/recreating-a-missing-vmware-virtual-mach.html