Агент подключения qemu kvm для windows

Обновлено: 06.07.2024

Я решил перевести заметку из proxmox wiki на тему рекомендаций по установке в качестве гостевой системы Windows 10. Там нет каких-то особых и критичных замечаний. Просто последовательно изложен порядок рекомендуемых действий и настроек для максимального быстродействия и стабильной работы системы.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

В данной статье будут даны общие рекомендации, так называемые best practices на тему установки Windows 10 или 11 на гипервизор Proxmox. Данное руководство можно использовать как how to для проверки себя во время настройки виртуальных машин.

Подготовка к установке

Для того, чтобы получить хорошее быстродействие операционной системы Windows на хосте Proxmox, мы установим Windows VirtIO Drivers во время установки VM.

  • Создайте новую виртуальную машину, выберите тип "Microsoft Windows 10/2016/2019" и активируйте функцию "Qemu Agent" на вкладке System. Далее укажите свой iso образ в качестве источника установки.
  • В качестве Bus/Device для виртуального диска укажите SCSI, контроллер должен быть VirtIO SCSI. Можете указать опцию кэширования Write back. Это увеличит быстродействие, но есть некоторые риски потери данных. Подробно про варианты кэширования я писал отдельно. Укажите параметр Discard для более эффективного использования места на диске. Этот параметр работает примерно так же, как технология TRIM в SSD дисках. Подчищает реально удаленные данные с диска, уменьшая занимаемое место.
  • Настройки памяти и процессора укажите в зависимости от потребностей виртуальной машины. Модель сетевой карты укажите VirtIO (paravirtualized).
  • Для того, чтобы во время установки системы использовать драйверы virtio, загрузите iso образ с ними. Добавьте новый CD-ROM к VM и подключите этот образ.
  • Теперь у вас всё готово для установки системы Windows.

Выбор Windows OS

Активация Qemu Agent

Настройки виртуального диска Windows в Proxmox

Virtio (paravirtualized) сетевая карта Windows

Запуск установки Windows в Proxmox

  • После запуска установки системы, подключитесь к консоли виртуальной машины.
  • Дойдите до этапа установки, где нужно выбрать жёсткий диск. Скорее всего список доступных дисков будет пуст.
  • Нажмите "Загрузить драйвер" для того, чтобы установить драйвер жесткого диска и сетевой карты.
  • Для установки драйвер диска перейдите в директорию vioscsi\w10\amd64 и подтвердите выбор. Выберите "Red Hat VirtIO SCSI pass-through controller". Ваш виртуальный жёсткий диск должен появиться в списке для установки на него системы.
  • Повторите то же самое для выбора драйвера сетевой карты. Он находится в директории NetKVM\w10\amd64. Выберите "Redhat VirtIO Ethernet Adapter".
  • Драйвер выделения динамической оперативной памяти находится в Balloon\w10\amd64. Перейдите в эту директорию и выберите драйвер "VirtIO Balloon Driver".
  • Загрузка этих трёх драйверов позволит установщику Windows определить всё оборудование, так что можно продолжить установку системы в обычном режиме.

Подробно описанную процедуру можно лицезреть на видео на примере установки Windows Server 2016 на ProxMox. Установка Windows 10 или 11 будет проходить точно так же.

Загрузка драйвера Virtio во время установки Windows

Загрузка драйвера Virtio во время установки Windows

Выбор драйвера scsi

Драйвер для Red Hat VirtIO SCSI pass-through controller

Драйвер для Red Hat VirtIO SCSI pass-through controller

Установка Windows в Proxmox

Установка Qemu Guest Agent на Windows

Для того, чтобы корректно работал Guest Agent на Windows, необходимо его установить отдельно. Он находит в iso образе virtio в корне диска, в папке guest-agent. Для x64 архитектуры установочный файл будет называться qemu-ga-x86_64.msi. Просто запустите установку и дождитесь окончания. Больше ничего делать не надо, агент автоматически установится и запустится.

Если всё прошло успешно, то вы сразу же в веб интерфейсе Proxmox увидите ip адреса на сетевых интерфейсах Windows.

Драйвера и Службы

Чтобы установить все недостающие драйвера для корректной работы Windows на Proxmox, запустите virtio-win-gt-x64.msi в корне диска virtio. Можете убрать установку тех драйверов и служб, что вы точно не будете использовать. Например, Qxl и Spice. После этого не только ip адреса, но и использования оперативной памяти должны корректно отображаться в веб интерфейсе.

