Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : Windows Server 2022, Windows Server 2019, Windows Server 2016
Introduction
Cet article décrit les méthodes que vous pouvez utiliser pour fusionner des points de contrôle dans une machine virtuelle si Hyper-V a généré de nombreux disques de différenciation. La méthode que vous utilisez dépend des détails de la situation.
Fusion de points de contrôle que vous pouvez afficher dans le Gestionnaire Hyper-V
Les points de contrôle que vous pouvez afficher dans le Gestionnaire Hyper-V sont les plus simples à gérer. En règle générale, vous pouvez utiliser la commande Supprimer le point de contrôle dans le menu contextuel pour supprimer ces points de contrôle.
Dans certains cas, supprimer le point de contrôle et supprimer la sous-arborescence de point de contrôle n’apparaissent pas dans le menu contextuel. Cela peut se produire si le logiciel de sauvegarde tiers génère des points de contrôle, mais ne les supprime pas après une opération de sauvegarde.
Dans ces cas, vous pouvez toujours utiliser la clé Delete pour supprimer le point de contrôle.
En résumé, pour supprimer des points de contrôle dans le Gestionnaire Hyper-V (et fusionner les fichiers de disque de différenciation), procédez comme suit :
- Dans le Gestionnaire Hyper-V, sélectionnez la machine virtuelle.
- Dans la liste Points de contrôle, cliquez avec le bouton droit sur le point de contrôle que vous souhaitez supprimer, puis effectuez l’une des actions suivantes :
- Sélectionnez Supprimer le point de contrôle.
- Si supprimer le point de contrôle n’est pas disponible, sélectionnez le point de contrôle, puis sélectionnez Del.
Fusion de points de contrôle que vous ne pouvez pas afficher dans le Gestionnaire Hyper-V
Vous pouvez rencontrer une situation dans laquelle le Gestionnaire Hyper-V n’affiche pas de points de contrôle pour une machine virtuelle spécifique. En même temps, le dossier de système de fichiers correspondant affiche de nombreux fichiers de disque de différenciation. Cela peut se produire si le logiciel de sauvegarde tiers génère des points de contrôle, mais ne les supprime pas après une opération de sauvegarde.
Vous pouvez fusionner les fichiers de disque de différenciation de deux façons, selon que vous pouvez arrêter la machine virtuelle.
Quand vous pouvez arrêter la machine virtuelle
Pour fusionner les fichiers de disque de différenciation, arrêtez la machine virtuelle. En règle générale, les fichiers de disque de différenciation fusionnent dans le cadre du processus d’arrêt de la machine virtuelle.
Quand vous ne pouvez pas arrêter la machine virtuelle
Vous pouvez fusionner des disques de différenciation dans une machine virtuelle en ligne. Toutefois, il s’agit d’un processus en plusieurs étapes qui implique des scripts Windows PowerShell. Pour ce faire, procédez comme suit :
- Sauvegardez tous les fichiers de disque de différenciation (fichiers VHD).
- Créez et exécutez la
Get-VHDChain
fonction. Cette étape est décrite en détail plus loin dans cette section. - Créez et exécutez des commandes de fusion. Cette étape est décrite en détail plus loin dans cette section.
- Modifiez les paramètres de la machine virtuelle pour qu’il pointe vers le disque dur virtuel parent fusionné.
- Démarrez la machine virtuelle. Un démarrage réussi signifie que la fusion s’est terminée correctement.
Créer et exécuter la fonction Get-VHDChain
Sur le serveur hôte Hyper-V, ouvrez une fenêtre d’invite de commandes PowerShell d’administration.
Copiez le script suivant, puis collez-le dans la fenêtre PowerShell :
function Get-VHDChain { [CmdletBinding()] param( [string]$ComputerName = $env:COMPUTERNAME, [string[]]$Name = '*' ) try { $VMs = Get-VM -ComputerName $ComputerName -Name $Name -ErrorAction Stop } catch { Write-Warning $_.Exception.Message } foreach ($vm in $VMs){ $VHDs = ($vm).harddrives.path foreach ($vhd in $VHDs){ Clear-Variable VHDType -ErrorAction SilentlyContinue try { $VHDInfo = $vhd | Get-VHD -ComputerName $ComputerName -ErrorAction Stop } catch { $VHDType = 'Error' $VHDPath = $vhd Write-Verbose $_.Exception.Message } $i = 1 $problem = $false while (($VHDInfo.parentpath -or $i -eq 1) -and (-not($problem))){ If ($VHDType -ne 'Error' -and $i -gt 1){ try { $VHDInfo = $VHDInfo.ParentPath | Get-VHD -ComputerName $ComputerName -ErrorAction Stop } catch { $VHDType = 'Error' $VHDPath = $VHDInfo.parentpath Write-Verbose $_.Exception.Message } } if ($VHDType -ne 'Error'){ $VHDType = $VHDInfo.VhdType $VHDPath = $VHDInfo.path } else { $problem = $true } [pscustomobject]@{ Name = $vm.name VHDNumber = $i VHDType = $VHDType VHD = $VHDPath } $i++ } } } } ==================================
Ce script définit une
Get-VHDChain
fonction qui identifie la chaîne de disque dur virtuel (ensemble de disques de différenciation pour la machine virtuelle).Exécutez la commande suivante :
Get-vhdchain -name <virtual machine name>
Note
Dans cette commande, <le nom> de la machine virtuelle représente le nom de la machine virtuelle.
Lorsque le script s’exécute, vous devez voir la sortie qui ressemble à la sortie suivante.
Assurez-vous que cela s’exécute
Get-VHDChain
sans erreur.Important
Si la
Get-VHDChain
sortie contient des erreurs, vous devez supprimer les disques de différenciation affectés du dossier. Dans l’exemple suivant, le disque 24 a généré une erreur et doit être supprimé du dossier de disque de différenciation.
Créer et exécuter des commandes de fusion
Les instructions suivantes créent un script en C :\temp\merge.txt pour fusionner les disques. Effectuez les étapes suivantes :
Sur le lecteur C : local, créez un dossier nommé temp.
Ouvrez une fenêtre PowerShell d’administration, puis exécutez la commande suivante :
$vm = Read-Host("please enter the VMname")
À l’invite de commandes, entrez le nom de la machine virtuelle.
Copiez le script suivant, puis collez-le à l’invite de commandes.
$vhds=Get-VM $vm | Select-Object -Property VMId | Get-VHD if (Test-Path '.\merge.txt'){Remove-Item -Path '.\merge.txt'} foreach($vhd in $vhds){ $chain=[ordered]@{} while ($vhd.ParentPath){ $chain.add($vhd.Path,$vhd.ParentPath) $vhd=Get-VHD -Path $vhd.ParentPath } $chain.GetEnumerator() | ForEach-Object { $line='Merge-VHD -Path "{0}" -Destination "{1}"' -f $_.key, $_.value $line | Out-File -FilePath .\merge.txt -Append } }
Le script doit ressembler au script suivant :
Ouvrez C :\temp\merge.txt. Ce fichier contient une liste de commandes de ligne de commande regroupées en paires. Chaque paire de commandes définit les opérations de fusion pour un disque de différenciation unique.
Copiez la première commande de la première paire, collez-la à l’invite de commandes, puis exécutez-la. Ensuite, procédez de la même façon pour la deuxième commande de la première paire. Ces opérations fusionnent le disque de différenciation que les commandes adressent.
Une fois le disque fusionné, répétez les étapes précédentes pour le disque de différenciation suivant dans la liste. Continuez pour tous les disques de différenciation que les adresses de fichier merge.txt .