
摘要:创建虚拟机时,磁盘类型选「厚置备延迟置零」「厚置备立即置零」还是「精简置备」?控制器选LSI Logic SAS、Paravirtual SCSI还是NVMe?这些选项直接影响虚拟机的磁盘I/O性能和宿主机的存储占用。本文从vmdk文件结构出发,解析三种磁盘置备策略的底层机制,对比四种虚拟磁盘控制器的适用场景与性能差异,提供一套可复现的选型决策框架。
VMware Workstation创建虚拟机时,磁盘配置页面有三个选项:厚置备延迟置零、厚置备立即置零、精简置备。大多数用户直接点「下一步」,默认的「厚置备延迟置零」就过去了。
但在实际使用中,不同类型的磁盘置备方案,性能差距可以达到30%以上——这不是虚拟化平台的问题,而是分配策略与文件系统交互方式导致的固有差异。理解这些差异的本质,需要在vmdk文件层面进行分析。
vmdk(Virtual Machine Disk)是VMware的虚拟磁盘文件格式。一个虚拟磁盘在宿主机上由以下文件组成:
虚拟机名称.vmdk:描述符文件(几KB),纯文本,记录磁盘几何信息、置备类型、扩展数据文件的引用路径。虚拟机名称-flat.vmdk:数据文件(等于虚拟磁盘容量),存储实际的虚拟机数据块。仅在厚置备模式下存在。虚拟机名称-s0xx.vmdk:快照增量文件,每个快照对应一个增量,仅记录自快照创建后的变更数据块。虚拟机名称.vmsd:快照元数据,记录快照链结构。描述符文件可以用记事本打开查看。以一段典型的描述符内容为例:
# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=ab12cd34
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 83886080 VMFS "ubuntu-flat.vmdk"createType 字段决定了磁盘的置备类型。常见值包括:
vmfs:厚置备延迟置零vmfsZeroedthick:厚置备立即置零vmfsSparse 或 vmfsThin:精简置备这是VMware Workstation的默认选项。
分配机制:创建虚拟机时,宿主机立即分配全部指定容量(例如分配40GB,宿主机磁盘即刻减少40GB)。但数据文件中的每一个扇区不执行清零操作——清零发生在虚拟机首次写入该扇区时。
性能特征:
适用场景:对磁盘空间不敏感、需要一次性固定分配容量的场景。不适合频繁分配新磁盘块的数据库类负载。
分配机制:创建虚拟机时,立即分配全部容量,并且在分配过程中就对每个扇区执行清零。这意味着分配40GB磁盘时,40GB的写I/O在创建阶段全部完成。
性能特征:
适用场景:对磁盘I/O延迟敏感的场景,如数据库、消息队列、频繁创建和删除临时文件的编译流水线。也是VMware vSphere中容错(FT)功能的硬性要求。
分配机制:创建虚拟机时不预先分配磁盘空间。数据文件初始大小仅几MB,随着虚拟机内写入数据而动态增长。
性能特征:
适用场景:多虚拟机环境、宿主机磁盘空间有限、虚拟机实际数据量远小于分配容量的场景。
VMware Workstation支持四种虚拟磁盘控制器。控制器类型决定虚拟机与虚拟磁盘之间的I/O协议栈。
控制器 | 接口协议 | 最大吞吐量 | 驱动要求 | 适用场景 |
|---|---|---|---|---|
IDE | PATA | 约80MB/s | 所有OS通用 | 仅安装阶段或老旧OS |
SATA(AHCI) | SATA 3.0 | 约600MB/s | 主流OS内置 | 桌面虚拟机、一般负载 |
SCSI(LSI Logic SAS) | SAS | 约1.2GB/s | 需VMware Tools | 服务器类OS、数据库 |
NVMe | NVMe 1.3 | 约3.5GB/s | Win8+/Linux 3.3+ | 高I/O吞吐负载 |
Paravirtual SCSI | PVSCSI | 约2GB/s | 需VMware Tools | 企业级Linux/Windows Server |
选型建议:
注意:控制器类型的选择必须在创建虚拟机时确定。Windows虚拟机更换控制器类型通常会导致蓝屏(引导驱动不匹配),Linux需要重建initramfs。避免事后修改。
以下测试在同一台物理机上进行,使用CrystalDiskMark对比三种置备策略的表现。
测试环境:宿主机 Windows 11 + Samsung 980 Pro 1TB,虚拟机 Win10 22H2 / 4核 / 8GB / 80GB磁盘 / SATA AHCI控制器,CrystalDiskMark 8.0.4 SEQ1M Q8T1。
测试数据(三次平均值,单位 MB/s):
置备策略 | SEQ读 | SEQ写 | RND4K读 | RND4K写 |
|---|---|---|---|---|
厚置备立即置零 | 3420 | 3180 | 195 | 210 |
厚置备延迟置零 | 3410 | 2750 | 188 | 172 |
精简置备 | 3150 | 2410 | 165 | 148 |
结论:顺序写方面,厚置备立即置零比精简置备高约32%;随机4K写差距最大(42%),因为精简置备向新块写入时需动态扩展vmdk文件。读操作三者差距较小,因为读不触发归零或空间扩展。延迟置零的顺序写低于立即置零约14%,本质是每次写新扇区额外需要一次归零I/O。
将第三节的原理和第五节的实测数据结合,形成以下选型框架:
场景A:数据库/消息队列/编译服务器
场景B:多虚拟机测试环境(5台以上)
vmware-vdiskmanager -k 收缩精简磁盘回收未使用空间场景C:单台日常开发虚拟机
场景D:vSphere学习环境(嵌套ESXi)
收缩精简磁盘(回收虚拟机内已删除但vmdk未释放的空间):先在虚拟机内用 sdelete -z(Windows)或 dd if=/dev/zero(Linux)填零空闲空间,再在宿主机执行:
vmware-vdiskmanager -k "D:\VMs\ubuntu\ubuntu.vmdk"转换置备类型:-t 0 为精简→厚置备,-t 2 为厚置备→精简。
vmware-vdiskmanager -t 0 "source.vmdk" "target.vmdk"扩展容量:扩展后需在虚拟机OS内扩展分区(Linux:fdisk + resize2fs,Windows:「磁盘管理」→「扩展卷」)。
vmware-vdiskmanager -x 80GB "D:\VMs\ubuntu\ubuntu.vmdk"VMware Workstation的存储架构是虚拟化学习中常被跳过的一章,但它直接影响生产环境的I/O稳定性。从vmdk描述符到控制器选型到置备策略,理解这些选项的真实含义,比会点鼠标创建虚拟机重要得多。
获取渠道:VMware Workstation Pro 自2023年起对个人用户免费。下载链接:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html(需注册Broadcom账户)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。