Файловое хранилище на базе SMB 3.0 может использоваться в качестве общей точки хранения для Hyper-V , начинася с Windows Server 2012/R2. С этим нововведением, Hyper-V умеет хранить файлы виртуальных машин, включая конфигурацию, виртуальные диски и снимки ВМ , на файловых "шарах" SMB 3.0. Существует достаточно много возможных схем , в которых можно использовать SMB 3.0 ( кластер Hyper-V + отдельный файловый сервер или кластер Hyper-V + файловый кластер и т.д.). В данной статье описывается процесс базового создания SMB "шары", используя Powershell.

Конфигурация демо-стенда: 2 хоста hyper-v (HV01.democorp.ru  + HV02.democorp.ru), 1 файловый сервер (dc01.democorp,ru. !! dc01 является так же контроллером домена. не стоит подобную конфигурацию "переносить" в продакшен. это не рекомендуемая конфигурация и используется только в рамках демо!!). Службы File Server установлены по умолчанию.


#Создаем SMB-share (Hyperv) и предоставляем права доступа для необходимых уч.записей (клиенты SMB - hyper-v хосты + кластер + уч.запись пользователя)
PS C:\Users\Administrator> 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
 
 
#Проверяем acl
PS C:\Users\Administrator> 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
 
#Устанавливаем NTFS-права доступа , используя права доступа на SMB
PS C:\Users\Administrator> Set-SmbPathAcl -ShareName hyperv
 
#Создаем новый вирт.диск для ВМ на SMB
PS C:\Users\administrator.DEMOCORP> New-VHD -Path \\dc01\Hyperv\VMs\test\testsmb.vhdx -Dynamic -SizeBytes 15Gb -Verbose
VERBOSE: Performing the operation "New-VHD" on target "\\dc01\Hyperv\VMs\test\testsmb.vhdx".
 
 
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                  :
 
#Создаем новую ВМ на SMB
PS C:\Users\administrator.DEMOCORP> 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 "VMtest".
 
Name   State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----   ----- ----------- ----------------- ------   ------
VMtest Off   0           0                 00:00:00 Operating normally
 
#Переносим созданную ВМ в кластер
PS C:\Users\administrator.DEMOCORP> Add-ClusterVirtualMachineRole -VirtualMachine VMTest -Name "SMB TEST" -Verbose
VERBOSE: Connecting to cluster on local computer HV01.
 
Name                                    OwnerNode                               State
----                                    ---------                               -----
SMB TEST                                HV01                                    Offline
 
#Проверяем, что ВМ стала HA
PS C:\Users\administrator.DEMOCORP> (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
 
#Переносим хранилище вирт.машины на наш SMB
PS C:\Users\administrator.DEMOCORP> Move-VMStorage "new virtual machine" -DestinationStoragePath \\dc01\hyperv\VMs -ComputerName hv02 -Verbose
VERBOSE: Move-VMStorage will migrate the storage for virtual machine "New Virtual Machine".
 
 
#Смотрим какие подключения задействуются в процессе переноса хранилища ВМ на SMB
PS C:\Users\administrator.DEMOCORP> 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
 
 
#Проверям работу SMB Multichannel во время переноса хранилища ВМ на SMB
PS C:\Users\administrator.DEMOCORP> 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

SMB Multichannel в графике:

Virtual adapter vEthernet (CSV):



+ Virtual adapter vEthernet (Management):


Получаем примерно наши 200 Мбит/с, используя 2 адаптера (см.ниже)



Маленький траблшутинг

Если после создания SMB share Вы не можете создать ВМ или мигрировать на SMB ВМ + получаете ошибку "General Access Denied", то необходимо проверить права на SMB share + настроить SMB delegation между сервером SMB и клиентами SMB (для успешной отработки Cmdlets необходимо иметь установленный Active Directory Powershell Module)

#Запрашиваем текущие permissions для SMB share
Get-SmbShareAccess Hyperv
 
#Если нет нужных клиентов SMB в списке доступа, то предоставляем права
Grant-SmbShareAccess -Name Hyperv -AccountName domain\comp$ -AccessRight Full
 
#Настраиваем constrained delegation SMB Server <> SMB Clients
Enable-SMBDelegation -SmbServer dc01 -SMBClient HV01
 
Enable-SMBDelegation -SmbServer dc01 -SMBClient HV02
 
Enable-SMBDelegation -SmbServer dc01 -SMBClient HVCL




Для полноценной работы SMB Multichannel необходимо иметь:

  • 2 или более сетевых адаптера
  • 1 или более сет.адаптеров с поддержкой RSS
  • 1 или более сет.адаптеров с поддержкой RDMA
  • LBFO (Nic Teaming из 2 или более адаптеров)
  • Включенные Multichannel на уровне клиента и сервера (см.ниже)
PS C:\Users\Administrator> Get-SmbClientConfiguration
 
.........
EnableMultiChannel                    : True
DormantFileLimit                      : 1023
EnableSecuritySignature               : True
ExtendedSessionTimeout                : 1000
FileInfoCacheEntriesMax               : 64
 
PS C:\Users\Administrator> 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> 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:...

Дополнительные ссылки:


English version of this article
Hyper-V over SMB - Sample Configurations