Рекомендуется посмотреть менеджер устройств, чтобы убедиться в том, что там нет неопределённого оборудования. Если все драйверы установились корректно, то всё оборудование будет с драйверами и определено. Если это не так, то попробуйте установить драйвер устройства вручную. Для этого укажите в качестве источника драйвера виртуальный диск с virtio.iso и обязательно укажите использовать для поиска драйвера подпапки. Если драйвер будет найдет, то выберите его и установите, подтвердив, что доверяете установке драйверов от указанного поставщика.

Установка Guest-agent

Установка virtio drivers

Список оборудования Windows в Proxmox

Формат диска raw vs qcow2

Историю с выбором типа диска в proxmox я разбирал подробно в отдельной заметке. В общем случае формат raw обеспечивает лучшее быстродействие, но у qcow2 есть дополнительный полезный функционал. Речь идёт о технологии copy on write и возможности делать Live Snapshots. В настоящий момент формат qcow2 выбирается по умолчанию.

VirtIO drivers

Make it really easy: Build your ISO with drivers already included:

Можно достаточно просто подготовить свой образ операционной системы Windows с интегрированными VirtIO драйверами. Для этого можно можно воспользоваться отдельной статьёй - Windows guests - build ISOs including VirtIO drivers.

Образ содержит пакеты для ОС Linux и Windows. Включает в себя qemu_guest_agent, virtio драйверы и утилиты для SPICE.

Образ с драйверами находится по ссылке.

Состав образа

Spice guest tools - этот установщик содержит некоторые дополнительные драйверы и службы, которые можно установить в гостевой системе Windows для повышения производительности и интеграции SPICE. Это включает видеодрайвер qxl и гостевой агент SPICE (для копирования и вставки, автоматического переключения разрешения и т.д.). Все драйверы, которые будут доступны при установке, указаны ниже в Virtio guest tools.

Spice vdagent - необязательный компонент, улучшающий интеграцию окна гостевой системы с графическим интерфейсом удалённого пользователя. SPICE-протокол поддерживает канал связи между клиентом и агентом на стороне сервера. Агент работает внутри гостевой системы. Для связи с агентом в гостевой системе также используется специальное устройство, так называемый VDI-порт.

Spice webdavd - служба, которая использует протокол WebDAV для предоставления общего доступа к файлам ВМ.

Virtio guest tools - этот установщик содержит некоторые дополнительные драйверы и службы, которые можно установить в гостевой системе:

  • NetKVM — Virtio сетевой драйвер;
  • viostor — Virtio блочный драйвер;
  • vioscsi — Virtio драйвер интерфейса SCSI;
  • viorng — Virtio RNG (генератор случайных чисел) драйвер;
  • vioser — Virtio serial driver (предоставляет несколько портов гостю в виде простых символьных устройств для простого ввода-вывода между гостевым и хостовым пользовательскими пространствами. Это также позволяет открывать несколько таких устройств, снимая ограничения на одно устройство);
  • Balloon — Virtio memory balloon driver («Баллонное устройство» virtio позволяет гостям KVM уменьшить объем своей памяти (тем самым освободив память для хоста) и увеличить ее обратно (тем самым забрав память у хоста));
  • qxl — QXL графический драйвер для Windows 7 и ниже;
  • qxldod — QXL графический драйвер для Windows 8 и выше;
  • pvpanic — драйвер устройства QEMU pvpanic (устройство pvpanic - это смоделированное устройство ISA);
  • guest-agent — Qemu Guest Agent 32bit and 64 bit MSI installers;
  • qemupciserial — драйвер QEMU PCI;

Другие варианты скачивания VirtIO Drivers

Обычно драйверы довольно стабильны, поэтому сначала следует попробовать самый последний выпуск.

Монтирование образа

После загрузки образа в VeiL необходимо смонтировать образ к ВМ и через стандартные установщики поставить требуемое ПО в ВМ.

Установка qemu-guest-agent на Linux ВМ

В Linux ВМ нужно просто установить qemu-guest-agent из стандартных репозиториев. Обратитесь, пожалуйста, к документации вашей ОС.

Для систем на базе Debian/Ubuntu (с apt-get) запустите: apt-get install qemu-guest-agent

Для систем на базе RedHat (с yum) запустите: yum install qemu-guest-agent

При отсутствии доступа к репозиториям можно установить агент с образа. Для этого перейдите в образы по пути /linux/qemu-guest-agent/ и установите нужную версию, например, dpkg -i qemu-guest-agent_5.2+dfsg-9_amd64.deb .

В зависимости от дистрибутива гостевой агент может не запуститься автоматически после установки, запустите его командой systemctl start qemu-guest-agent (для дистрибутивов, использующих systemd), или перезагрузите ВМ.

