<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.blaxeen.com/index.php?action=history&amp;feed=atom&amp;title=HyperV_migration_kvm</id>
	<title>HyperV migration kvm - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blaxeen.com/index.php?action=history&amp;feed=atom&amp;title=HyperV_migration_kvm"/>
	<link rel="alternate" type="text/html" href="https://wiki.blaxeen.com/index.php?title=HyperV_migration_kvm&amp;action=history"/>
	<updated>2026-04-18T13:49:31Z</updated>
	<subtitle>Historique des révisions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.blaxeen.com/index.php?title=HyperV_migration_kvm&amp;diff=4353&amp;oldid=prev</id>
		<title>127.0.0.1 : Page créée avec « &lt;pre&gt; # Import xml de libvirt # convert raw en VHD # convert vhd en vhdx # Ajout VM dans cluster   $ErrorActionPreference = &quot;Stop&quot;  # Demandes des informations Write-Outpu... »</title>
		<link rel="alternate" type="text/html" href="https://wiki.blaxeen.com/index.php?title=HyperV_migration_kvm&amp;diff=4353&amp;oldid=prev"/>
		<updated>2020-07-02T11:21:54Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « &amp;lt;pre&amp;gt; # Import xml de libvirt # convert raw en VHD # convert vhd en vhdx # Ajout VM dans cluster   $ErrorActionPreference = &amp;quot;Stop&amp;quot;  # Demandes des informations Write-Outpu... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# Import xml de libvirt&lt;br /&gt;
