Skip to main content

Задача: Как скопировать файл с хоста Hyper-V в виртуалку?

Доброго времени суток!

Что делать, если у вас есть задача скопировать некоторое количество фалов в виртуальную машину Hyper-V не используя сеть.
Можно, конечно, подключить vhd/vhdx файл как диск в хостовую систему и скопировать все на него. Но что делать, если скажем, на вашей виртуалке стоит Ubuntu и там другая файловая система?
Или данную ВМ нельзя переводить в оффлайн для копирования? — Ответ есть!

Дело в том, что в роли Hyper-V, которая появилась в Windows Server 2012 R2 и Windows 8.1 есть возможность прямого копирования файлов с хоста Hyper-V в виртуальную машину без использования сетевых интерфейсов.
Этот функционал реализуется с помощью новой службы в гостевой ОС под названием Гостевые службы (Guest Services), входящей в состав интеграционных компонентов Hyper-V (Integration Services).
Итак, чтобы воспользоваться возможностью прямого копирования файлов в виртуальную машину с хостовой ОС Hyper-V, нужно в ВМ установить последнюю версию компонентов интеграции, и активировать Гостевую службу (Guest Services).
Гостевая Служба (Guest Services) позволяет осуществить копирование файлов между компьютером с ролью Hyper-V и виртуальной машиной, запущенной на нем без использования сетевых компонентов. Процесс копирования осуществляется через высокоскоростную внутреннюю шину (Virtual Machine Bus), напрямую связывающую гипервизор и виртуальную машину. Благодаря этому можно скопировать внутрь виртуальной машины любой файл, причем вообще неважно в какой сети  находится ВМ, она даже может быть изолирована от сети или не подключена к виртуальному коммутатору.

Давайте разберемся, как это осуществить с практической точки зрения:

Первое, что нужно сделать — это проверить включена ли служба Гостевая Служба (Guest services) на требуемой ВМ (по умолчанию служба отключена. Включаем ее с помощью графического интерфейса консоли Hyper-V в свойствах виртуальной машины:

Включение гостевой службы(Guest services) в Параметрах виртуальной машины через графический интерфейс.
Включение гостевой службы(Guest services) в Параметрах виртуальной машины через графический интерфейс.

Так же, если у вас нет графического интерфейса, можно сделать это с помощью Powershell:

Get-VMIntegrationService -VMName owncloud-new -Name "Guest Service Interface”

Чтобы включить службу введем команду: Enable-VMIntegrationService -VMName "owncloud-new" -Name "Guest Service Interface" -ErrorAction Continue

Проверяем запущен ли Hyper-V Guest Service, ее статус  узнаем с помощью команды:

Get-Service vmicguestinterface

Если служба интеграции Guest Service включена, то уже можно начинать копировать файлы с помощью командлета Copy-VMFile в виртуальную машину с нашего сервера Hyper-V. Выполняем команду:

Copy-VMFile "owncloud-new" -SourcePath C:\update\owncloud.zip -DestinationPath '/tmp' -FileSource Host

т.к. для примера взята ВМ на ОС Ubuntu то синтаксис пути будет именно такой. Для ОС Windows команда копирования по определенному пути будет выглядеть так:

Copy-VMFile "owncloud-new" -SourcePath C:\update\owncloud.zip -DestinationPath C:\tmp\ouwncloud.zip -FileSource Host –CreateFullPath

где параметр –CreateFullPath дает возможность создать каталог, в случае его отсутствия в гостевой ОС. Если вы копирует папку с множеством файлов, то необходимо добавить параметр -Recurse, т.к. командлет Copy-VMFile позволяет за раз скопировать только один файл. Пример:

Get-ChildItem C:\update\ -Recurse -File | % { Copy-VMFile "owncloud-new" -SourcePath $_.FullName -DestinationPath $_.FullName -CreateFullPath -FileSource Host }

Если служба служба интеграции Guest Service более не нужна, ее можно отключить командой: Get-VMIntegrationService -VMName "HV2012R2" -Name "Guest Service Interface" | Disable-VMIntegrationService -Passthru

Или через графическую часть.

На сегодня это всё! Спасибо за внимание.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *