Як безпосередньо скопіювати файл з хоста Hyper-V в віртуальну машину

В оновленій ролі Hyper-V, представленої в Windows Server 2012 R2 і Windows 8.1 з'явилася можливість прямого копіювання файлів з хоста Hyper-V в віртуальну машину без використання мережевих інтерфейсів. Цей функціонал реалізується за допомогою нової служби в гостьовій ОС під назвою Guest Services, що входить до складу інтеграційних компонентів Hyper-V (Integration Services).


Отже, щоб скористатися можливістю прямого копіювання файлів у віртуальну машину з хостовой ОС Hyper-V, потрібно в ВМ встановити останню версію компонентів інтеграції (Integration Services версії не нижче 6.3.9600.16384), і активувати на ній службу Guest Services.

Служба Guest Services дозволяє здійснити копіювання файлів між хостової гіпервізором (комп'ютером з роллю Hyper-V) і віртуальною машиною, запущеної на ньому без використання мережевих компонентів. Процес копіювання здійснюється через високошвидкісну внутрішню шину vmbus (Virtual Machine Bus), безпосередньо зв'язує гипервизор і віртуальну машину. Завдяки цьому адміністратор може скопіювати всередину віртуальної машини будь-який файл, причому абсодютно неважливо в якій мережі знаходиться цільова віртуальна машина, підключена вона взагалі до віртуального комутатора, або знаходиться в ізольованій мережі.

Примітка. У попередніх версіях Hyper-V, щоб скопіювати файл всередину віртуальної машини з сервера Hyper-V доводилося налаштовувати rdp підключення, загальні папки через додаткову внутрішню мережу або загальні vhd файли. Також не варто плутати копіювання файлів через службу Guest Services з можливістю копіювання файлів через режим-розширення rdp-протоколу - Enchanted Session Mode.

Служба Guest services для віртуальних машин за замовчуванням відключена. Включити її можна через GUI консолі Hyper-V в властивості віртуальної машини (в розділі Integration Services) або за допомогою Powershell.

Перевірити, чи включена служба Guest services для віртуальної машини, можна так:

Get-VMIntegrationService -VMName HV2012R2 -Name "Guest Service Interface"

В даному прикладі служба відключена: Guest Service Interface: False.

Щоб включити службу, скористаємося такою командою:

Enable-VMIntegrationService -VMName "HV2012R2" -Name "Guest Service Interface" -ErrorAction Continue

Всередині віртуальної машини повинна бути запущена служба Hyper-V Guest Service, її статус можна отримати так:

Get-Service vmicguestinterface

Після того, як служачи інтеграції Guest Service включена, можна за допомогою спеціального командлет Copy-VMFile скопіювати будь-який файл, розташований на файлову систему сервера Hyper-V безпосередньо в віртуальну машину. Щоб скопіювати файл в уже існуючу папку в гостьовій ОС, виконаємо на сервері команду:

Copy-VMFile "HV2012R2" -SourcePath C: \ Install \ 2012R2.iso -DestinationPath C: \ Install \ 2012R2.iso -FileSource Host

Якщо цільової шлях в гостьовій ОС не існує, команда поверне помилку. Щоб автоматично створити вказаний шлях на файлової системі гостьовий ОС, скористаємося аргументом -CreateFullPath

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

Примітка. Командлет Copy-VMFile дозволяє за раз скопіювати тільки один файл. Щоб скопіювати вміст папки цілком, можна скористатися такою конструкцією:

Get-ChildItem C: \ Scripts -Recurse -File | % Copy-VMFile "HV2012R2" -SourcePath $ _. FullName -DestinationPath $ _. FullName -CreateFullPath -FileSource Host

Відключити службу Guest Services можна так:

Get-VMIntegrationService -VMName "HV2012R2" -Name "Guest Service Interface" | Disable-VMIntegrationService -Passthru

Отже, завдяки службі Guest Services адміністратор Hyper-V може безпосередньо скопіювати будь-який файл всередину гостьовий ОС віртуальної машини.