Содержание

Hyper-V

Установка

# Install Hyper-V on Windows 10
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

Требования для Linux guests

New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Fixed -BlockSizeBytes 1MB
# New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB

Best Practices for running Linux on Hyper-V

Создание VM

# Путь в данном случае по умолчанию, файл уже должен быть создан.
New-VM -Name Debian04 -VHDPath Debian04.vhdx -SwitchName Internal
# Создать новый диск 60 ГБ
New-VM -Name Debian04 -NewVHDPath Debian04.vhdx -NewVHDSizeBytes 60GB -SwitchName Internal

На VM gen2 на вкладке Security ошибка: Property 'BindToHostTpm' does not exist in class 'Msvm_SecuritySettingData'.

Set-VMFirmware VM_NAME -EnableSecureBoot off
$node = "HV03"
$vmName = "t-docker1"
$vhd = "C:\ClusterStorage\Volume1\VM\Virtual Hard Disks\t-docker1.vhdx"
 
# Линуксовый диск (-BlockSizeBytes 1MB)
New-VHD -Path "$vhd" `
-SizeBytes 60GB -Fixed -BlockSizeBytes 1MB -ComputerName $node
 
# Создание ВМ
New-VM -Name $vmName `
-VHDPath "$vhd" `
-MemoryStartupBytes 4GB `
-SwitchName "V-Lan" `
-Generation 2 `
-Path "C:\ClusterStorage\Volume1\VM" `
-ComputerName $node
 
# Процессоры, описание
Set-VM -VMName $vmName -ComputerName $node `
-ProcessorCount 2 `
-Notes '[Alpine Linux] Тестовый Docker, IP 192.168.1.100'
 
# Добавить DVD
Add-VMDvdDrive -VMName $vmName -ComputerName $node
Set-VMDvdDrive -VMName $vmName -ComputerName $node -Path "c:\ISO\alpine-virt-3.14.0-x86_64.iso"
 
# SecureBoot для Linux, загрузка с DVD
Set-VMFirmware -VMName $vmName -ComputerName $node `
-SecureBootTemplate 'MicrosoftUEFICertificateAuthority' `
-FirstBootDevice ((get-VMFirmware -VMName $vmName -ComputerName $node).bootorder |? device -match 'dvddrive')
# Либо вообще выключить SecureBoot
# Set-VMFirmware -VMName $vmName -ComputerName $node -EnableSecureBoot Off
 
# Добавить машину в кластер
Add-ClusterVirtualMachineRole -VMName $vmName -Cluster hvc

Общие диски (VHD Set)

Виртуальные диски, которые можно подключить сразу к нескольким ВМ. Появились в Windows 10 / Server 2016.

# при указании расширения vhds система понимает, что нужно сделать VHD Set.
New-VHD –Path "c:\clusterstorage\vmstorage01\disk.vhds" -SizeBytes 40Gb -Fixed
# прицепить VHD Set к ВМ
Add-VMHardDiskDrive -VMName VMCL01 -Path "c:\clusterstorage\vmstorage01\disk.vhds" -SupportPersistentReservations # или -ShareVirtualDisk, это алиас

https://winitpro.ru/index.php/2017/05/02/vhd-set-novyj-tip-virtualnyx-diskov-v-windows-server-2016/
https://docs.microsoft.com/en-us/powershell/module/hyper-v/add-vmharddiskdrive

Активация VM Windows

https://docs.microsoft.com/ru-ru/windows-server/get-started-19/vm-activation-19#avma-keys

Миграция между хостами

При перемещении между некластерными хостами ошибка:

Решение - в AD учётке исходного хоста добавить в делегирование - «доверять делегирование указанных служб» → «Использовать только Kerberos» службы целевого хоста Microsoft Virtual System Migration Service и cifs.
Настройка узлов для динамической миграции без отказоустойчивой кластеризации
Использование динамической миграции без отказоустойчивой кластеризации для перемещения виртуальной машины

$hvHosts = (1..6).foreach({'HV' + ('{0:d2}' -f $_)})
$hvServices = $hvHosts.foreach({
'Microsoft Virtual System Migration Service/' + $_
'cifs/' + $_
})
 
foreach ($hvHost in $hvHosts) {
# Очистка предыдущих значений
Set-ADComputer -Identity $hvHost -clear 'msDS-AllowedToDelegateTo'
    # Добавление новых
    foreach ($hvservice in $hvservices -notmatch $hvHost) {
    Set-ADComputer $hvHost -Add @{'msDS-AllowedToDelegateTo'="$hvservice"}
    }
}
 
# проверка
$hvhosts |% {$_; (Get-ADComputer $_ -Properties 'msDS-AllowedToDelegateTo').'msDS-AllowedToDelegateTo'; ''}

https://4sysops.com/archives/how-to-configure-computer-delegation-with-powershell/

Выгнать все ВМ с ноды кластера и вернуть обратно

# выгнать
Suspend-ClusterNode -Name "node1" -Drain
# вернуть
Resume-ClusterNode -Name "node1" -Failback Immediate
 
# Динамическая (live) миграция на "лучший из возможных узлов" (best possible node)
Get-ClusterGroup -Name "vm-server1" | Move-ClusterVirtualMachineRole # без параметра -Node

https://social.technet.microsoft.com/Forums/windowsserver/en-US/0186dd85-52b4-421e-87b0-117051d77db1/live-migration-to-best-possible-node

Балансировка

Начиная с Windows Server 2016, есть встроенный механизм.

get-cluster hvc2 |fl autobalancer*
AutoBalancerMode  : 2
AutoBalancerLevel : 1

AutoBalancerLevel:

AutoBalancerMode:

Миграция виртуальной машины с vTPM

Вкратце - на всех хостах кластера должен быть идентичный набор сертификатов в хранилище Shielded VM Local Certificates.
Сертификаты создаются вместе с виртуальной машиной, у которой включён vTPM (Windows 11 и т. п.)
После создания VM нужно распространить её сертификат на все остальные узлы.
https://www.hyper-v-server.de/news/live-migration-of-hyper-v-vms-with-a-vtpm-chip-hyperv-tpm/

Выгнать машину из кластера и перенести на другую ноду

$vm = "windows7-test"
$destHost = "hv03"
$storagePath = "C:\ClusterStorage\Volume1\VM"
 
Remove-ClusterGroup -VMId (get-vm "$vm").vmid -RemoveResources -Force -Confirm:$false
Move-VM "$vm" -DestinationHost "$destHost" -IncludeStorage -DestinationStoragePath "$storagePath"
 
# Вариант для всех выгнанных из кластера машин, миграция с одной ноды
get-vm |? isclustered -ne 'true' |Move-VM -DestinationHost $destHost -IncludeStorage -DestinationStoragePath $storagePath

Управление Hyper-V 2012R2 c машины на Windows 10

get-vm : Модуль Hyper-V, задействованный в этом сеансе Windows PowerShell, не может использоваться для удаленного управления сервером «host03». Загрузите совместимую версию модуля Hyper-V или используйте удаленное взаимодействие Powershell для прямого подключения к удаленному серверу.

Решение:

Import-Module Hyper-V -RequiredVersion 1.1

Кластер

На Hyper-V Server 2019

# Поставить компоненты кластера и MPIO
Add-WindowsFeature failover-clustering,multipath-io
# Вызвать окно MPIO
mpiocpl
# Разрешить удалённое управление дисками из MMC
Enable-NetFirewallRule -DisplayGroup "Удаленное управление томами" # "Disk Management"

Пересканирование доступных дисков

Нужно, если настроен доступ к полке через FC, а хост пока дисков не видит.

Update-HostStorageCache
# Посмотреть
Get-disk
 
Number Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition Style
------ ------------- -------------                    ------------         -----------------      ---------- ----------
0      HP LOGICAL... PDNLH0BRH8M0LP                   Healthy              Online                   136.7 GB GPT
7      HP P2000 G... 00c0ff1a4c3b00004c6ab66001000000 Healthy              Offline                  13.63 TB RAW
5      HP P2000 G... 00c0ff1a4c3b00006b6ab66001000000 Healthy              Offline                 953.62 MB RAW
8      HP P2000 G... 00c0ff1a4c3b00004c6ab66001000000 Healthy              Offline                  13.63 TB RAW
6      HP P2000 G... 00c0ff1a4c3b00006b6ab66001000000 Healthy              Offline                 953.62 MB RAW
3      HP P2000 G... 00c0ff1a4c3b00004c6ab66001000000 Healthy              Offline                  13.63 TB RAW
1      HP P2000 G... 00c0ff1a4c3b00006b6ab66001000000 Healthy              Offline                 953.62 MB RAW
4      HP P2000 G... 00c0ff1a4c3b00004c6ab66001000000 Healthy              Offline                  13.63 TB RAW
2      HP P2000 G... 00c0ff1a4c3b00006b6ab66001000000 Healthy              Offline                 953.62 MB RAW

Версии конфигураций виртуальных машин

Get-VMHostSupportedVersion
 
# Hyper-V Server 2016
Name                                                      Version IsDefault
----                                                      ------- ---------
Microsoft Windows 8.1/Server 2012 R2                      5.0     False
Microsoft Windows 10 1507/Server 2016 Technical Preview 3 6.2     False
Microsoft Windows 10 1511/Server 2016 Technical Preview 4 7.0     False
Microsoft Windows Server 2016 Technical Preview 5         7.1     False
Юбилейное обновление Microsoft Windows 10/Server 2016     8.0     True
Предварительная версия                                    254.0   False
Экспериментальная                                         255.0   False
 
# Hyper-V Server 2019
Name                                                           Version IsDefault
----                                                           ------- ---------
Microsoft Windows 8.1/Server 2012 R2                           5.0     False
Microsoft Windows 10 1507/Server 2016 Technical Preview 3      6.2     False
Microsoft Windows 10 1511/Server 2016 Technical Preview 4      7.0     False
Microsoft Windows Server 2016 Technical Preview 5              7.1     False
Юбилейное обновление Microsoft Windows 10/Server 2016          8.0     False
Обновление Microsoft Windows 10 для дизайнеров                 8.1     False
Microsoft Windows 10 Fall Creators Update/сервер 1709          8.2     False
Обновление Microsoft Windows 10 за апрель 2018 г./Server 1803  8.3     False
Обновление Microsoft Windows 10 за октябрь 2018 г./Server 2019 9.0     True

Если нужно на 16-м сервере сделать виртуалку, которую может быть нужно переместить на 12-й сервер, то при создании надо указывать параметр -version:

New-VM -Name "WindowsCV5" -Version 5.0

Create a virtual machine by using Windows PowerShell

Supported virtual machine configuration versions

vmguest.iso

Для старинных ОС. Взято с Windows Server 2012 R2.

vmguest.zip ≈ 25 МБ

MD5 (для .iso): E6B5AC48B325D6C56B5857CA4EDAE99C
SHA1 (для .iso): 56F50A4E5A8825B6E24742FBE598EA50BDFA90C2

Конвертация дисков VMWare в Hyper-V

Поставить Microsoft Virtual Machine Converter (или Starwind V2V converter).

# импортировать модуль
Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'
# конвертировать
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath C:\temp\disk.vmdk -DestinationLiteralPath 'C:\temp' -VhdType DynamicHardDisk -VhdFormat Vhdx

Cautious: If you have downloaded the full VM from Vmware, then it will create two VMDK files. One with “-flat.vmdk” that is the size of the disk and another is with “.vmdk” which is of 1-2 KB. When you type the command to start the conversion use the path of the disk with “.vmdk” extension. Don’t get confused. If you by mistake take the path of “-flat.vmdk”, you will get an error “No suitable drive was found at path”

https://www.sysinfotools.com/blog/convert-vmware-to-hyper-v/

The entry 4 is not a supported disk database entry for the descriptor

Ошибка при попытке конвертирования:
ConvertTo-MvmcVirtualHardDisk : The entry 4 is not a supported disk database entry for the descriptor.

Решение: скачать dsfok toolset.

# Считать дескрипторы в файл
dsfo.exe "D:\temp\disk.vmdk" 512 1024 descriptor1.txt
# Закомментировать строку
#ddb.toolsInstallType = "4"
# Загрузить дескрипторы обратно в образ
dsfi.exe "D:\temp\disk.vmdk" 512 1024 descriptor1.txt

После этого конвертация будет идти нормально.

https://techie-trooper.dev/virtualisation/2020/01/23/convert-vmware-to-ms-vm.html

Ещё один конвертер - qemu-img

Помог, когда выгруженный из VirtualBox .VHD не открывался в Hyper-V.

qemu-img-win-x64-2_3_0.zip (https://cloudbase.it/qemu-img-windows/)

& D:\temp\qemu-img\qemu-img.exe convert D:\temp\Win7x64-1.vhd -O vhdx -o subformat=dynamic D:\temp\Win7x64-1.vhdx

Supported formats: dmg vpc host_device bochs blkverify blkdebug parallels file nbd vmdk vdi qcow2 qed cloop qcow vhdx sheepdog null-aio vvfat raw null-co

Внешний ethernet адаптер уже привязан к протоколу виртуального коммутатора

External Ethernet adapter XYZ is already bound to the Microsoft Virtual Switch protocol
Ошибка при попытке создания внешнего виртуального коммутатора.
Решение - снять в свойствах физического адаптера галку «Расширяемый виртуальный коммутатор Hyper-V» (Microsoft Virtual Switch).

Медленная скорость передачи данных на сетевом адаптере

После настройки в Hyper-V внешнего сетевого адаптера скорость интернета (и вообще передачи данных через адаптер) сильно просела - фактически, до нуля. В моём случае скорость была нормальная на скачивание (download), а на закачку (upload) перестало работать.

Решение: обновить драйвер. Intel Wireless AC 9560

Решение 2: в Диспетчере устройств зайти в свойства Microsoft Network Adapter multiplexor Driver и в доп. свойствах отключить опции

Powershell:

Set-NetAdapterAdvancedProperty -Name 'Сетевой мост' -RegistryKeyword '*LsoV2IPv4' -RegistryValue 0
Set-NetAdapterAdvancedProperty -Name 'Сетевой мост' -RegistryKeyword '*LsoV2IPv6' -RegistryValue 0

https://community.intel.com/t5/Wireless/Hyper-V-External-Virtual-Switch-Bridge-Mode-Slow-download-speeds/td-p/1222149#M31808