2014-05-08 1 views
0

Мне нужно реализовать резервное решение для виртуальных машин, запущенных на Windows Server 2008 R2, с использованием модулей Powershell и PSHyperV. Модуль помогает загружать, так как он обеспечивает простой способ получить свойства VM и другие вещи, выполнять основные функции и т. Д.Hyper-V 2008R2 - получение моментального снимка виртуальной машины

Я планирую сценарий наименьшего времени простоя, поскольку потенциальные клиенты виртуальных машин потенциально используются клиентами, и они обычно не переносят никакого простоя. Я знаю, что использование гипервизора Windows Server 2012 R2 полностью решает эту проблему, потому что у нее есть живые функции слияния VHD, но миграция инфраструктуры - это достаточно долгий процесс, и резервные копии не ждут.

В настоящее время резервные копии выполняются с помощью процесса save VM -> copy tree -> start VM, который включает в себя до 6 часов простоя для самой большой виртуальной машины. Я планирую использовать моментальные снимки VM, чтобы уменьшить время простоя, так как как только вы выполнили моментальный снимок, вы можете создавать резервные копии файлов VHD и моментальных снимков в другом месте, не нарушая работу виртуальной машины (это будет медленнее, но это все). Затем я планирую сохранить виртуальную машину, удалить моментальный снимок (произойдет слияние VHD), дождитесь завершения слияния, а затем запустите виртуальную машину, что потенциально сократит время простоя виртуальной машины до полутора часов в худшем случае.

Пока мой сценарий способен находить VHD данной виртуальной машины, поддерживать их, но не может найти местоположение моментальных снимков виртуальной машины. Возможно, что простое перемещение дерева из папки VHDs назад не даст мне ни папки «Виртуальные машины», ни «Снимки», так что угадать невозможно.

Как получить расположение файлов моментальных снимков, чтобы выполнить ручной экспорт для моментального снимка VM?

ответ

1

Получил данные, возможно, кому-то это будет полезно.

$vmName = "Test VM" 
$vm = Get-VM $vmname 
$vmGlobal = Get-WMIObject -class Msvm_VirtualSystemGlobalSettingData -namespace "root/virtualization" | where {$_.systemname -eq $vm.name} 
$vmRootPath = $vmGlobal.ExternalDataRoot 
$snapshotPath = $vmGlobal.SnapshotDataRoot 

Затем получить эти пути, добавить «моментальные снимки» на снимок пути (по-видимому, жёстко), добавить «Виртуальные машины» в корневой каталог, и получить настройки и файлы снимков. Диски могут быть получены путем вызова $vm | Get-VMDisk | where {$_.DiskName -eq "Hard Disk Image"}, они содержат абсолютные пути к файлам.

Этого должно быть достаточно для получения всех необходимых данных для резервного копирования и восстановления виртуальной машины из моментального снимка, даже если оригинальная виртуальная машина будет уничтожена из-за потери диска. Вероятно, мне пришлось бы испортить поддерживаемый XML для изменения путей, но это немного проще.