Hyper-V предоставляет возможность передавать файлы между хостовой операционной системой и виртуальной машиной без использования сетевых интерфейсов. Эта функция особенно полезна в следующих случаях:
— Виртуальная машина изолирована от сети.
— На виртуальной машине используется файловая система, несовместимая с подключением VHD-дисков (например, Ubuntu).
— Нельзя выключить виртуальную машину для копирования данных через другие методы.
Данная возможность реализована с помощью службы Guest Services, которая входит в состав интеграционных компонентов Hyper-V. Копирование файлов выполняется через внутреннюю высокоскоростную шину (Virtual Machine Bus), обеспечивая прямое взаимодействие между хостом и ВМ.
1) Включение гостевой службы (Guest Services)
Перед началом работы необходимо включить службу Guest Services для нужной виртуальной машины. По умолчанию она отключена.
Включение через графический интерфейс:
1. Откройте диспетчер Hyper-V.
2. Найдите нужную виртуальную машину, откройте её параметры.
3. В разделе Интеграционные службы поставьте галочку напротив Гостевая служба (Guest Services).
Включение через PowerShell:
1. Проверьте статус службы:
Get-VMIntegrationService -VMName "Имя_ВМ" -Name "Guest Service Interface"
2. Если служба отключена, включите её:
Enable-VMIntegrationService -VMName "Имя_ВМ" -Name "Guest Service Interface" -ErrorAction Continue
3. Проверьте, что служба запущена:
Get-Service vmicguestinterface
2) Копирование файлов с помощью PowerShell
После включения Guest Services можно использовать командлет Copy-VMFile для передачи файлов в виртуальную машину.
Пример для ОС Linux:
Copy-VMFile -VMName "Имя_ВМ" -SourcePath C:\update\file.zip -DestinationPath '/tmp' -FileSource Host
Пример для ОС Windows:
Copy-VMFile -VMName "Имя_ВМ" -SourcePath C:\update\file.zip -DestinationPath C:\tmp\file.zip -FileSource Host -CreateFullPath
Объяснение параметров:
— -SourcePath: путь к исходному файлу на хосте.
— -DestinationPath: путь назначения в гостевой ОС.
— -CreateFullPath: автоматически создаёт каталоги, если их нет.
3) Копирование папок с несколькими файлами
Командлет Copy-VMFile позволяет передать только один файл за раз. Для копирования целых папок используйте команду с параметром -Recurse. Пример:
Get-ChildItem C:\update\ -Recurse -File | % { Copy-VMFile -VMName "Имя_ВМ" -SourcePath $_.FullName -DestinationPath $_.FullName -CreateFullPath -FileSource Host }
4) Отключение гостевой службы
Если использование Guest Services больше не требуется, её можно отключить.
Через PowerShell:
Get-VMIntegrationService -VMName "Имя_ВМ" -Name "Guest Service Interface" | Disable-VMIntegrationService -Passthru
Через графический интерфейс:
1. Перейдите в параметры виртуальной машины.
2. Снимите галочку напротив Гостевая служба (Guest Services).