在日常的 ESXi 运维工作中,虚拟磁盘(VMDK)的”置备模式”是影响性能、空间利用率和备份时间的关键配置。一块 200GB 的虚拟磁盘,实际占用多少物理空间?初次写盘会不会出现”卡顿”?这些都由置备模式决定。很多工程师在新建虚拟机时直接用默认一路回车,等到出现”精简置备磁盘已全部占用”告警,或者反过来”明明数据库要求厚置备却一直报 IO 抖动”时,才回过头来查 VMDK 模式——这时候再切换,往往就要面对”转换要停机吗””数据会不会丢””vmkfstools 命令怎么写”这一连串问题。
这篇文章会把 ESXi 虚拟磁盘的三种置备模式——厚置备延迟置零、厚置备立即置零、精简置备——一次性讲透,覆盖 vSphere Client 切换、vmkfstools 命令行转换和 PowerCLI 批量处理三种方式,并配上实战案例与数据备份注意事项。文中涉及的命令路径以 VMware vSphere 7.0/8.0 官方文档为准(个别参数在不同小版本间可能微调,请以官方最新文档为准)。
一、虚拟磁盘置备模式核心定义
ESXi 在虚拟机配置磁盘时,会在数据存储上创建一个或多个 VMDK 文件。VMDK 文件的空间分配策略分为三种,核心区别在于”空间何时分配”和”数据块何时置零”两个问题。
1. 厚置备延迟置零(Thick Provision Lazy Zeroed)
这是 vSphere Client 中”厚置备”选项的默认子类型。创建时立即为虚拟磁盘分配全部额定空间(例如 200GB 磁盘就立刻占满 200GB 数据存储容量),但空间内容不主动清零——首次写入数据时由 ESXi 内置的 zeroing 流程按需清零写回。
- 空间占用:创建瞬间等于额定容量,datastore 余量立刻被吃掉
- 写盘性能:日常写 IO 与 eagerzeroedthick 几乎一致;但首次写入新块会有一次性 zero 写入开销,单次最大 ~10-50ms,数据库密集场景可能抖动
- 典型场景:通用虚拟机、文件服务器、应用服务器;时间敏感度不高的负载
2. 厚置备立即置零(Thick Provision Eager Zeroed)
创建时即分配全部空间,并对所有数据块执行同步清零(zero write)操作。VMDK metadata 中以 eagerzeroedthick 标记。这一步耗时最长,1TB 磁盘通常需要 10-30 分钟(视存储介质性能而定),但换来的是首次写 IO 时没有任何延迟。
- 空间占用:同 lazyzeroedthick,创建即占满
- 写盘性能:零写入开销,全程稳定
- 关键依赖:是 Fault Tolerance(FT)容错、Microsoft Failover Clustering(MSFC)共享磁盘、Oracle RAC 等集群方案的强制前置条件
3. 精简置备(Thin Provision)
精简置备在创建时只分配小部分初始占用(VMFS 文件的元数据 + 少量预分配块),剩余空间按实际写入量动态增长——写一个 1GB 文件,VMDK 才增加 1GB 实际占用。
- 空间占用:最小化存储占用,节省成本
- 超分配风险:datastore 物理容量不够时,VM 会因”空间不足”直接停机或 I/O 中断,所以必须配合容量监控
- 写盘性能:较低负载下与厚置备无明显差异;高并发小块写场景会有 5-15% 性能损失(底层 block allocation + metadata 更新)
VMware ESXi、Workstation、PowerCLI 等企业级虚拟化软件一站式下载,覆盖安装、配置、批量运维全场景,企业 IT 工程师必备工具库。
前往下载 →二、三种模式对比表
| 维度 | Thick Lazy Zeroed | Thick Eager Zeroed | Thin Provision |
|---|---|---|---|
| 创建耗时(200GB 示例) | 秒级 | 5-15 分钟(写零开销) | 秒级 |
| 创建完成立即占用 | 200GB(满) | 200GB(满) | ≈0-数十 MB |
| 首次写 IO 延迟 | 偶有抖动(写零开销) | 无 | 可能略高 |
| 稳态写性能 | 高 | 最高 | 高(密集场景略低) |
| 空间利用率 | 1:1 | 1:1 | 按需 |
| FT/MSFC/RAC 兼容性 | 不支持 | 强制 | 不支持 |
| 超分配支持 | 否 | 否 | 是 |
从上表可以看出三种模式各有取舍:日常业务主选 lazy zeroedthick;集群关键业务必须 eagerzeroedthick;测试/DevOps/数据仓库的归档节点可优先 thin,节省存储预算。
三、切换前的数据安全准备
在执行任何转换前,必须做一次完整快照或备份。vmkfstools 在线转换理论上不会丢数据,但工程师们栽过的跟头主要集中在以下几类:
- 备份基线:使用 vSphere Client 给目标虚拟机建一个可移除快照(不参与调度链),或通过 Veeam/Commvault 等备份软件做一次完整备份
- 检查回收空间:thin → thick 会清零所有”已使用但可能为 0″的块,转换前最好在客户机内做 zero fill 回收,避免凭空填大块零数据浪费时间
- 计算耗时:200GB thick 转 thick 本质只改 metadata,几秒完成;thin 升 thick 时实际占用可能已经 800GB,转换需 800GB 全量清零,几小时到十几小时不等
- 数据存储余量:thick → thick 不需要额外空间;thin → thick 需要至少”目标虚拟磁盘额定容量”的连续 datastore 空间
- 业务窗口:厚置备立即置零转换是不可中断的,建议在维护窗口进行
四、vSphere Client 图形界面切换
适合单台、不便 SSH 登录 ESXi 主机且不愿意用命令行的场景。步骤如下:
- 关闭虚拟机电源
- 右键 → 编辑设置 → 选中要修改的硬盘 → 右侧弹出磁盘详情
- 展开右侧 Provision(置备)下拉框,选择目标模式(Thick → Thin / Thin → Thick / Eager Zeroed)
- 点击 OK,vCenter 会调用 ESXi 主机端的 vmkfstools 完成就地转换
- 转换完成后开机验证
图形界面内置的实质是 vmkfstools 转换,多了图形包装与状态条,进度可以在近期任务中查看。注意:如果磁盘带有快照,需要先删除或整合快照(Delete / Consolidate),否则不允许改置备。
五、vmkfstools 命令行切换(最常用)
SSH 登录 ESXi 主机(vCenter 不直接暴露 vmkfstools),所有路径以主机文件系统为准。命令行优势是脚本化、可批量、可断点重试,且可在多层存储(iSCSI / FC / vSAN / NFS)上显式控制目标 datastore。
1. 五大必备前置
- 使用 vSphere Client 把 VM 关机(在线转换要冒数据一致性风险,但 vmkfstools 的 -k 选项确实提供;但仍建议关机)
- 在主机 SSH 上
cd /vmfs/volumes/{datastore_uuid}/{vm_dir}/定位目录 ls -l *.vmdk确认磁盘文件;注意区分-flat.vmdk(实际数据)和.vmdk(描述符,二者需成对)- datastore 路径格式:
/vmfs/volumes/<datastore 名 或 UUID> - 检查空间:
df -h /vmfs/volumes/<datastore>确认目标 datastore 余量
2. 三种模式切换的命令清单
- thck → thin:
vmkfstools -i <source.vmdk> <target.vmdk> -d thin(写到同 datastore 或另存,转换后替换) - thin → thick lazy:
vmkfstools -i <source.vmdk> <target.vmdk> -d thick - 任一 → eagerzeroedthick:
vmkfstools -i <source.vmdk> <target-vmdk> -d thick -eagerzero;也可原地升级:vmkfstools -X <size> -eagerzero <vmdk> - 原地 thick lazy → eagerzeroedthick:用
vmkfstools -j <vmdk>(英文 help 中写”convert between zeroedthick and eagerzeroedthick”),无需另存
3. 实战案例:把 VM-01 的 Disk2 从 thin 升级到 eagerzeroedthick
# 1. 关闭 VM
vim-cmd vmsvc/power.off <vmid>
# 2. 列出目录
ls -l /vmfs/volumes/datastore1/VM-01/
# 假设输出:
# -rw------- 1 root root 53687091200 Sep 15 10:00 VM-01_2-flat.vmdk
# -rw------- 1 root root 545 Sep 15 10:00 VM-01_2.vmdk
# 3. 原位升级到 eagerzeroedthick(不复制,直接改 metadata + 必要时清零未写块)
vmkfstools -j /vmfs/volumes/datastore1/VM-01/VM-01_2.vmdk
# 4. 验证
vmkfstools -t0 /vmfs/volumes/datastore1/VM-01/VM-01_2.vmdk # query disk info, 看清provisioning 字段
od -c /vmfs/volumes/datastore1/VM-01/VM-01_2.vmdk | head -1 # descriptor 里 ddcdb-...-fileExtentInformation 段确认
其中 -t0 是查询命令,可输出该 VMDK 的 provisioning 类型与几何参数,是判断模式是否成功的最直接手段。
4. 进阶:跨 datastore 转换
# thin → thick lazy,输出到另一个 datastore
vmkfstools -i "/vmfs/volumes/datastore1/VM-01/VM-01_1.vmdk"
"/vmfs/volumes/datastore2/VM-01/VM-01_1.vmdk"
-d thick
# 把 VM-01.vmx 中的磁盘路径指向新位置(手动编辑,或编辑设置里 remove disk + add existing disk)
六、PowerCLI 批量切换方案
当需要批量处理一个集群或多个 VM 时,PowerCLI 是效率最高的路径。注意 PowerCLI 调用的后台命令实际上仍然是 vmkfstools,但加了 datastore 空间预检、批量进度跟踪与失败回滚:
# 连接 vCenter
Connect-VIServer -Server vcenter.domain.local -User administrator@vsphere.local -Password 'xxx'
# 查找所有 thin 磁盘的 VM
Get-VM | Get-HardDisk | Where-Object {$_.StorageFormat -eq 'Thin'} | Select-Object Parent, Name, CapacityGB
# 批量转换(依次关电→转换→开电)
$vms = Get-VM | Get-HardDisk | Where-Object {$_.StorageFormat -eq 'Thin'} | Select-Object -Unique Parent
foreach ($vm in $vms) {
Write-Host "Processing $($vm.Parent.Name)"
Stop-VM -VM $vm.Parent -Confirm:$false -RunAsync:$true
# 这里替换为 Ensure-InvokeScript 调 $esxcli ... 或者 Set-HardDisk -HardDisk ... -StorageFormat Thick
Get-HardDisk -VM $vm.Parent | Set-HardDisk -StorageFormat Thick -Confirm:$false
Start-VM -VM $vm.Parent -RunAsync:$true
}
关键陷阱:PowerCLI 的 Set-HardDisk -StorageFormat Thick 默认是 lazyzeroedthick;要升级到 eagerzeroedthick 必须在 VM 关闭状态下,配合 Invoke-VMScript 调用宿主机的 vmkfstools -j。
七、转换后的验证
- 命令侧:
vmkfstools -t0 /vmfs/volumes/<ds>/<vm>/<disk>.vmdk,输出含 “createType: …eagerzeroedthick/thick/thin” - 客户机侧:进 OS 后
fdisk -l(Linux)/磁盘管理(Windows)确认分区可见、容量对得上 - vCenter 侧:编辑 VM 设置 → 磁盘属性下拉框显示的当前模式
- 性能侧:用
esxtop进入 d view 查看 ACTH/QUED,看是否有大面积写零导致的 CMS latency spike
八、最佳实践与常见误区
- 不要在线升级到 eagerzeroedthick:vmkfstools 的 -eagerzero 是同步清零,会卡住 VMIO
- thin 不要用于 SQL Server 高负载库:小块写密集场景下,5-15% 的性能损失可能放大到爆
- FT/MSFC/RAC 永远 eagerzeroedthick:集群工作模式依赖”预写分配 + shared VMDK”,不是 eagerzeroedthick 就开不起来
- 同一 datastore 上的多个 thin VM 一起超分配前:必须接 vROps / 容量预警:物理容量超 80% 就是红灯(不是建议阈值,是踩过的泪)
- 转换后删源 .vmdk 前先验证:
diff <source-flat.vmdk> <target-flat.vmdk>不存在则安全删除;保持 1-2 个业务周期观察再删
致力于收录企业 IT 运维、安全、虚拟化、数据库等正版授权软件,所有资源均经过测试与验证,覆盖中小团队到大型企业场景,提供一站式下载与管理。
置备模式没有绝对的好坏,只有”适合不适合”。每一次切换前问自己三个问题:会不会用到 FT / MSFC?datastore 物理容量允许超分配吗?性能基线能接受 5-15% 损失吗?答完再选择,多数企业关键业务 VM 的答案是”thick lazy zeroed”——这是全球数据中心工程师用得最多的配置,安全可靠、性能够用、对运维极友好。
九、软件下载与扩展工具
看完整篇文章,如果想亲自上手操作 vmkfstools 或者练习 PowerCLI 批量转换,你可能需要以下工具:
- ESXi 虚拟机环境(VMware Workstation / ESXi 商业授权 / 评估版)
- SSH 工具(PuTTY / Xshell / MobaXterm)
- PowerCLI(含 VMware.PowerCLI 模块)
IT 峰哥软件库持续收录正版 ESXi、PowerCLI 模块与各种企业 IT 工具下载,有需要的工程师可以前往 IT峰哥软件库 检索”ESXi”或”VMware”找到对应下载。所有资源均经过测试,欢迎收藏。