Citrix PVS – blue screen (BSOD) on boot on Hyper-V Virtual Machine

When you are deploying PVS infrastructure based on Hyper-V you can observe Blue Screen (BSOD) during VM boot. SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (CVhdMp.sys).

It’s caused by incorrect streaming NIC identifier. The same issue you can observe, when you create new VM with existing disk (and OS). This problem was described in MSDN post:

Hyper-V: Why is networking reset in my VM when I copy a VHD?

Citrix post KB: Hyper-V Synthetic Network Interface Card Reinitializes on New Target Devices

I was wondering what is the root case and why this problem does not occur on XenServer or VMware.

DELL LAPTOP

From John’s post we know, that each NIC has it’s own GUID. Let’s try to find it for our NICs. Here it the example for my Dell laptop:

PS C:\> Get-NetAdapter | select ifDesc, ifAlias, PnPDeviceID

ifDesc                                ifAlias    PnPDeviceID
------                                -------    -----------
Intel(R) Dual Band Wireless-AC 8260   Wi-Fi      PCI\VEN_8086&DEV_24F3&SUBSYS_00508086&REV_3A\F48C50FFFFCC6D9D00
Intel(R) Ethernet Connection I219-LM  Ethernet   PCI\VEN_8086&DEV_156F&SUBSYS_06DE1028&REV_21\3&11583659&0&FE

PnPDeviceID (from MSDN): Indicates the Win32 Plug and Play device ID of the logical device.

As you can see, I have 2 Network Adapters, both on PCI. We can look for the first device:

PCI\VEN_8086&DEV_24F3&SUBSYS_00508086&REV_3A\F48C50FFFFCC6D9D00

We have: VEN_xxxx (Vendor ID: 8086), DEV_xxxx (Device ID: 24F3). Let’s decode it:

VEN_8086
Intel Corporation

DEV_24F3
Intel(R) Dual Band Wireless-AC 8260
Intel(R) Dual Band Wireless-N 8260

SUBSYS_00508086
Intel(R) Dual Band Wireless-AC 8260

Vendor list: https://driverlookup.com/hardware-id/pci

As you can see, who ever install this adapter in computer/laptop then he will see the same GUID.

 

XENSERVER

Let’s do the same on XenServer Virtual Machines.

PS C:\> Get-NetAdapter | select ifDesc, ifAlias, PnPDeviceID

ifDesc                           ifAlias     PnPDeviceID
------                           -------     -----------
XenServer PV Network Device #0   Ethernet    XENVIF\VEN_XS0002&DEV_NET&REV_00000000\0

We can check it on other VMs:

All VMs have the same GUID for all NICs.

Hyper-V Virtual Machine

So now we can check it on VMs on Hyper-V.

PS C:\> Get-NetAdapter | select ifDesc, ifAlias, PnPDeviceID

ifDesc                                 ifAlias    PnPDeviceID
------                                 -------    -----------
Microsoft Hyper-V Network Adapter #2   Data       VMBUS\{F8615163-DF3E-46C5-913F-F2D2F965ED0E}\{38A2857B-7740-47D9-BE64-53561AD3F981}
Microsoft Hyper-V Network Adapter      Streaming  VMBUS\{F8615163-DF3E-46C5-913F-F2D2F965ED0E}\{E5D7B629-A61A-4788-9304-E192F3F8B8F6}

OK, that’s strange. This ID is in complete different format then it should be. The second part of this description is generated randomly for each new Virtual Machine. And this cause the problem. When you create the image – using PVS Imagining Wizzard – GUID for streaming network adapter is stored. When we create new VM (on Hyper-V) is will get the new GUID and when we try to boot it Windows can’t find the proper NIC and just crash (BSOD).

John also pointed, that this ID is stored in VM XML file. But it’s not supported just to change it right there.

SOLUTION

This GUID remain when you clone the VM. So unfortunately, you have to grab the image from one VM and then you have to clone it as many times as you need Target Devices.

Citrix also published KB: How to Manually Create Hyper-V GEN2 Provisioning Services Target Devices but I have’t test it yet.

 

 

Post author

Leave a Reply