虚拟闪存(Virtual Flash)是VMware ESXi中一项提升存储性能的关键技术。简单来说,它就像给服务器装了个"加速器",把本地SSD硬盘变成高速缓存层。我在实际部署中发现,合理配置虚拟闪存能让虚拟机磁盘IOPS提升3-5倍,特别适合运行数据库、ERP等对延迟敏感的应用系统。
这项技术的核心原理其实很好理解:把多块物理SSD聚合成一个逻辑资源池,形成名为VFFS(Virtual Flash File System)的专用文件系统。与普通VMFS不同,VFFS针对闪存特性做了深度优化,支持更细粒度的数据块管理和更高效的垃圾回收机制。但要注意的是,这个资源池不能直接存储虚拟机数据,它主要服务于三个特定功能:
在vSphere 6.5及更高版本中,虚拟闪存配置界面已经相当直观。通过vSphere Client进入主机配置页签,找到"虚拟闪存"模块就能看到资源管理器。但这里有个关键前提:所有用于虚拟闪存的SSD必须是未经格式化的原始设备。这个要求经常被忽略,也是导致后续"无可选设备"问题的常见原因之一。
在点击"添加容器"按钮前,建议先完成以下准备工作。上周我刚帮客户部署过一套全闪存ESXi集群,就因为没有提前检查这些细节,多花了两个小时排错:
首先通过SSH登录主机,用esxcli storage core device list命令查看所有存储设备。重点关注两类信息:
bash复制# 示例输出片段:
naa.500a07510e8b8d00
Display Name: Local SSD Disk (naa.500a07510e8b8d00)
Has Settable Display Name: true
Size: 745404
Device Type: SSD
Is USB: false
Is Boot Device: false
如果发现SSD未被正确识别,需要手动标记设备属性:
bash复制esxcli storage nmp device set --device=naa.500a07510e8b8d00 --device-type=ssd
在vSphere Client中的操作路径其实很简单:
但这里有个细节需要注意:ESXi 7.0之后界面布局有变化,虚拟闪存配置被整合到了"存储"模块下的"设备"页面。很多管理员习惯性地在旧位置找不到入口,误以为功能被移除。
对于批量部署场景,推荐使用ESXCLI命令完成配置。这条命令我至少执行过上百次,稳定性值得信赖:
bash复制esxcli storage vflash cache add -d naa.500a07510e8b8d00
配置完成后,可以用以下命令验证状态:
bash复制esxcli storage vflash cache list
这是最常见的问题根源。很多用户反馈明明插了SSD,但列表还是空的。根据VMware官方文档和我自己的测试,必须同时满足以下条件:
esxcli storage core device list确认)有个特别隐蔽的情况:部分企业级SSD的OEM固件可能不被ESXi识别。我遇到过Intel DC系列SSD需要更新固件才能正确识别的案例。建议定期检查VMware兼容性列表(HCL)。
这个问题坑过不少有经验的工程师。即使是一块全新的SSD,也可能因为以下原因被排除:
解决方法很直接但需要谨慎操作:
partedUtil命令彻底清除分区表:bash复制partedUtil mklabel /dev/disks/naa.500a07510e8b8d00 gpt
在启用了vSAN的集群中,所有SSD默认会被vSAN自动声明。这个设计逻辑经常让人措手不及。我的建议是:
bash复制esxcli vsan storage automode set --enabled false
这是最容易被忽视的一个因素。ESXi的引导参数会直接影响磁盘初始化行为,特别是使用Auto Deploy时。关键参数有两个:
VMkernel.Boot.autoPartition:控制是否自动创建系统分区VMkernel.Boot.skipPartitioningSsds:是否跳过SSD分区正确的组合应该是:
code复制autoPartition=TRUE
skipPartitioningSsds=TRUE
可以通过以下命令永久修改:
bash复制esxcli system settings advanced set -o /VMkernel/Boot/autoPartition -i 1
esxcli system settings advanced set -o /VMkernel/Boot/skipPartitioningSsds -i 1
当常规方法无效时,需要深入系统日志。这几个日志文件最有价值:
/var/log/vmkernel.log:存储子系统核心日志/var/log/hostd.log:vSphere Agent操作记录/var/log/esxupdate.log:驱动加载情况推荐使用这个命令实时监控存储事件:
bash复制tail -f /var/log/vmkernel.log | grep -iE 'ssd|vflash|nmp'
虚拟闪存配置成功后,还需要优化才能发挥最大效能。根据我的实测数据,以下参数调整能带来显著提升:
| 参数名 | 默认值 | 推荐值 | 影响说明 |
|---|---|---|---|
VFlash.MaxCacheSizeMB |
1024 | 4096 | 单个虚拟机最大缓存 |
VFlash.SingleExtentSizeMB |
256 | 512 | 缓存块大小 |
VFlash.CacheReplacementPolicy |
LRU | FIFO | 缓存替换策略 |
调整方法:
bash复制esxcli system settings advanced set -o /VFlash/MaxCacheSizeMB -i 4096
在排查过程中,有几个"雷区"需要特别注意:
esxcli storage nmp device set命令可以强制将HDD标记为SSD,但这会导致性能问题和数据风险最近处理的一个客户案例很有代表性:某制造企业的ERP系统在月末结账时性能骤降。他们的ESXi主机配置了4块NVMe SSD,但虚拟闪存始终显示"无可选设备"。通过以下步骤最终解决:
整个过程耗时约45分钟,最终使虚拟机读延迟从15ms降至2ms以下。这个案例说明,系统化的排查思路比盲目尝试更有效率。