VMware ESXi 6.7虚拟共享磁盘配置实战:解决多虚拟机并发写入与集群搭建难题

发布时间:2026/8/18 0:11:00
VMware ESXi 6.7虚拟共享磁盘配置实战:解决多虚拟机并发写入与集群搭建难题
1. 项目概述与核心需求解析最近在帮一个朋友的公司做内部测试环境的资源整合他们有几台跑在Esxi 6.7上的虚拟机需要模拟一个共享存储的场景比如搭建一个Windows Server故障转移集群或者搞一个简单的Oracle RAC测试。需求很明确就是想让两台或多台虚拟机都能看到同一块“物理”磁盘数据能共享。这听起来不就是个“虚拟共享磁盘”嘛Esxi的Web Client里点几下就能搞定实际操作一圈下来发现远不是那么回事。最典型的就是那个“不能同时写”的报错直接把集群服务给干趴下了。如果你也正在Esxi 6.7上折腾多虚拟机共享磁盘并且被各种权限报错、锁定问题搞得焦头烂额那这篇从实战坑里爬出来的总结或许能帮你省下大半天甚至更久的排查时间。简单来说这个项目的核心就是在VMware ESXi 6.7的虚拟化平台上创建一块可以被多个虚拟机同时识别和访问的虚拟磁盘并解决由此引发的并发写入冲突问题。它主要服务于需要共享存储的集群、高可用HA或并行计算测试环境。对于运维工程师、虚拟化管理员或需要搭建测试环境的开发者来说搞懂这里的门道是避免测试环境“假死”、确保模拟环境真实有效的关键一步。2. 虚拟共享磁盘的原理与Esxi实现机制要解决问题得先明白Esxi是怎么处理磁盘的。在普通情况下一块虚拟磁盘VMDK文件默认是“独占”模式只属于一台虚拟机这是数据安全和一致性的基础保障。而“共享磁盘”则打破了这种独占允许多个虚拟机对同一块VMDK文件进行读写操作。在Esxi底层这主要依赖于两个关键技术点SCSI控制器类型和多写入器Multi-writer标志。SCSI控制器是虚拟机与虚拟磁盘之间的通信桥梁。Esxi支持多种虚拟SCSI控制器如LSI Logic SAS、VMware Paravirtual等。但并非所有控制器都支持共享模式。通常用于共享磁盘的控制器需要设置为“虚拟”类型VMware Paravirtual SCSI或LSI Logic SAS并且其总线共享模式需要显式配置。更关键的是“多写入器”标志。你可以把它理解成贴在VMDK文件上的一个特殊“许可证”。默认情况下这个标志是关闭的意味着Esxi的存储锁管理器Storage Lock Manager会阻止其他虚拟机访问已被占用的磁盘。当我们需要共享时就必须手动开启这个标志告诉Esxi“这块磁盘我允许被多个虚拟机同时打开和写入相关的锁管理由上层应用如集群软件来协调。”这里就引出了最核心的矛盾Esxi提供了共享的“能力”但并不负责共享时的“数据一致性”。它只是解除了底层的访问限制把并发控制的难题抛给了运行在虚拟机里的操作系统或应用程序。如果应用层没有正确的集群锁机制比如Windows的集群服务、Oracle的ASM那么多个虚拟机同时对同一磁盘区域进行写操作必然会导致数据损坏。这就是为什么我们常常在添加共享磁盘后第二台虚拟机会报错“无法打开磁盘”或“磁盘被锁定”的根本原因——要么是多写入器标志没开要么是上层协调没做好。3. 在Esxi 6.7 Web Client中创建虚拟共享磁盘的详细步骤理解了原理我们来看具体操作。这里我强烈建议使用Esxi 6.7自带的HTML5 Web Client它比旧的Flash Client稳定得多。假设我们已经有一台虚拟机比如名为Win-Server-01作为模板或第一台节点。3.1 为第一台虚拟机创建并挂载共享磁盘首先我们需要创建一块新的虚拟磁盘并将其挂载到第一台虚拟机上同时配置好共享属性。关闭目标虚拟机在Esxi主机或vCenter中找到Win-Server-01确保其处于已关机状态。这是修改虚拟机硬件尤其是磁盘控制器和磁盘的前提。编辑虚拟机设置右键点击虚拟机选择“编辑设置”。添加新硬盘在“虚拟硬件”选项卡点击“添加硬盘” - “新标准硬盘”。大小根据需求设置例如50GB。对于测试不建议太小。磁盘置备选择“厚置备延迟置零”或“厚置备立即置零”。“精简置备”在共享磁盘场景下可能带来性能波动和不可预知的问题不建议使用。位置默认存储在虚拟机目录即可。先不要点击保存。关键配置SCSI控制器与节点号添加硬盘后在设备列表中找到新加的硬盘。点击它展开高级选项。SCSI控制器确保该磁盘被分配到一个独立的SCSI控制器上。例如如果原有磁盘在SCSI控制器0上那么共享磁盘最好放在SCSI控制器1上。这有利于隔离管理和避免冲突。SCSI节点注意查看并记住该磁盘的“SCSI总线编号”和“单元号”。例如SCSI(1:0)。这个地址非常重要在挂载给第二台虚拟机时必须完全一致。开启多写入器标志核心步骤在硬盘的高级选项里找到“模式”或“共享”选项不同版本界面略有差异。勾选“多写入器”或“共享总线”之类的选项。在Esxi 6.7的HTML5客户端中这个选项可能在“虚拟机选项”-“高级”-“常规”下的“参数”中需要手动添加配置参数scsiX:Y.sharedBus “virtual”(其中X是控制器号Y是单元号)但更常见的直接界面操作是设置磁盘的“共享”为“多写入器”。一个更可靠的方法是通过SSH命令行后续会讲但对于Web Client请仔细在硬盘属性或虚拟机高级设置中寻找相关选项。保存并开机保存虚拟机设置然后启动Win-Server-01。进入系统后打开磁盘管理你应该能看到这块新加的未初始化磁盘将其联机、初始化并格式化为NTFS或所需格式。注意此时只需在第一台机器上格式化即可。实操心得在这一步很多朋友会忽略“独立SCSI控制器”这一点。把共享磁盘和系统盘混在同一个控制器上虽然有时能工作但在集群切换或压力测试时容易引发意想不到的I/O排队或控制器复位问题导致集群失效。单独给共享磁盘一个控制器是生产环境测试的最佳实践。3.2 将现有磁盘挂载给第二台虚拟机现在我们需要让第二台虚拟机Win-Server-02也能看到这块磁盘。关闭第二台虚拟机同样确保Win-Server-02已关机。编辑虚拟机设置右键点击Win-Server-02选择“编辑设置”。添加现有硬盘点击“添加硬盘” - “现有硬盘”。浏览到第一台虚拟机目录下选择刚才创建的那个VMDK文件例如Win-Server-01_1.vmdk。匹配SCSI控制器与节点号绝对关键添加后在设备列表中找到这块“现有硬盘”。点击它进入高级选项。你必须手动将它的SCSI控制器号和单元号设置成与第一台虚拟机中完全一致的值。例如在第一台是SCSI(1:0)那么这里也必须设置为SCSI(1:0)。同样确保这个SCSI控制器的“总线共享”模式如果界面有设置为“虚拟”或已支持共享。确认多写入器属性由于是同一块VMDK文件其底部的多写入器标志是文件自身的属性。只要在第一台虚拟机设置时已开启这里通常会自动继承。但为保险起见可以检查第二台虚拟机该硬盘的高级设置确认共享选项已启用。保存并开机保存设置启动Win-Server-02。在第二台虚拟机中查看磁盘进入Win-Server-02的磁盘管理你应该能看到一块“脱机”的磁盘其容量和签名与第一台中的完全一致。切勿初始化或格式化只需右键点击将其“联机”即可。此时两台虚拟机应该都能看到并访问同一块磁盘了。4. 核心难题破解解决“不能同时写”与磁盘锁定问题按照上述步骤操作理想情况下共享磁盘应该能工作了。但现实中超过一半的概率你会遇到问题。下面是我总结的几个最常见故障及其解决方案。4.1 问题一第二台虚拟机启动时报错“无法打开磁盘”错误现象启动第二台虚拟机时任务进度条卡住最终报错提示无法打开磁盘文件文件可能被锁定或正在使用。根本原因这是最经典的“多写入器”标志未生效问题。Esxi底层仍然认为这块磁盘是独占的。解决方案检查虚拟机配置文件.vmx这是最彻底的方法。关闭所有使用该磁盘的虚拟机。通过Esxi的SSH或Datastore浏览器找到第一台虚拟机的配置文件.vmx。编辑该文件找到共享磁盘对应的配置行。例如scsi1:0.deviceType scsi-hardDisk scsi1:0.fileName Win-Server-01/Win-Server-01_1.vmdk scsi1:0.present TRUE在这几行附近你需要添加或确认以下关键参数scsi1:0.sharedBus virtual # 设置SCSI总线共享模式为虚拟 disk.locking false # 禁用磁盘锁谨慎使用需结合scsiX:Y.shared scsi1:0.shared multi-writer # 明确指定多写入器模式部分版本更通用的方法是直接设置磁盘的disk.EnableUUID “TRUE”并确保scsiX:Y.sharedBus “virtual”。保存.vmx文件并重新注册虚拟机在Esxi主机清单中右键“注册虚拟机”选择该.vmx文件。重新开机问题通常可以解决。4.2 问题二磁盘在系统中显示为“脱机”且无法联机错误现象在第二台虚拟机的磁盘管理中磁盘显示为脱机右键“联机”选项灰色或联机时提示“磁盘处于脱机状态因为它与另一个联机磁盘发生签名冲突”。根本原因这是Windows磁盘签名冲突。Windows使用磁盘签名来唯一标识磁盘。当两块物理磁盘签名相同时Windows会阻止它们同时联机以防止数据混乱。我们从同一VMDK文件创建共享磁盘其内容包括签名完全一样因此触发了这个保护机制。解决方案在第二台虚拟机上以管理员身份打开“命令提示符”或“PowerShell”。输入diskpart并回车。输入list disk找到对应的共享磁盘根据大小判断。输入select disk X(X为磁盘号)。输入uniqueid disk查看当前磁盘的ID签名。关键命令输入uniqueid disk id后面跟一个新的ID。例如uniqueid disk id12345678。这个ID是一个十六进制数可以随意指定一个与第一台不同的值。操作完成后回到磁盘管理刷新此时应该可以正常联机了。注意事项修改磁盘签名是Windows层面的操作不影响Esxi和VMDK文件本身。这个操作只需要在第二台及以后的虚拟机上执行一次。绝对不要在第一台虚拟机上修改否则可能导致第一台系统无法启动如果它是系统盘或集群软件识别错误。4.3 问题三集群服务仍报错或写入数据不一致错误现象磁盘能共享访问了但在搭建Windows故障转移集群时验证报告存储测试失败或者应用如数据库运行时出现数据损坏。根本原因Esxi的共享磁盘只解决了“能访问”的问题没有解决“安全地并发访问”问题。数据一致性需要靠上层集群软件来保证。解决方案与最佳实践务必使用集群文件系统对于Windows必须在共享磁盘上创建NTFS卷并由Windows Server故障转移集群WSFC服务来管理。WSFC会使用基于SCSI-3 Persistent Reservations的磁盘锁来协调节点间的访问确保同一时刻只有一个节点拥有磁盘的写入权。正确配置仲裁在创建集群时一定要配置仲裁。仲裁可以是磁盘见证使用另一块小的共享磁盘、文件共享见证或云见证。它用于在节点间通信中断时决定哪个分区继续存活避免“脑裂”。测试故障转移配置完成后不要假设它工作了。主动进行测试在节点A上运行一个服务或创建文件然后手动故障转移到节点B检查服务是否正常、文件是否可访问。再切回节点A。反复测试几次。监控Esxi层日志如果集群频繁故障需要查看Esxi主机的/var/log/vmkernel.log搜索与SCSI预留reservation相关的错误信息。有时可能是存储路径或HBA卡驱动问题。5. 高级配置与命令行CLI操作指南Web Client虽然直观但在处理一些复杂或批量操作时命令行通过SSH连接到Esxi主机更强大、更精确。特别是设置多写入器标志用命令行几乎不会出错。5.1 使用vmkfstools命令直接创建共享VMDK假设我们要在数据存储datastore1上为虚拟机Cluster-Node-A创建一块20GB的共享厚置备磁盘。SSH登录到Esxi主机。导航到虚拟机目录cd /vmfs/volumes/datastore1/Cluster-Node-A使用vmkfstools创建磁盘并直接指定多写入器标志vmkfstools -c 20G -d thick -a lsilogic-sas -m shared Cluster-Node-A-shared.vmdk-c 20G创建20GB磁盘。-d thick厚置备。-a lsilogic-sas设置虚拟适配器类型为LSI Logic SAS一种支持共享的常见类型。-m shared最关键参数将磁盘标记为共享模式启用多写入器。5.2 使用vim-cmd为现有虚拟机添加共享磁盘并配置假设我们已经有了一个VMDK文件shared_disk.vmdk现在要把它以共享模式添加到虚拟机VM-01和VM-02上。获取虚拟机IDvim-cmd vmsvc/getallvms | grep -E “(VM-01|VM-02)”记下输出结果中的Vmid例如123。编辑虚拟机配置以VM-01为例# 首先关闭虚拟机 vim-cmd vmsvc/power.off 123 # 使用vim-cmd添加SCSI控制器如果需要新的控制器 # 这步较复杂通常更推荐直接编辑.vmx文件。 # 更直接的方法编辑.vmx文件 vi /vmfs/volumes/datastore1/VM-01/VM-01.vmx在.vmx文件末尾添加以下行# 添加一个新的SCSI控制器类型为pvscsi支持共享 scsi1.present “true” scsi1.sharedBus “virtual” scsi1.virtualDev “pvscsi” # 将共享磁盘挂载到新控制器的0号单元 scsi1:0.present “true” scsi1:0.deviceType “scsi-hardDisk” scsi1:0.fileName “/vmfs/volumes/datastore1/shared_disk.vmdk” scsi1:0.mode “independent-persistent” disk.locking “false” scsi1:0.shared “multi-writer”保存并退出。为VM-02虚拟机执行类似操作编辑VM-02的.vmx文件添加完全相同的SCSI控制器和磁盘配置关键是scsi1:0.fileName必须指向同一个VMDK文件路径且scsi1:0.shared “multi-writer”也必须存在。重新注册并启动虚拟机# 在Esxi Web Client中如果虚拟机因配置修改而变成“无效”需要重新注册。 # 也可以通过命令行找到.vmx文件并右键注册但Web界面更简单。 # 注册后启动虚拟机。 vim-cmd vmsvc/power.on 123实操心得直接编辑.vmx文件是最高效、最可控的方式尤其适合自动化脚本。但务必小心语法和空格一个拼写错误就可能导致虚拟机无法启动。修改前强烈建议备份原.vmx文件。另外disk.locking “false”这个参数要慎用它完全禁用了Esxi对该磁盘的锁管理仅在完全信任上层集群协调能力时使用。6. 性能调优、监控与生产环境注意事项在测试环境跑通只是第一步如果考虑用于接近生产环境的测试或开发性能和数据安全就需要额外关注。6.1 共享磁盘的性能考量控制器类型选择VMware Paravirtual (PVSCSI)控制器通常能为高I/O负载的虚拟磁盘提供最佳性能尤其适合共享磁盘场景。LSI Logic SAS也是兼容性和稳定性很好的选择。避免使用老旧的LSI Logic Parallel或BusLogic。磁盘置备策略“厚置备延迟置零”是性能与空间消耗的良好平衡。“厚置备立即置零”在创建时性能开销大但后续写入性能最好。“精简置备”可能导致在集群突发写入时需要临时分配空间而引发延迟不推荐。存储位置共享磁盘所在的存储性能直接决定了集群的响应速度。如果可能将其放在由SSD支撑的Datastore上。避免与其他高I/O虚拟机争抢同一物理磁盘的带宽。队列深度对于PVSCSI控制器可以适当增加磁盘的队列深度通过.vmx文件中的sched.scsiX:Y.qlength参数以提升并发处理能力但需要根据实际负载测试调整。6.2 监控与日志排查Esxi主机日志/var/log/vmkernel.log是排查存储和SCSI问题的第一现场。关注SCSI reservation、device status、multipath等关键词的告警或错误信息。虚拟机内部性能计数器在Windows虚拟机内使用“性能监视器”跟踪物理磁盘的“平均磁盘队列长度”、“磁盘读写延迟”等计数器。如果队列持续很长或延迟很高说明共享磁盘已成为瓶颈。vCenter性能图表通过vCenter监控虚拟机的磁盘读/写速率、命令延迟等从宿主机层面观察磁盘负载。6.3 生产环境测试的严肃建议彻底测试故障场景模拟节点突然断电、网络分区脑裂、存储断连等情况观察集群的恢复行为和数据的完整性。备份与快照策略切勿对已加入集群的虚拟机或其共享磁盘创建Esxi级别的快照。这极有可能破坏集群的磁盘锁和SCSI预留导致数据损坏。集群的备份应通过应用层或Guest OS内的代理进行。网络隔离用于集群节点间心跳和存储通信的网络最好使用独立的vSwitch和物理网卡与业务网络隔离确保通信的低延迟和高可靠性。文档与回滚计划详细记录共享磁盘的SCSI ID、VMDK路径、.vmx文件配置变更点。在做出任何变更前确保有可行的回滚方案。折腾Esxi的共享磁盘从看似简单的配置到最终稳定运行整个过程就像在微妙的平衡木上行走。它完美地诠释了“基础设施允许你做某件事但不保证你做好这件事”的道理。Esxi给了你共享磁盘的钩子但把保持数据一致性的重担交给了上层的集群软件。我最深刻的体会是成功的配置 正确的底层标记多写入器 匹配的控制器设置 上层健全的集群管理。缺了任何一环都会导致各种光怪陆离的故障。所以下次再遇到共享磁盘问题时不妨按这个顺序层层排查先看.vmx文件里的shared和sharedBus参数对不对再检查Guest OS里的磁盘签名和联机状态最后验证集群服务的日志和配置。这套组合拳下来大部分问题都能找到根源。