Hyper-V虚拟光纤通道(Virtual Fibre Channel,简称vFC)是微软从Windows Server 2012开始引入的功能,它允许虚拟机绕过宿主机的文件系统,直接通过光纤通道HBA卡访问SAN存储上的LUN。这种方式对来宾集群(Guest Cluster)场景尤其重要,因为多个虚拟机节点需要共享同一块存储才能实现故障转移群集。本文将完整讲解虚拟光纤通道适配器的配置过程、前置条件以及常见问题的处理办法。

一、配置前的原理说明与前置条件检查
虚拟光纤通道的核心思想是在宿主机的物理HBA卡之上抽象出一个虚拟SAN(Virtual SAN),每个虚拟SAN绑定一个或多个物理HBA端口。虚拟机中的vFC适配器并不是直接占用物理端口,而是通过虚拟SAN映射到物理链路上,虚拟机操作系统里看到的就是一块普通的光纤通道HBA卡,驱动由虚拟机内的Windows自带提供。
在动手配置之前,需要确认以下几点前置条件。第一,宿主机的HBA卡必须支持NPIV(N_Port ID Virtualization)技术,这是虚拟光纤通道的基础,主流的Emulex、QLogic企业级HBA卡基本都支持,但需要在卡本身的配置工具中确认NPIV已启用。第二,SAN交换机的zoning配置中必须同时包含物理HBA的WWN和后续生成的虚拟WWN。第三,虚拟机的虚拟硬盘必须存放在不受故障转移控制的存储上,这一点对来宾集群尤其重要,否则群集仲裁盘和数据盘会混在一起。
可以通过Windows PowerShell快速检查宿主机上可用的物理HBA信息:
# 查看宿主机上的光纤通道适配器及是否支持NPIV
Get-WmiObject -Namespace root\wmi -Class MSFC_FCAdapterHBAAttributes |
Select-Object InstanceName, UniqueAdapterId
# 查看HBA端口信息,确认PortWWN和NPIV支持
Get-WmiObject -Namespace root\wmi -Class MSFC_FibrePortHBAAttributes |
Select-Object InstanceName, @{N='PortWWN';E={
($_.Attributes.PortWWN | ForEach-Object { $_.ToString('X2') }) -join ':'
}}
如果执行上述命令后查不到任何适配器,说明HBA驱动没有正确加载,此时vFC是无法使用的,需要先到厂商官网下载最新的Storport驱动并重新安装。
二、创建虚拟SAN并添加vFC适配器
虚拟SAN是物理HBA端口与虚拟机之间的桥梁,必须先创建它才能给虚拟机添加适配器。打开Hyper-V管理器,在右侧操作面板中点击“虚拟SAN管理器”,选择“新建虚拟光纤通道SAN”,输入一个容易识别的名称,然后在物理HBA端口列表中勾选要绑定的端口。建议生产环境中至少绑定两个不同物理卡上的端口,实现链路冗余。
用PowerShell完成同样的操作更加高效,脚本如下:
# 创建名为SAN01的虚拟光纤通道SAN,绑定两个物理HBA端口
New-VMSan -Name "SAN01" -WorldWideNodeName "50060b0000c2a001","50060b0000c2a002" `
-WorldWidePortName "50060b0000d2e001","50060b0000d2e002"
# 为虚拟机VM-Cluster01添加一块vFC适配器,并连接到SAN01
Add-VMFibreChannelHba -VMName "VM-Cluster01" -SanName "SAN01"
添加完适配器后,虚拟机需要关机再开机一次(重启不行,必须完全关机再启动),适配器才会真正呈现给来宾操作系统。启动后进入虚拟机的设备管理器,在“存储控制器”下应该能看到一块名为“Microsoft 虚拟光纤通道适配器”的设备。
接下来是WWN的管理。每个vFC适配器默认会自动生成两组WWN,即WWPN A和B,用于配合虚拟机快速迁移和实时迁移。可以在Hyper-V管理器的虚拟机设置中查看,也可以导出到文本文件交给SAN管理员做zoning:
# 导出虚拟机所有vFC适配器的WWN信息
Get-VMFibreChannelHba -VMName "VM-Cluster01" |
Select-Object VirtualSanName,
@{N='WWPN-A';E={($_.WorldWidePortNameSetA | ForEach-Object { $_.ToString('X2') }) -join ':'}},
@{N='WWPN-B';E={($_.WorldWidePortNameSetB | ForEach-Object { $_.ToString('X2') }) -join ':'}} |
Format-Table -AutoSize
三、SAN侧zoning与虚拟机内的MPIO配置
vFC适配器出现在网络中后,SAN管理员必须在交换机上把虚拟机的WWPN加入对应的zone,并在磁盘阵列上把LUN映射给这些WWPN。这是整个流程中最容易遗漏的一步,很多人在虚拟机里扫描不到磁盘,九成原因就是zoning没有包含虚拟WWN。注意每个vFC适配器有A、B两组WWPN,两组都要加入zone,否则迁移时链路会中断。
来宾操作系统识别到磁盘后,还强烈建议安装多重路径I/O(MPIO)功能来处理多链路故障。在虚拟机内以管理员身份运行:
# 安装MPIO功能 Install-WindowsFeature Multipath-IO # 为光纤通道设备启用MPIO支持 Enable-MSDSMAutomaticClaim -BusType FibreChannel # 重启后查看多路径磁盘 Get-MPIOAvailableHW mpclaim -s -d
配置MPIO之后,即使某条物理链路或某块HBA卡故障,虚拟机内的I/O也会自动切换到剩余路径,业务不会中断。对于来宾集群,两台虚拟机各自添加一块vFC适配器,在共享LUN上创建群集磁盘,即可完成与传统物理集群相同的存储架构。
四、常见问题排查与注意事项
第一个常见问题是虚拟机内完全看不到光纤通道设备。排查顺序是:确认HBA驱动支持NPIV、确认虚拟SAN绑定的端口正确、确认虚拟机做过完整的关机再开机操作、最后检查交换机zoning。可以用Get-VMSan确认虚拟SAN状态是否为Healthy,如果显示异常,多半是物理端口或驱动层面的问题。
第二个问题是实时迁移或故障转移后磁盘失联。这通常是因为zoning只加了A组WWPN而没加B组,或者SAN阵列的安全策略只允许单个WWPN访问LUN。解决办法是把两组WWPN都加入zone,并在阵列侧将同一LUN映射给两组地址。此外,Hyper-V副本功能不支持带有vFC适配器的虚拟机,做灾备规划时要留意这个限制。
第三点是配置相关的注册表和日志位置。vFC相关的诊断信息保存在事件查看器的“应用程序和服务日志\Microsoft\Windows\Hyper-V-Worker”分支下,故障时重点看事件ID 33120系列。如果需要调整WWN范围,可检查注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vhba\Parameters下的相关键值,修改前务必导出备份,避免宿主机存储链路异常导致所有依赖vFC的虚拟机掉盘。
总体来说,虚拟光纤通道的配置难点不在Hyper-V界面操作本身,而在于Hyper-V管理员与SAN管理员的配合,尤其是WWN的传递和zoning的同步。建议把每个虚拟机的WWN记录在配置管理文档中,形成固定流程,后续扩容和排错都会轻松很多。