Поделиться через


Новая служба интеграции Hyper-V или Copy-VMFile в действии

В 2012 R2 произошло массовое обновление/улучшение роли Hyper-V. Самым видимым, в прямом смысле этого слова, нововведением для всех стало появление новой службы интеграции Guest Services (Guest Service Interface или "локализованный вариант" - Интерфейс гостевой службы), которую Вы наблюдаете каждый раз выключенной,по умолчанию, в свойствах любой ВМ.

Данная служба интеграции вносит довольно скромный функционал, но крайне полезный. Guest Services позволяет копировать необходимые файлы между хостом (сервер Hyper-V , на котором размещены целевые ВМ или parent partition) и виртуальными машинами (=child partition) без какой-либо нагрузки на сетевые составляющие. Процесс копирования обеспечивается связкой между хостом Hyper-V и ВМ через всеми известный vmbus ( Virtual Machine Bus).

Со стороны виртуальной машины (а точнее , гостевой ОС) за функциональность компоненты-интеграции отвечает служба **vmicguestinterface , которая должна быть запущенной.   **Итого, мы получаем native-возможность массового или точечного (к примеру, 1 ВМ в изолированной сетевой зоне) копирования необходимых файлов в рамках Hyper-V.   

Перед началом копирования любого файла необходимо удостовериться, что :

  1. Службы интеграции обновлены. Минимальная версии служб интеграции должна быть (6.3.9600.16384)
Get-VM | Select Name, IntegrationServicesVersion
  1. Служба интеграции Guest Services включена для необходимых ВМ
#Запрос текущей конфигурации ВМ
Get-VM|Get-VMIntegrationService|ft VmName,Name,Enabled -AutoSize
#Включение службы интеграции для всех ВМ
Get-VM | Enable-VMIntegrationService -Name "Guest Service Interface"

  1. Внутри гостевой ОС служба vmicguestinterface запущена
Get-Service vmicguestinterface 

Управление самим копированием обеспечивается только одним cmdlet (Microsoft.HyperV.PowerShell.GuestServiceInterfaceComponent).Copy-VMFile , обязательными параметрами которого являются:
**
**

-DestinationPath<String> = куда копируем -SourcePath<String> = откуда копируем (занятно: UNC-путь тоже принимается) -FileSource<CopyFileSourceType> = тип источника файла -VMName <String[]>  = наименования ВМ Пример:

#Копирование файла 2012R2.ISO, располагающемся на сервере Hyper-V в C:\ISO. Сохранить файл в C:\ISO внутри #гостевой ОС виртуальной машины Server2012R2_1
Copy-VMFile "Server2012R2_1" -SourcePath C:\ISO\2012R2.iso -DestinationPath C:\ISO\2012R2.iso -FileSource Host

Если путь C:\ISO внутри гостевой ОС не будет найден, то вышеуказанный пример завершится ошибкой. 
Для обхода подобных проблем необходимо использовать параметр** -CreateFullPath** , который создает необходимые папки, если не может обнаружить путь.

Copy-VMFile "Server2012R2_1" -SourcePath C:\ISO\2012R2.iso -DestinationPath C:\ISO\2012R2.iso -FileSource Host -CreateFullPath

Процесс копирования после запуска Cmdlet:

Результат:

UNC :
http://rlevchenko.files.wordpress.com/2014/08/test.jpg?w=848

English version:
Guest Services in Hyper-V and Copy-VMFile
http://rlevchenko.com/2014/06/15/guest-services-in-hyper-v-and-copy-vmfile/

http://c.statcounter.com/9864906/0/f2c56b1a/1/