Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016
Introduzione
Questo articolo descrive i metodi che è possibile usare per unire i checkpoint in una macchina virtuale (VM) se Hyper-V ha generato molti dischi diversi. Il metodo utilizzato dipende dai dettagli della situazione.
Unione di checkpoint che è possibile visualizzare nella console di gestione di Hyper-V
I checkpoint che è possibile visualizzare nella console di gestione di Hyper-V sono i più semplici da gestire. In genere, è possibile usare il comando Elimina checkpoint nel menu di scelta rapida per eliminare questi checkpoint.
In alcuni casi, Elimina checkpoint ed Elimina sottoalbero checkpoint non vengono visualizzati nel menu di scelta rapida. Ciò può verificarsi se il software di backup di terze parti genera checkpoint, ma non li elimina dopo un'operazione di backup.
In questi casi, è comunque possibile usare la chiave Delete per eliminare il checkpoint.
In sintesi, per eliminare i checkpoint nella console di gestione di Hyper-V (e unire i file del disco differenze), seguire questa procedura:
- Nella console di gestione di Hyper-V selezionare la macchina virtuale.
- Nell'elenco Checkpoint fare clic con il pulsante destro del mouse sul checkpoint da eliminare e quindi eseguire una delle azioni seguenti:
- Selezionare Elimina checkpoint.
- Se Elimina checkpoint non è disponibile, selezionare il checkpoint e quindi selezionare Canc.
Unione di checkpoint che non è possibile visualizzare nella console di gestione di Hyper-V
Potrebbe verificarsi una situazione in cui la console di gestione di Hyper-V non mostra checkpoint per una macchina virtuale specifica. Allo stesso tempo, la cartella del file system corrispondente mostra molti file di disco diversi. Ciò può verificarsi se il software di backup di terze parti genera checkpoint, ma non li elimina dopo un'operazione di backup.
È possibile unire i file del disco differenze in uno dei due modi, a seconda che sia possibile arrestare la macchina virtuale.
Quando è possibile arrestare la macchina virtuale
Per unire i file disco diversi, arrestare la macchina virtuale. In genere, i file del disco differenze si uniscono come parte del processo di arresto della macchina virtuale.
Quando non è possibile arrestare la macchina virtuale
È possibile unire dischi diversi in una macchina virtuale online. Tuttavia, si tratta di un processo in più passaggi che prevede script di Windows PowerShell. A tale scopo, seguire questa procedura generale:
- Eseguire il backup di tutti i file disco diversi (file VHD).
- Creare ed eseguire la
Get-VHDChain
funzione . Questo passaggio viene descritto in dettaglio più avanti in questa sezione. - Creare ed eseguire comandi di merge. Questo passaggio viene descritto in dettaglio più avanti in questa sezione.
- Modificare le impostazioni della macchina virtuale in modo che punti al disco rigido virtuale padre unito.
- Avviare la VM. Un avvio riuscito indica che l'unione è stata completata correttamente.
Creare ed eseguire la funzione Get-VHDChain
Nel server host Hyper-V aprire una finestra del prompt dei comandi di PowerShell amministrativa.
Copiare lo script seguente e incollarlo nella finestra di 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++ } } } } ==================================
Questo script definisce una
Get-VHDChain
funzione che identifica la catena VHD (il set di dischi differenze per la macchina virtuale).Eseguire il comando riportato di seguito:
Get-vhdchain -name <virtual machine name>
Nota
In questo comando il <nome> della macchina virtuale rappresenta il nome della macchina virtuale.
Quando viene eseguito lo script, dovrebbe essere visualizzato un output simile all'output seguente.
Assicurarsi che
Get-VHDChain
venga eseguito senza errori.Importante
Se l'output
Get-VHDChain
contiene errori, è necessario rimuovere i dischi che differiscono interessati dalla cartella. Nell'esempio seguente, Disk 24 ha generato un errore e deve essere rimosso dalla cartella disco differenze.
Creare ed eseguire comandi di merge
Le istruzioni seguenti creano uno script in C:\temp\merge.txt per unire i dischi. Seguire questa procedura:
Nell'unità C: locale creare una cartella denominata temp.
Aprire una finestra di PowerShell amministrativa e quindi eseguire il comando seguente:
$vm = Read-Host("please enter the VMname")
Al prompt dei comandi immettere il nome della macchina virtuale.
Copiare lo script seguente e incollarlo al prompt dei comandi.
$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 } }
Lo script dovrebbe essere simile allo script seguente:
Aprire C:\temp\merge.txt. Questo file contiene un elenco di comandi della riga di comando raggruppati in coppie. Ogni coppia di comandi definisce le operazioni di unione per un singolo disco differenze.
Copiare il primo comando della prima coppia, incollarlo al prompt dei comandi e quindi eseguirlo. Eseguire quindi la stessa operazione per il secondo comando della prima coppia. Queste operazioni uniscono il disco differenze a cui puntano i comandi.
Dopo l'unione del disco, ripetere i passaggi precedenti per il disco successivo che differisce nell'elenco. Continuare per tutti i dischi differenze a cui si rivolge il file merge.txt .