# convert raw en VHD&lt;br /&gt;
# convert vhd en vhdx&lt;br /&gt;
# Ajout VM dans cluster&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ErrorActionPreference = &amp;quot;Stop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Demandes des informations&lt;br /&gt;
Write-Output &amp;quot;Choisir le chemin de la VM a importer :&amp;quot;&lt;br /&gt;
$InputVmSrcPath=ls Z: | Select FullName | Out-GridView -OutputMode Single -Title &amp;quot;Choisir le chemin de la VM a importer :&amp;quot;&lt;br /&gt;
Write-Output $InputVmSrcPath.Fullname&lt;br /&gt;
&lt;br /&gt;
if (-not (Test-Path -Path &amp;quot;$($InputVmSrcPath.FullName)\*.xml&amp;quot;)) {&lt;br /&gt;
   Write-Error -Message &amp;quot;Erreur : XML de la VM non trouvé&amp;quot;&lt;br /&gt;
   exit &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;Choisir le chemin d&amp;#039;export :&amp;quot;&lt;br /&gt;
$InputVmDestPath=ls C:\ClusterStorage | Select FullName | Out-GridView -OutputMode Single -Title &amp;quot;Choisir où exporter la VM :&amp;quot;&lt;br /&gt;
Write-Output $InputVmDestPath.Fullname&lt;br /&gt;
&lt;br /&gt;
### Lecture XML&lt;br /&gt;
$ConfigPath=&amp;quot;$($InputVmSrcPath.FullName)\*.xml&amp;quot; | Resolve-Path&lt;br /&gt;
[xml]$XmlDocument = Get-Content -Path $ConfigPath&lt;br /&gt;
$VMName=$XmlDocument.domain.name&lt;br /&gt;
$VMCpu=$XmlDocument.domain.vcpu.&amp;#039;#text&amp;#039;&lt;br /&gt;
$VMMemory=&amp;quot;$($XmlDocument.domain.memory.&amp;#039;#text&amp;#039;)$($($XmlDocument.domain.memory.unit).Replace(&amp;#039;iB&amp;#039;,&amp;#039;B&amp;#039;))&amp;quot;/1&lt;br /&gt;
if (($VMMemory/2MB) % 2 -ne 0) { ## The VM memory size need to be a multiple of 2MB&lt;br /&gt;
    $VMMemory=([Math]::Ceiling($VMMemory/2MB)*2MB)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$VMDisks=$XmlDocument.domain.devices.disk&lt;br /&gt;
$VMInterfaces=$XmlDocument.domain.devices.interface&lt;br /&gt;
$VMPath=&amp;quot;$($InputVmDestPath.FullName)\$VMName&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check presence fichier disks&lt;br /&gt;
Foreach ($VMDisk in $VMDisks) {&lt;br /&gt;
    if ($VMDisk.device -eq &amp;#039;disk&amp;#039;) {&lt;br /&gt;
        if ($VMDisk.source.dev -match &amp;#039;/dev/(?&amp;lt;volume&amp;gt;[^/]+)/(?&amp;lt;name&amp;gt;.+)&amp;#039;) {&lt;br /&gt;
            $name=$Matches.name&lt;br /&gt;
            if (Test-Path -PathType Leaf -Path &amp;quot;$($InputVmSrcPath.FullName)\$name.raw&amp;quot;) {&lt;br /&gt;
                Write-Output &amp;quot;$name.raw trouvé&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                Write-Error &amp;quot;Fichier $name.raw non trouvé dans $($InputVmSrcPath.FullName) !&amp;quot;&lt;br /&gt;
                Exit&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Création dossiers&lt;br /&gt;
Write-Output &amp;quot;Création des dossiers dans le ClusterStorage&amp;quot;&lt;br /&gt;
New-Item -ItemType &amp;quot;Directory&amp;quot; -path $InputVmDestPath.FullName -Name $VMName -ErrorAction Ignore&lt;br /&gt;
New-Item  -ItemType &amp;quot;Directory&amp;quot; -path $VMPath -Name &amp;quot;Snapshots&amp;quot; -ErrorAction Ignore&lt;br /&gt;
New-Item  -ItemType &amp;quot;Directory&amp;quot; -path $VMPath -Name &amp;quot;Virtual Hard Disks&amp;quot; -ErrorAction Ignore&lt;br /&gt;
New-Item  -ItemType &amp;quot;Directory&amp;quot; -path $VMPath -Name &amp;quot;Virtual Machines&amp;quot; -ErrorAction Ignore&lt;br /&gt;
Write-Output &amp;quot;Fin de la création des dossiers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Creation VM&lt;br /&gt;
$VM=New-VM -Name $VMName -Generation 1 -MemoryStartupBytes $VMMemory -Path $InputVmDestPath.FullName -BootDevice IDE -Verbose&lt;br /&gt;
$VM | Set-VMProcessor -Count $VMCpu -verbose&lt;br /&gt;
$VM | Remove-VMNetworkAdapter&lt;br /&gt;
$VM | Get-VMDvdDrive | Remove-VMDvdDrive&lt;br /&gt;
&lt;br /&gt;
### Ajout interfaces&lt;br /&gt;
Foreach ($VMInterface in $VMInterfaces) {&lt;br /&gt;
    if ($VMInterface.source.bridge -match &amp;#039;(?&amp;lt;sw&amp;gt;[a-zA-Z]+)(?&amp;lt;vlan&amp;gt;\d+)&amp;#039;) {&lt;br /&gt;
        if ($VMInterface.mac.address) {&lt;br /&gt;
            Write-Output &amp;quot;Ajout interface $($VMInterface.mac.address) VLAN $($Matches.vlan)&amp;quot;&lt;br /&gt;
            $adp=$VM | Add-VMNetworkAdapter -StaticMacAddress $VMInterface.mac.address -SwitchName &amp;#039;vswitch_csn&amp;#039; -Name &amp;quot;Interface VLAN $($Matches.vlan)&amp;quot; -Passthru -Verbose&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            Write-Output &amp;quot;Ajout interface VLAN $($Matches.vlan)&amp;quot;&lt;br /&gt;
            $adp=$VM | Add-VMNetworkAdapter -DynamicMacAddress $true -SwitchName &amp;#039;vswitch_csn&amp;#039; -Name &amp;quot;Interface VLAN $($Matches.vlan)&amp;quot; -Passthru -Verbose&lt;br /&gt;
        }&lt;br /&gt;
        $adp | Set-VMNetworkAdapterVlan -Access -VlanId $Matches.vlan -Verbose&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        Write-Error &amp;quot;Erreur ajout interface $($VMInterface.mac.address)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Ajout disks&lt;br /&gt;
Foreach ($VMDisk in $VMDisks) {&lt;br /&gt;
    if ($VMDisk.device -eq &amp;#039;disk&amp;#039;) {&lt;br /&gt;
        if ($VMDisk.source.dev -match &amp;#039;/dev/(?&amp;lt;volume&amp;gt;[^/]+)/(?&amp;lt;name&amp;gt;.+)&amp;#039;) {&lt;br /&gt;
            $name=$Matches.name&lt;br /&gt;
            Write-Output &amp;quot;$name.raw : Conversion du raw en VHD avec qemu-convert&amp;quot;   &lt;br /&gt;
            &amp;amp; qemu-img.exe convert &amp;quot;$($InputVmSrcPath.FullName)\$name.raw&amp;quot; -O vpc -o subformat=fixed &amp;quot;$($InputVmSrcPath.FullName)\$name.vhd&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            Write-Output &amp;quot;$name.vhd : Suppression du sparse flag&amp;quot;&lt;br /&gt;
            &amp;amp; fsutil sparse setflag &amp;quot;$($InputVmSrcPath.FullName)\$name.vhd&amp;quot; 0&lt;br /&gt;
            &lt;br /&gt;
            Write-Output &amp;quot;$name.vhd : Conversion du VHD en VHDX + mise dans ClusterVolume&amp;quot;&lt;br /&gt;
            $VHDXPath=&amp;quot;$VMPath\Virtual Hard Disks\$name.vhdx&amp;quot; &lt;br /&gt;
            Convert-VHD -Path &amp;quot;$($InputVmSrcPath.FullName)\$name.vhd&amp;quot; -DestinationPath $vhdxPath -VHDType &amp;quot;Fixed&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            Write-Output &amp;quot;Ajout du disque $name dans $VHDXPath&amp;quot;&lt;br /&gt;
            $VM | Add-VMHardDiskDrive -Path $VHDXPath &lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            Write-Warning &amp;quot;Impossible de matcher automatiquement $($VMDisk.source.dev). Faire a la main&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        Write-Output &amp;quot;Ignore ajout type non-disk&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Ajout Cluster&lt;br /&gt;
Write-Output &amp;quot;Ajout de la VM au cluster&amp;quot;&lt;br /&gt;
$VM  | Add-ClusterVirtualMachineRole&lt;br /&gt;
Write-Output &amp;quot;VM ajoutée&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;Fin des opérations du script&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Catégorie:Script]]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>