====== 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 ===== * When creating the VHDX, use 1MB BlockSizeBytes (from the default 32MB) in PowerShell, for example: New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Fixed -BlockSizeBytes 1MB # New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB * Use static MAC addresses with failover clustering * Use Hyper-V-specific network adapters, not the legacy network adapter [[https://docs.microsoft.com/ru-ru/windows-server/virtualization/hyper-v/best-practices-for-running-linux-on-hyper-v|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'.//\\ {{:service:pasted:20190716-151700.png}} 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 ===== Миграция между хостами ===== При перемещении между некластерными хостами ошибка: {{:service:pasted:20190718-125122.png}} Решение - в AD учётке исходного хоста добавить в делегирование - "доверять делегирование указанных служб" -> "Использовать только Kerberos" службы целевого хоста Microsoft Virtual System Migration Service и cifs.\\ [[https://docs.microsoft.com/ru-ru/windows-server/virtualization/hyper-v/deploy/set-up-hosts-for-live-migration-without-failover-clustering|Настройка узлов для динамической миграции без отказоустойчивой кластеризации]]\\ [[https://docs.microsoft.com/ru-ru/windows-server/virtualization/hyper-v/manage/Use-live-migration-without-Failover-Clustering-to-move-a-virtual-machine|Использование динамической миграции без отказоустойчивой кластеризации для перемещения виртуальной машины]] $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, есть [[https://techcommunity.microsoft.com/t5/failover-clustering/failover-cluster-vm-load-balancing-in-windows-server-2016/ba-p/372084|встроенный механизм]]. get-cluster hvc2 |fl autobalancer* AutoBalancerMode : 2 AutoBalancerLevel : 1 AutoBalancerLevel: * 1 Low - Move when host is more than 80% loaded (default) * 2 Medium - Move when host is more than 70% loaded * 3 High - Average nodes and move when host is more than 5% above average AutoBalancerMode: * 0 Disabled * 1 Load balance on node join * 2 Load balance on node join and every 30 minutes (default) ==== Миграция виртуальной машины с 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 [[https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/get-started/create-a-virtual-machine-in-hyper-v#create-a-virtual-machine-by-using-windows-powershell|Create a virtual machine by using Windows PowerShell]] [[https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions|Supported virtual machine configuration versions]] ===== vmguest.iso ===== Для старинных ОС. Взято с Windows Server 2012 R2. {{ :service:vmguest.zip |}} ≈ 25 МБ MD5 (для .iso): E6B5AC48B325D6C56B5857CA4EDAE99C\\ SHA1 (для .iso): 56F50A4E5A8825B6E24742FBE598EA50BDFA90C2 ===== Конвертация дисков VMWare в Hyper-V ===== Поставить [[http://download.microsoft.com/download/9/1/E/91E9F42C-3F1F-4AD9-92B7-8DD65DA3B0C2/mvmc_setup.msi|Microsoft Virtual Machine Converter]] (или [[https://www.starwindsoftware.com/tmplink/starwindconverter.exe|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. Решение: скачать [[http://sanbarrow.com/files/dsfok.zip|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. {{ :service: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) перестало работать. **Решение:** обновить драйвер. [[https://downloadcenter.intel.com/ru/product/99446|Intel Wireless AC 9560]] **Решение 2:** в Диспетчере устройств зайти в свойства Microsoft Network Adapter multiplexor Driver и в доп. свойствах отключить опции * IPv4: разгрузка операций с отправкой больших пакетов версии 2 (Large Send Offload Version 2 (IPv4)) * IPv6: разгрузка операций с отправкой больших пакетов версии 2 (Large Send Offload Version 2 (IPv6)) 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