Настройка qemu-guest-agent

После установки qemu агента создайте административную локальную учетную запись, откройте службы Windows и настройте запуск службы qemu агент не от local system, а от ранее созданной УЗ. Следует помнить, что при блокировании пароля данной учетной записи, служба гостевого агента не будет работать.

image

Необходимо для автоматического ввода ВМ в AD.

Проверка связи ECP VeiL c гостевым агентом

Также в CLI сервера есть команды работы с гостевым агентом: vm guest_info.

image

Установка hostname

Во вкладке ВМ/Шаблон ВМ при активном гостевом агенте можно установить hostname ВМ.

Для разных ОС установка hostname происходит по-разному. Для Windows через powershell командой Rename-Computer с последующей перезагрузкой для принятия изменений. Для Linux командой /usr/bin/hostnamectl при включенной ВМ. Для Linux утилитой virtsysprep с сервера при выключенной ВМ.

Windows Sysprep

Для подготовки шаблона с ОС Windows можно использовать утилиту Sysprep.

Во вкладке ВМ/Шаблон ВМ при включенной ВМ и активном гостевом агенте нажмите кнопку Sysprep.

Можно выбрать стандартные опции утилиты Sysprep.

Linux virt-sysprep

Для подготовки шаблона с ОС Linux можно использовать утилиту virt-sysprep.

Во вкладке ВМ/Шаблон ВМ при выключенной ВМ нажмите кнопку VirtSysprep и выберите, при желании, загрузочный диск.

Можно выбрать стандартные опции утилиты virt-sysprep.

Добавление в AD

Во вкладке ВМ/Шаблон ВМ при активном гостевом агенте можно добавить ВМ в AD, указав:

  • hostname (необязательный параметр);
  • имя домена;
  • логин;
  • пароль;
  • опция рестарта после применения параметров (по умолчанию включено).

Не забудьте прописать DNS домена или настройте DHCP.

Удаление из AD

Во вкладке ВМ/Шаблон ВМ при активном гостевом агенте можно убрать ВМ из AD, указав:

Изменить шаблон

Способ изменить шаблон без ручного пересоздания всех клонов - это воспользоваться операцией вливания снимка тонкого клона в шаблон.

Для этого требуется подготовить тонкие клоны с панели ECP VeiL:

На всех тонких клонах не должно быть сохраненных состояний, требуется при необходимости зайти в снимки и Удалить все состояния.

Внести нужные изменение в имеющийся тонкий клон или создать новый тонкий клон и произвести там изменения.

Выключить все включенные тонкие клоны от родительского шаблона.

Для ОС Windows рекомендуется перед вливанием подготовить тонкий клон через Sysprep, если вы использовали для шаблона.

Произвести операцию в тонком клоне, который мы подготовили для вливания в шаблон, нажав во вкладке ВМ/Шаблон кнопку Изменить шаблон и подтвердив свои намерения в открывшемся окне.

Эти действия внесут изменения из подготовленного тонкого клона в диски шаблона, и от них пересоздадутся диски во всех остальных тонких клонах.

Изменение шаблона напрямую при наличии тонких клонов запрещено, так как это приведет в нерабочее состояние все тонкие клоны.

Оптимизатор работы Windows 10 / Windows Server 2019 в виртуальной среде

Некоторые модификации применяются исключительно для новых пользователей, и окружение, созданных до модификации пользователей, не изменяется, чтобы не возникало проблем с изменением окружения.

Взаимодействие гипервизора с гостевым агентом

Для каждой ВМ создается отдельный канал взаимодействия гипервизора с гостевым агентом (не зависящий от наличия сети у ВМ). Ниже показан пример.

Proxmox

Сегодня расскажу как подключить на виртуальную машину (ВМ) в Proxmox утилиту qemu-guest-agent для просмотра IP-адреса через WEB-интерфейс и правильной завершении работы ВМ.

Что такое qemu-guest-agent

qemu-guest-agent — это вспомогательный демон, который устанавливается в гостевой системе. Он используется для обмена информацией между хостом и гостем, а также для выполнения команды в госте.

В Proxmox VE qemu-guest-agent используется в основном для двух вещей:

  1. Чтобы правильно завершить работу гостя, вместо того чтобы полагаться на команды ACPI или политики Windows
  2. Чтобы заморозить гостевую файловую систему при создании резервной копии (в Windows используйте службу теневого копирования томов VSS).

Установка qemu-guest-agent

На Proxmox

Вы должны установить гостевой агент в каждой виртуальной машине, а затем включить его, вы можете сделать это в веб-интерфейсе Proxmox VE (GUI).

