Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016
Введение
В этой статье описываются методы, которые можно использовать для объединения контрольных точек на виртуальную машину, если Hyper-V создал множество разных дисков. Используемый метод зависит от сведений о ситуации.
Объединение контрольных точек, которые можно просмотреть в диспетчере Hyper-V
Контрольные точки, которые можно просмотреть в диспетчере Hyper-V, являются самыми простыми для обработки. Обычно можно использовать команду "Удалить контрольную точку" в контекстном меню для удаления этих контрольных точек.
В некоторых случаях поддерев "Удалить контрольную точку" и "Удалить контрольную точку" не отображаются в контекстном меню. Это может произойти, если стороннее программное обеспечение резервного копирования создает контрольные точки, но не удаляет их после операции резервного копирования.
В этих случаях можно по-прежнему использовать ключ Delete для удаления контрольной точки.
Чтобы удалить контрольные точки в диспетчере Hyper-V (и объединить разностные файлы дисков), выполните следующие действия.
- В диспетчере Hyper-V выберите виртуальную машину.
- В списке контрольных точек щелкните правой кнопкой мыши контрольную точку, которую требуется удалить, и выполните одно из следующих действий:
- Выберите " Удалить контрольную точку".
- Если удалить контрольную точку недоступен, выберите контрольную точку и выберите del.
Объединение контрольных точек, которые невозможно просмотреть в диспетчере Hyper-V
Может возникнуть ситуация, в которой диспетчер Hyper-V не отображает контрольные точки для определенной виртуальной машины. В то же время в соответствующей папке файловой системы отображается множество разных дисковых файлов. Это может произойти, если стороннее программное обеспечение резервного копирования создает контрольные точки, но не удаляет их после операции резервного копирования.
Файлы разных дисков можно объединить двумя способами в зависимости от того, можно ли завершить работу виртуальной машины.
Когда вы можете завершить работу виртуальной машины
Чтобы объединить разностные файлы дисков, завершите работу виртуальной машины. Как правило, разностные файлы дисков объединяются в рамках процесса завершения работы виртуальной машины.
Если не удается завершить работу виртуальной машины
Вы можете объединить разностные диски на виртуальную машину в сети. Однако это многоэтапный процесс, который включает скрипты Windows PowerShell. Для этого выполните следующие общие действия.
- Создайте резервную копию всех разностных файлов дисков (VHD-файлы).
- Создайте и запустите функцию
Get-VHDChain
. Этот шаг подробно описан далее в этом разделе. - Создание и выполнение команд слияния. Этот шаг подробно описан далее в этом разделе.
- Измените параметры виртуальной машины, чтобы указать на объединенный родительский виртуальный жесткий диск.
- Запустите виртуальную машину. Успешный запуск означает, что слияние успешно завершено.
Создание и запуск функции Get-VHDChain
На сервере узла Hyper-V откройте окно командной строки PowerShell с правами администратора.
Скопируйте следующий скрипт и вставьте его в окно 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++ } } } } ==================================
Этот скрипт определяет функцию, которая определяет
Get-VHDChain
цепочку VHD (набор разных дисков для виртуальной машины).Выполните следующую команду:
Get-vhdchain -name <virtual machine name>
Примечание.
В этой команде <имя> виртуальной машины представляет имя виртуальной машины.
При выполнении скрипта вы увидите выходные данные, похожие на следующие выходные данные.
Убедитесь, что
Get-VHDChain
выполняется без ошибок.Внимание
Если выходные
Get-VHDChain
данные содержат ошибки, необходимо удалить затронутые разностные диски из папки. В следующем примере диск 24 создал ошибку и должен быть удален из папки разностного диска.
Создание и выполнение команд слияния
Следующие инструкции по созданию скрипта в C:\temp\merge.txt для объединения дисков. Выполните следующие действия:
На локальном диске C: создайте папку с именем temp.
Откройте окно администрирования PowerShell и выполните следующую команду:
$vm = Read-Host("please enter the VMname")
В командной строке введите имя виртуальной машины.
Скопируйте следующий скрипт и вставьте его в командную строку.
$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 } }
Сценарий должен выглядеть следующим образом:
Откройте C:\temp\merge.txt. Этот файл содержит список команд командной строки, сгруппированных в пары. Каждая пара команд определяет операции слияния для одного разного диска.
Скопируйте первую команду первой пары, вставьте ее в командной строке и запустите ее. Затем выполните то же самое для второй команды первой пары. Эти операции объединяют разностный диск, на который обращаются команды.
После слияния диска повторите предыдущие шаги для следующего разностного диска в списке. Перейдите ко всем различающимся дискам, которые merge.txt адреса файлов.