VMDK 是什么
VMDK 是 VMware 的虚拟磁盘格式,一个磁盘通常由描述符(文本文件,记录几何参数、extent 列表与父盘关系)加一个或多个 extent 数据文件组成。变体决定空间分配方式与性能:thin 按需增长、thick 预分配(分 lazy zeroed 与 eager zeroed)、streamOptimized 面向 OVF 导出与上传。ESXi 主机内用 vmkfstools 操作,跨平台可用 qemu-img 查看与转换。
基本信息
| 组成 | descriptor(文本头)+ extent(-flat/-delta 数据文件) |
|---|---|
| 常见变体 | thin、thick lazy/eager zeroed、streamOptimized |
| 常用工具 | vmkfstools(ESXi 主机内)/ qemu-img(跨平台转换) |
| 查看方式 | qemu-img info disk.vmdk,或直接查看描述符文本 |
| 置备类型 | thin 按需分配;thick 预先占用空间,eager 额外做全盘清零 |
典型使用场景
- 导出 OVF 模板或上传镜像时使用 streamOptimized 变体
- 克隆虚机时在 thin 与 thick 之间选择,权衡空间与性能
- 把 VMDK 转换成 qcow2/vhdx 以迁移到其他虚拟化平台
- 存储空间告警时区分 thin 磁盘的逻辑容量与实际占用
- 排查磁盘挂载失败时核对描述符中的 extent 行与文件是否对应
查看与转换
查看与转换
qemu-img info disk.vmdk # 查看格式变体、虚拟大小与实际占用
qemu-img convert -p -O qcow2 disk.vmdk disk.qcow2 # 转成 qcow2,-p 显示进度
# ESXi 主机内克隆并按 thin 置备:
vmkfstools -i src.vmdk -d thin /vmfs/volumes/ds1/vm1/dst.vmdk变体与用途
| 变体 | 空间分配 | 典型用途 |
|---|---|---|
| thin | 按写入增长,初始占用很小 | 普通虚机磁盘,节省数据存储容量 |
| thick lazy zeroed | 创建时占满逻辑容量,块首次写入时清零 | 对空间占用可预期的场景,性能略优于 thin |
| thick eager zeroed | 创建时即全盘清零 | 需要快速置备或做集群/容灾的场景 |
| streamOptimized | 紧凑压缩、仅供流式读写 | OVF 导出与镜像上传,不适合直接挂载运行 |
用 qemu-img 转换 VMDK 会丢失 VMware 专有元数据(例如快照链信息);转换前先在 VMware 侧合并或删除快照,再导出单一平铺磁盘。
描述符中的 extent 行决定数据落点,手工编辑前务必备份整个虚机目录,并确认文件名与 .vmx 中的引用一致。
thin 磁盘在数据存储上存在超分风险:多个虚机初始只占少量空间,实际写入增长后可能同时撑满数据存储,容量规划要按可预期的写入量而非初始占用估算。