Simple SMB share and multichannel for Hyper-V

SMB 3.0 file shares can be used as shared storage for Hyper-V in Windows Server 2012 R2 and Windows Server 2012. With this capability, Hyper-V can store virtual machine files, which includes configuration, virtual hard disk (VHD) files, and snapshots, on SMB file shares. There a lot of configurations for SMB and Hyper-V (cluster Hyper-V + stand-alone SMB share, or cluster Hyper-V <> scale-out and etc.). This article covers basic steps for configuration SMB share for Hyper-V through powershell.

My demo: 2 hyper-v hosts (HV01.democorp.ru, HV02.democorp.ru), 1 file server (dc01.democorp.ru . !! it’s not recommended to make a SMB share on domain controller. it’s just a lab!!).  2 network adapters per server. File Server roles are installed by default.

#Create new SMB share on your file server (dc01 - my file server)
PS C:\Users\Administrator&gt; New-SmbShare -Name Hyperv -Path S:\Shares\VM -FullAccess democorp\administrator,democorp\hv01$,democorp\hv02$,democorp\hvcl$

Name                          ScopeName                     Path                          Description
----                          ---------                     ----                          -----------
Hyperv                        *                             S:\Shares\VM

#Check permissions
PS C:\Users\Administrator&gt; Get-SmbShareAccess hyperv

Name                    ScopeName               AccountName             AccessControlType       AccessRight
----                    ---------               -----------             -----------------       -----------
Hyperv                  *                       DEMOCORP\Administrator  Allow                   Full
Hyperv                  *                       DEMOCORP\HV01$          Allow                   Full
Hyperv                  *                       DEMOCORP\HV02$          Allow                   Full
Hyperv                  *                       DEMOCORP\hvcl$          Allow                   Full

#Set NTFS permissions from SMB share
PS C:\Users\Administrator&gt; Set-SmbPathAcl -ShareName hyperv

#Create new vhd on smb share
PS C:\Users\administrator.DEMOCORP&gt; New-VHD -Path \\dc01\Hyperv\VMs\test\testsmb.vhdx -Dynamic -SizeBytes 15Gb -Verbose
VERBOSE: Performing the operation &quot;New-VHD&quot; on target &quot;\\dc01\Hyperv\VMs\test\testsmb.vhdx&quot;

ComputerName            : HV01
Path                    : \\dc01\Hyperv\VMs\test\testsmb.vhdx
VhdFormat               : VHDX
VhdType                 : Dynamic
FileSize                : 4194304
Size                    : 16106127360
MinimumSize             :
LogicalSectorSize       : 512
PhysicalSectorSize      : 4096
BlockSize               : 33554432
ParentPath              :
DiskIdentifier          : 82453f86-1d5a-421f-890b-0a76366f4cbb
FragmentationPercentage : 0
Alignment               : 1
Attached                : False
DiskNumber              :
Key                     :
IsDeleted               : False
Number                  :

#Create new VM on share
PS C:\Users\administrator.DEMOCORP&gt; New-VM -Name VMtest -SwitchName VM -VHDPath \\dc01\Hyperv\VMs\test\testsmb.vhdx -Path \\dc01\hyperv\vms -MemoryStartupBytes 1Gb -Generation 2 -Verbose

VERBOSE: New-VM will create a new virtual machine &quot;VMtest&quot;.

Name   State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----   ----- ----------- ----------------- ------   ------
VMtest Off   0           0                 00:00:00 Operating normally

#Add VM to cluster
PS C:\Users\administrator.DEMOCORP&gt; Add-ClusterVirtualMachineRole -VirtualMachine VMTest -Name &quot;SMB TEST&quot; -Verbose
VERBOSE: Connecting to cluster on local computer HV01.

Name                                    OwnerNode                               State
----                                    ---------                               -----
SMB TEST                                HV01                                    Offline

#Check that VM was become HA
PS C:\Users\administrator.DEMOCORP&gt; (Get-ClusterResource).Name
Cluster IP Address
Cluster Name
Virtual Machine Configuration New Virtual Machine
Virtual Machine Configuration VMtest
Virtual Machine New Virtual Machine
Virtual Machine VMtest

#Move VM storage from local storage to the SMB share
PS C:\Users\administrator.DEMOCORP&gt; Move-VMStorage &quot;new virtual machine&quot; -DestinationStoragePath \\dc01\hyperv\VMs -ComputerName hv02 -Verbose
VERBOSE: Move-VMStorage will migrate the storage for virtual machine &quot;New Virtual Machine&quot;.

#Check smb connections on hv02
PS C:\Users\administrator.DEMOCORP&gt; Get-SmbConnection