Опция Гостевого агента QEMU

На виртуальной машине в Linux

В Linux вам нужно просто установить qemu-guest-agent.

Здесь мы покажем команды для систем на базе Debian/Ubuntu и Redhat:

В системах на Debian/Ubuntu выполняем следующие команды:

На системах на базе Redhat:

Настройка qemu-guest-agent

Linux

В зависимости от дистрибутива гостевой агент может не запускаться автоматически после установки. Для запуска воспользуемся следующими командами:

Windows

Screen-vioserial-device-manager.jpg
Экран-vioserial-driver.jpg

Сначала вы должны скачать драйвер virtio-win iso (см. Windows VirtIO Drivers).

Затем установите драйвер virtio-serial:

  1. Прикрепите ISO к виртуальной машине Windows (virtio-*.iso)
  2. Перейдите в Диспетчер устройств Windows
  3. Найдите «PCI Simple Communications Controller»
  4. Щелкните правой кнопкой мыши -> Обновить драйвер и выберите на смонтированном iso DRIVE:\vioserial\<OSVERSION>\ where <OSVERSION> is your Windows Version (e.g. 2k12R2 for Windows 2012 R2) — ваша версия Windows (например, 2k12R2 для Windows 2012 R2)

После этого необходимо установить qemu-guest-agent:

  1. Перейти к смонтированному ISO в проводнике
  2. Установщик гостевого агента находится в каталоге гостевой агент
  3. Запустите установщик двойным щелчком (либо qemu-ga-x86_64.msi (64-разрядная версия), либо qemu-ga-i386.msi (32-разрядная версия)

После этого qemu-guest-agent должен быть запущен. Вы можете проверить это в списке оконных служб или в PowerShell с помощью:

Если он не запущен, вы можете использовать панель управления Службами, чтобы запустить его и убедиться, что он запустится автоматически при следующей загрузке.

Проверка того, что связь с гостевым агентом работает

Связь с гостевым агентом происходит через сокет unix, расположенный в /var/run/qemu-server/<my_vmid>.qga Вы можете проверить связь агента qm:

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.

Через QEMU-GuestAgent вводить и записывать файлы извне в виртуальную машину KVM

В этой статье будет приведен пример прямой записи файлов на хосте в виртуальную машину, чтобы объяснить, почему инъекция необходима и как ее реализовать.

оглавление

▪ Как добиться «инъекции»

▪ Шаг 1. Настройка канала для виртуальной машины

▪ Шаг 2. Развертывание QEMU-GA

▪ Шаг 3. Инструкция по эксплуатации впрыска

▪ Шаг 4. Расчет Base64

▪ Шаг 5. Начать инъекцию

▪ Прикреплено 1. Все команды, поддерживаемые qemu-ga

▪ Приложение 2. Настройка нескольких каналов

Зачем "вводить" в ВМ

Причина проста: он не может быть реализован вне виртуальной машины, он может быть реализован только внутри виртуальной машины.

В отличие от Docker (контейнера), KVM изолирует процессы только по cgroup. KVM - полностью закрытая среда.

Для виртуальных машин на основе KVM обычно предъявляются следующие требования:

▷ Изменить пароль онлайн

▷ Добавить открытый ключ онлайн

▷ Онлайн коллекция производительности(Например, использование процессора, загрузка, использование памяти и другие показатели производительности)

▷ Различные другие онлайн-функции

Общность вышеуказанных сценариев: это не может быть достигнуто только вне ВМ. Следовательно, существует несколько решений, но независимо от того, какое решение может быть реализовано, следующие две точки должны выполняться одновременно:

▷ придел: Открыть канал между внутренней частью виртуальной машины и внешним (хостом) для обмена данными

▷ agent: Установка агента внутри виртуальной машины для получения внешних инструкций и результатов обратной связи

Практику посадки агента внутри ВМ можно смело назвать«Инъекционные»

Как добиться «инъекции»

Первый шаг - открыть канал.

Есть 2 типа методов:

▷ Перейти сеть: Это будет сложнее. Необходимо заранее вставить сетевую карту управления или использовать существующую сетевую карту + специальную маршрутизацию, чтобы обеспечить возможность передачи данных, что приводит к более сложной топологии сети

▷ Оборудование для ходьбы: Это намного проще, просто установить канал устройства между виртуальной машиной и хостом. Например, добавьте символьное устройство к виртуальной машине KVM и сопоставьте его с файлом сокета на хосте. Между символьным устройством и сокетом формируется канал, через который можно передавать внутренние и внешние данные.

«Ходить по сети» - это не то, что хочет представить эта статья, весь следующий контент - это «прогулочное оборудование»

Второй шаг - запустить агент

Запустите агент на виртуальной машине, прочитайте символьное устройство в режиме реального времени и осуществите взаимодействие данных с хостом.

Какие данные отправляются и принимаются в канале, вы можете определить самостоятельно, или вы можете использовать официальное решение KVM, называемое Qemu Guest Agent, или, для краткости, qemu-ga. Он содержит 2 аспекта:

▷ Определение протокола для передачи данных в канале: JSON-формат

▷ Агент в ВМ: Запустите процесс демона с именем qemu-ga, который получит входящую команду json от символьного устройства, затем выполнит соответствующую команду в соответствии с командой и вернет результат хосту через символьное устройство.

Полезность qemu-ga заключается в том, что инкапсулированные инструкции совместимы с некоторыми различными операционными системами, такими как инструкция записи файла guest-file-write, которая может использоваться как для Linux, так и для Windows.

Что касается конфигурации и использования qemu-ga, автор ранее написал статью «Взаимодействие с виртуальной машиной qemu на основе QMP», в которой подробно описываются принцип ее работы и основные методы использования. Вот адрес

Поскольку тема этой статьи - «внедрение и запись файлов», ниже будет рассказано, как писать файлы, но методы развертывания и активации qemu-ga также будут опубликованы снова.

Шаг 1. Настройте канал для ВМ

Виртуальная машина, запущенная libvirt, может добавить конфигурацию в XML

Примечание: вышеуказанная конфигурация должна быть размещена <devices> В пункте

Шаг 2. Развертывание QEMU-GA

1️⃣ Установить qemu-ga

Установите и запустите qemu-ga внутри виртуальной машины. Linux и Windows поддерживают qemu-ga. Многие распространители linux предоставляют свои собственные qemu-ga. Например, rhel / centos, fedora, ubuntu, opensuse все предоставляют скомпилированный qemu-ga , Может быть загружен и использован напрямую. Для систем Windows необходимо загрузить virtio-win, который содержит некоторые драйверы virtio win и установочный пакет qemu-ga, или вы можете загрузить только установочный пакет qemu-ga

Установочный пакет окон qemu-ga показан на рисунке


2️⃣ Начать QEMU-га

Возьмите centos7 в качестве примера

Проход после запуска systemctl status qemu-guest-agent Вы должны увидеть, что процесс начался, как показано


Примечание: некоторые qemu-ga будут отклонять некоторые команды.Это потому, что некоторые команды отключены в файле конфигурации qemu-ga. Например, в centos7, файл конфигурации это / etc / sysconfig / qemu-ga

3️⃣ Тест Кему-га

На хосте виртуальной машины выполните следующую команду:

Если возвращается следующее содержимое, qemu-ga доступна

Затем проверьте, какие инструкции поддерживает qemu-ga.

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

▪ guest-exec: команда execute (асинхронная операция)

▪ guest-exec-status: просмотр результатов выполнения команд

▪ guest-file-open: откройте файл и получите дескриптор

▪ guest-file-write: записать файл (передать base64)

▪ guest-file-close: закрыть файл

Шаг 3. Инструкция по эксплуатации впрыска

Цель эксперимента:Запишите содержимое открытого ключа RSA в /root/.ssh/authorized_keys

Это включает в себя следующие 3 шага:

1. Создайте каталог /root/.ssh с разрешением 700

2. Создайте файл /root/.ssh/authorized_keys с разрешением 600

3. Кодируйте текст открытого ключа RSA с помощью Base64 (запись гостевого файла не поддерживает открытый текст, только base64) и запишите закодированное содержимое в /root/.ssh/authorized_keys

Шаг 4. Расчет Base64

Здесь сначала предположим, что содержимое открытого ключа RSA

Это получит содержимое в кодировке base64

Шаг 5. Начните инъекцию

1️⃣ Создайте каталог /root/.ssh с 700 разрешениями

2️⃣ Создайте файл /root/.ssh/authorized_keys с разрешением 600

3️⃣ Записать кодировку Base64 в /root/.ssh/authorized_keys

Проверьте эффект: проверьте /root/.ssh/authorized_keys в виртуальной машине в это время, вы должны увидеть недавно добавленную строку

Прикреплено 1. Все команды, поддерживаемые qemu-ga

Разные версии qemu-ga и разные операционные системы имеют разные поддерживаемые команды. Ниже приведены все текущие параметры, которые можно увидеть на официальном сайте.

Читайте также: