Si vous installez une machine virtuelle Linux dans un Hyper-V, vous aurez différents points à contrôler avant de procéder à l’installation, afin d’avoir un fonctionnement optimum.
Dans un premier temps avant d’installer votre machine virtuelle quelques soit votre distribution, il vous faudra choisir quel type de machines virtuelle vous voulez installer :
- génération 1 qui sera un ensemble des matériels dit ancienne génération, par exemple contrôleur disque IDE, port COM, Port PCI, Clavier et souris PS/2, carte vidéo S3 tout ce qu’on peut retrouver dans Hyper-V 2008/R2
- génération 2 vas fournir un ensemble de matériel type, contrôleur SCSI (prise en charge des .VHDX), des périphériques émulés par logiciel (clavier, carte vidéo), carte réseau logiciel (qui permet le boot PXE). Nous retrouverons aussi d’autres avantages comme démarrage sécurisé et prise en charge du microprogramme UEFI.
Set-VMFirmware [VM_Name ] -SecureBootTemplate MicrosoftUEFICertificateAuthorityHa ba oui mais sous Windows Server 2012 on fait comment ? Eh bien on ne fait pas et Paf !! Il faudra tout simplement décocher la case Enable Secure BOOT, si vous voulez utiliser des machines de Génération 2 En PowerShell avec Windows server 2012 :
Set-VMFirmware SRVTEST -EnableSecureBoot offEnsuite, il faut savoir qu’une machine linux au niveau disque, ça peut avoir un peu la bougeotte et quand ça a la bougeotte ce n’est pas bon pour les disques dynamiques. Pour limiter cet impact, il recommandait de changer la taille des blocs sur le fichier .VHDX par défaut de 32 Mo, de la passer à 1 Mo. Cela se passe avec la commande powershell :
New-VHD –Path [nom de la VM] –SizeBytes 127GB –Dynamic –BlockSizeBytes 1MBAttention : 1Mb pour 1 Mega Bytes, et Bytes en Anglais c’est Octets. Beaucoup de monde tombe dans le piège notamment pour les mesures performances Dans le choix de type de système de fichiers, il sera préférable d’utiliser un système de fichiers ext4 car il est plus performant sur les disques dynamiques. La partie réseau Si vos futures machines virtuelles vous faire un cluster basé sur les adresses MAC, la carte réseau de votre machine virtuelle doit avoir obligatoirement une adresse MAC statique. En fait en cas de basculement, la carte réseau de la machine virtuelle risque de perdre sa configuration d’adresse, c’est pour cela qu’on doit la fixer en statique. Pour mettre l’adresse MAC en statique, vous devez aller dans les propriétés de la VM, puis dans Carte Réseau et Fonctionnalités avancées. Là, dans le panneau de droite vous pourrez le fixer l’adresse MAC en statique: Et en powershell:
Set-VMNetworkAdapter [nom de la VM] -StaticMacAddress [adresse Mac]C’est tout pour les recommandations avant la création de la VM. Maintenant il ne reste plus qu’a scripté tout ça 🙂 :
<# .Synopsis Create Virtual Machine Linux .DESCRIPTION Create Virtual Machine Linux by Hyper-V version .EXAMPLE New-VMLinux -ServerName "localhost" -VMname "SRVLINUX" -VmPath 'c:\vmtest' -VhdxSize 20 -VmRam 2 -VmCpu 2 #> function New-VMLinux { [CmdletBinding()] [Alias()] [OutputType([int])] Param ( #server Hpyve-V name $ServerName, # VM name $VMname, # Path of VM $VmPath, # Max Size VHDX $VhdxSize, # Max size Ram $VmRam, # Nomber of Cpu $VmCpu ) Begin { } Process { #Test of connectivity try { $connetion = Test-Connection -computername $ServerName -Count 1 -ErrorAction stop } catch [System.Net.NetworkInformation.PingException] { return "$ServerName offline or not existing" exit } try { $HPtest = Get-WmiObject -ComputerName $ServerName -Class Win32_PerfFormattedData_HvStats_HyperVHypervisor -ErrorAction Stop } #test if remote access is ok catch [System.UnauthorizedAccessException] { Return write-host "Not access" } #test if Hyper-V is present catch [System.Management.Automation.RuntimeException] { Return write-host "Hyper-V not present" } #Check hyper-V version $HpVer1 = (Get-WmiObject -ComputerName $ServerName -Class Win32_operatingSystem).Version $hpVer2 = $HpVer1.split(".") switch ($hpVer2[0]) { '10' { $HPVer = "W2K16" } '6' { switch ($hpVer2[1]) { '0' { $HPVer = "W2K8" } '1' { $HPVer = "W2K8R2" } '2' { $HPVer = "W2K12" } '3' { $HPVer = "W2K12R2" } } } } # test File path $filetest = Test-Path $VmPath if($filetest -eq $false) { Return Write-Host "file not present $VmPath" } # test VM name is not use $VMexists = (get-vm -ComputerName $ServerName).Name foreach ($VMexist in $VMexists) { if($VMname -eq $VMexist) { Return write-host "error the VM name $VMname is present" } } #test free space path $RootPath = (Get-ItemProperty $VmPath).Root.Name If ($RootPath.Contains("$")) { $RootPath = $RootPath.replace('$',':') } if ($RootPath.Contains("\")) { $RootPath = $RootPath.replace('\','') } $PathfreeSize = [math]::round(((Get-WmiObject -ComputerName $ServerName -Class Win32_logicaldisk | Where-Object {$_.DeviceID -eq $RootPath}).FreeSpace /1Gb),1) If ($PathfreeSize -lt $VhdxSize) { Write-Warning "overprovisioning!! $PathfreeSize Gb free size" } #test free memory $freeRam = [math]::round(((Get-WmiObject -ComputerName $ServerName -Class Win32_OperatingSystem).FreePhysicalMemory /(1024 * 1024)),1) If ($PathfreeSize -lt $VhdxSize) { Write-Warning "overprovisioning of memory!! $PathfreeSize Gb free RAM" } #Create VM if (($VmPath).EndsWith("\") -eq $false ) { $VmPath = $VmPath + "\" } $VmPathfinal = $VmPath + $VMname + ".vhdx" $VhdxSizefinal = $VhdxSize * 1Gb $VmRamfinal = $VmRam * 1Gb New-VHD -Path $VmPathfinal -SizeBytes $VhdxSizefinal -Dynamic –BlockSizeBytes 1MB switch ($HPVer) { {$_ -in 'W2K8','W2K8R2'} {New-VM -Name $VMname -VHDPath $VmPathfinal} Default {New-VM -Name $VMname -generation 2 -VHDPath $VmPathfinal } } Set-VM $VMname -ProcessorCount $VmCpu -DynamicMemory -MemoryMaximumBytes $VmRamfinal if($HPVer -eq "W2K16") { Set-VMFirmware $VMname -SecureBootTemplate MicrosoftUEFICertificateAuthority } } End { } }Une aide est intégrée: Voici un exemple de création
Merci au top !!!