ServerName          ShareName           UserName            Credential          Dialect             NumOpens
----------          ---------           --------            ----------          -------             --------
dc01                hyperv              DEMOCORP\Adminis... DEMOCORP.RU\Admi... 3.02                2
dc01                hyperv              DEMOCORP\HV02$      DEMOCORP.RU\HV02$   3.02                4
dc01                hyperv              NT VIRTUAL MACHI... DEMOCORP.RU\HV02$   3.02                2

#Checks that smb multichannel works
PS C:\Users\administrator.DEMOCORP&gt; Get-SmbMultichannelConnection

Server Name    Selected       Client IP      Server IP      Client         Server         Client RSS     Client RDMA
                                                            Interface      Interface      Capable        Capable
                                                            Index          Index
-----------    --------       ---------      ---------      -------------- -------------- -------------- --------------
dc01           True           192.168.1.96   192.168.1.201  23             13             False          False
dc01           True           10.10.25.22    10.10.25.1     22             12             False          False

#Get information about client networks interfaces
Get-SmbClientNetworkInterface

SMB Multichannel:

Virtual adapter vEthernet (CSV):

speed

+ Virtual adapter vEthernet (Management):

speed_1

~ 200 Mbps using 2×100 Mb adapters

smb-multi-channel

Troubleshooting

If you receive” “General Access denied error” during VM creation or migration, you have to check permissions on SMB share (my share is “Hyperv” + HV01 and HV02 are smb clients) and constrained delegation (notice that you must have installed Active Directory powershell module):

Get-SmbShareAccess Hyperv

Grant-SmbShareAccess -Name Hyperv -AccountName domain\comp$ -AccessRight Full

Enable-SMBDelegation -SmbServer dc01 -SMBClient HV01

Enable-SMBDelegation -SmbServer dc01 -SMBClient HV02

Enable-SMBDelegation -SmbServer dc01 -SMBClient HVCL

smb_hyperv_error

SMB Multichannel:

Multichannel should be enabled (see client and server configuration)

2 or more network adapters

OR

1 or more NICs capable with RSS

OR

1 or more NICs capable with RDMA

OR

NIC Teaming (at least 2 NICs)

PS C:\Users\Administrator&gt; Get-SmbClientConfiguration

.........
EnableMultiChannel                    : True
DormantFileLimit                      : 1023
EnableSecuritySignature               : True
ExtendedSessionTimeout                : 1000
FileInfoCacheEntriesMax               : 64

PS C:\Users\Administrator&gt; Get-SmbServerConfiguration

----
...................................

EnableLeasing                   : True
EnableMultiChannel              : True
EnableStrictNameChecking        : True
OplockBreakWait                 : 35
PendingClientTimeoutInSeconds   : 120
RequireSecuritySignature        : True
EnableSMB1Protocol              : True
EnableSMB2Protocol              : True
Smb2CreditsMax                  : 2048
Smb2CreditsMin                  : 128

PS C:\Users\Administrator&gt; Get-SmbServerNetworkInterface

Scope Name          Interface Index     RSS Capable         RDMA Capable        Speed               IpAddress
----------          ---------------     -----------         ------------        -----               ---------
*                   13                  True                False               100 Mbps            192.168.1.201
*                   13                  True                False               100 Mbps            fe80::590e:87d7:...
*                   12                  True                False               100 Mbps            10.10.25.1
*                   12                  True                False               100 Mbps            fe80::34ce:f145:...

Dell PE VRTX: Unable to see shared LUNs in BIOS and during OS installation

Dell PowerEdge VRTX is a new concept of “blade systems” or shared infrastructure. All-in-one system ideally provides benefits of enterpise blade systems for small and medium organizations. Certified for Windows Server 2012/R2 and recommended for using in the WSFC (Windows Server Failover Clustering) configurations. Cluster can be build with up to 4 server nodes and shared SAS Perc 8 controller (can be in the optional fault-tolerance configuration) with up to 25 2.5” SAS HDDs.

Configuration of Dell VRTX is very easy for understanding , but has a limitation:

The Shared PERC 8 also cannot be supported as booting shared storage for operating system installation for the host. 

Let’s imagine, you create a few virtual disks and map to VRTX server slots, run Lifecycle controller (F10 during POST check) – Deployment OS. One is the biggest advantage of Lifecycle – it prepares your system for OS installation (it means that LC adds an additional volume which consists required drivers for specified OS). During OS installation you notice that SHARED LUNs are visible and you ABLE to “click next” and continue OS installation. BUT! SHARED LUNS ON DELL VRTX DOESN’T SUPPORT BOOT VOLUMES. If you will continue with shared LUN, there are some bugs and issues (OS cannot boot and something like this)

So, 1) shared luns only for data not for booting usage 2) use local disks on server slots or mirrored SD cards (only for vmware, not for Hyper-V)

Reference: PowerEdge VRTX: M520 and M620 Blades Not Able to See Shared PERC 8 Virtual Disk in host BIOS and LC

TIP: Configuration of Dell VRTX for Windows Server 2012 R2 WSFC will be available soon