Знакомая картина? Вы установили Windows 10 или 11 в виртуальную машину на Proxmox VE, выделили 8 GB RAM, а в интерфейсе Proxmox видите, что гостевая система «жрет» все 100% памяти, даже когда внутри Windows диспетчер задач показывает всего 2-3 GB использования? Или наоборот — Proxmox показывает мизерное потребление, хотя в винде уже давно не хватает оперативки?
Эта проблема мучает системных администраторов и домашних энтузиастов виртуализации уже много лет. Спойлер: дело не в багах Proxmox и не в кривизне Windows — просто они «говорят на разных языках» о памяти, и без специальных драйверов хост не понимает, что реально происходит внутри гостевой ОС.
В этой статье вы получите:
- Понимание, почему возникает эта проблема (техническая подоплека без занудства)
- Пошаговую инструкцию по установке QEMU Guest Agent для Windows
- Готовые команды и скрипты для автоматизации
- Разбор типичных ошибок и способы их устранения
- Бонусы: как включить балунинг памяти и оптимизировать производительность VM
Потратьте 15 минут сейчас — и забудьте о головной боли с мониторингом памяти навсегда.
Почему Proxmox «не видит» реальное потребление памяти Windows
Давайте разберемся в корне проблемы, чтобы понимать, что мы лечим.
Как Proxmox пытается узнать о памяти гостевой ОС
Proxmox VE (на базе KVM/QEMU) работает на уровне гипервизора. Когда вы выделяете виртуальной машине, скажем, 8 GB RAM, хост-система резервирует эту память целиком. С точки зрения Proxmox, VM потребляет все 8 GB — потому что он их выделил и не знает, что происходит внутри.
Проблема №1: Отсутствие обратной связи. Windows внутри VM может использовать только 2 GB из 8 GB, но гипервизор об этом не в курсе. Он видит только факт: «я дал 8 GB этой машине».
Проблема №2: Memory Ballooning не работает по умолчанию. В виртуализации есть технология Balloon Driver — специальный драйвер, который «забирает» неиспользуемую память у гостевой ОС и возвращает её хосту. Но для этого нужен агент внутри Windows, который умеет с этим работать.
Почему Linux-машины обычно показывают память правильно
Если вы поднимали виртуалки с Ubuntu, Debian или CentOS, то наверняка замечали: там всё отображается корректно. Почему?
Потому что в современных Linux-дистрибутивах QEMU Guest Agent уже предустановлен или легко ставится одной командой. Агент общается с хостом по специальному каналу (virtio-serial), передает информацию о реальном использовании памяти, процессоров, дисков.
Windows же — закрытая система, и Microsoft не включает сторонние драйверы в дистрибутив. Поэтому их нужно ставить вручную.
Что такое QEMU Guest Agent и зачем он нужен
QEMU Guest Agent (qemu-ga) — это специальная программа, которая работает внутри гостевой ОС и предоставляет хосту информацию о состоянии системы:
- Реальное потребление RAM — не выделенное, а используемое
- IP-адреса сетевых интерфейсов — вы увидите их прямо в веб-интерфейсе Proxmox
- Список процессов и дисков
- Возможность корректного shutdown/reboot из Proxmox (вместо жесткого «выдернуть шнур»)
- Синхронизацию времени
- Поддержку снимков (snapshots) на уровне файловой системы через VSS (Volume Shadow Copy Service)
Без агента Proxmox слепой. С агентом — видит всё как на ладони.
Подготовка: что нужно перед установкой
Прежде чем приступать, убедитесь, что у вас есть:
- Работающая виртуальная машина Windows (7, 10, 11, Server 2012-2022 — любая)
- Доступ к веб-интерфейсу Proxmox или SSH к хосту Proxmox
- Права администратора внутри Windows VM
- Активное сетевое подключение в VM для скачивания драйверов (или готовый ISO с драйверами)
Проверяем версию Proxmox VE
Зайдите по SSH на ваш Proxmox-хост и выполните:
pveversion
Вы увидите что-то вроде:
pve-manager/8.1.3/b46aac3b42da5d15 (running kernel: 6.5.11-7-pve)
Это важно, потому что пути к ISO с драйверами могут отличаться в зависимости от версии. В современных Proxmox 7.x и 8.x драйверы VirtIO обычно уже есть в системе.
Включаем QEMU Guest Agent в настройках VM
Даже если вы установите агент внутри Windows, он не заработает, пока не включите его в настройках виртуальной машины.
Шаг 1: В веб-интерфейсе Proxmox выберите вашу VM.
Шаг 2: Перейдите в раздел Options (Параметры).
Шаг 3: Найдите параметр QEMU Guest Agent и включите его (Enable).
Шаг 4: Перезагрузите VM, чтобы изменения вступили в силу.
Или через командную строку на хосте:
qm set <VMID> --agent enabled=1
Замените <VMID> на ID вашей виртуальной машины (например, 100, 101 и т.д.).
Пошаговая инструкция: установка QEMU Guest Agent в Windows
Теперь переходим к главному — установке агента внутри Windows. Есть два основных способа: через установщик VirtIO и вручную. Рассмотрим оба.
Способ 1: Установка через VirtIO-драйверы (рекомендуется)
Самый простой и правильный путь — использовать официальный ISO с драйверами VirtIO от проекта Fedora (да-да, они же используются в Proxmox).
Шаг 1: Скачиваем ISO с драйверами VirtIO
Зайдите на хост Proxmox по SSH и скачайте актуальную версию драйверов:
cd /var/lib/vz/template/iso wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
Или вы можете скачать драйверы вручную с сайта github.com/virtio-win и загрузить на хост через веб-интерфейс.
Шаг 2: Подключаем ISO к виртуальной машине
В веб-интерфейсе Proxmox:
- Выберите вашу VM
- Перейдите в Hardware (Оборудование)
- Найдите CD/DVD Drive
- Выберите
virtio-win.isoиз списка - Запустите VM
Или через CLI:
qm set &lt;VMID&gt; --ide2 local:iso/virtio-win.iso,media=cdrom
Шаг 3: Запускаем установку драйверов в Windows
Зайдите в Windows VM, откройте Этот компьютер (This PC), найдите подключенный CD-ROM с драйверами.
Запустите файл:
virtio-win-guest-tools.exe
Это установщик, который автоматически поставит:
- VirtIO драйверы для сети, дисков, балунинга
- QEMU Guest Agent
- Spice Agent (опционально, для улучшенной работы с консолью)
Процесс установки стандартный: Next → Next → Install → Finish. Важно: После установки обязательно перезагрузите Windows.
Шаг 4: Проверяем, что сервис запущен
После перезагрузки откройте Диспетчер задач → Службы (Services) или нажмите Win + R, введите:
services.msc
Найдите службу QEMU Guest Agent. Она должна быть в статусе Running (Работает) и тип запуска Automatic (Автоматически).
Если служба не запущена, запустите её вручную:
net start qemu-ga
Способ 2: Установка вручную (для продвинутых)
Если по какой-то причине автоустановщик не сработал, можно поставить агент вручную.
Извлекаем MSI-пакет из ISO
Откройте ISO virtio-win.iso внутри Windows, перейдите в папку:
guest-agent\
Там вы найдете файлы:
qemu-ga-x86_64.msi— для 64-битной Windowsqemu-ga-x86.msi— для 32-битной
Скопируйте нужный файл на диск C:\ и запустите:
msiexec /i C:\qemu-ga-x86_64.msi /qn /l*v C:\qemu-ga-install.log
Параметры:
/i— установка/qn— тихий режим (без GUI)/l*v— лог установки (полезно для отладки)
Запускаем сервис
sc start QEMU-GA
Делаем автозапуск
sc config QEMU-GA start= auto
Обратите внимание на пробел после start= — это не опечатка, так требует синтаксис команды sc.
Проверяем результат: правильно ли Proxmox видит память
Теперь самое интересное — проверим, заработало ли всё как надо.
В веб-интерфейсе Proxmox
Зайдите в веб-интерфейс Proxmox, выберите вашу VM и посмотрите на график использования памяти на вкладке Summary.
До установки агента: вы видели, что VM «использует» 100% от выделенной памяти (например, 8.00 GB из 8.00 GB).
После установки агента: вы увидите реальное потребление, например, 2.34 GB из 8.00 GB.
Через командную строку
На хосте Proxmox выполните:
qm guest cmd &lt;VMID&gt; get-memory-stats
Вы должны увидеть JSON-вывод с детальной статистикой памяти:
{
&quot;actual&quot; : 8589934592,
&quot;available&quot; : 8371216384,
&quot;free&quot; : 5234567890,
&quot;total&quot; : 8589934592,
&quot;unused&quot; : 6234567890,
&quot;usable&quot; : 5987654321
}
Если видите такой вывод — поздравляю, агент работает!
Проверяем IP-адреса
Теперь Proxmox также видит IP-адреса VM:
qm guest cmd &lt;VMID&gt; network-get-interfaces
Вывод покажет все сетевые интерфейсы с их IP, MAC-адресами и статусами.
Типичные ошибки и как их устранить
Даже следуя инструкции, можно наткнуться на подводные камни. Разберем самые частые.
Ошибка: «QEMU Guest Agent is not running»
Симптомы: В Proxmox видите предупреждение «QEMU guest agent is not running» или «agent timeout».
Причины и решения:
- Служба не запущена внутри Windows. Зайдите в VM, откройте
services.msc, найдите QEMU Guest Agent и запустите вручную. - Не включен агент в настройках VM. В Proxmox: VM → Options → QEMU Guest Agent → Enable.
- Отсутствует канал связи (virtio-serial). Убедитесь, что VM использует VirtIO-устройства. Проверьте раздел Hardware — должен быть активен VirtIO Serial.
Добавить serial-устройство можно командой:
qm set &lt;VMID&gt; --serial0 socket
Ошибка: Агент установлен, но память все равно показывает 100%
Причина: Скорее всего, вы не перезагрузили VM после установки или не включили агент в настройках.
Решение:
- Выключите VM полностью (не reboot, а shutdown)
- В Proxmox убедитесь, что Options → QEMU Guest Agent = Enabled
- Запустите VM заново
- Подождите 1-2 минуты, пока агент не установит связь
Ошибка: После установки драйверов Windows не загружается / синий экран
Причина: Конфликт драйверов или неправильная настройка дискового контроллера.
Решение:
- Загрузитесь в Safe Mode (Безопасный режим)
- Удалите драйверы VirtIO через Device Manager
- Убедитесь, что в настройках VM диск использует правильный контроллер (VirtIO SCSI или SATA, а не IDE)
- Переустановите драйверы
Профилактика: Перед установкой VirtIO-драйверов сделайте snapshot VM в Proxmox, чтобы можно было откатиться.
qm snapshot &lt;VMID&gt; pre-virtio --description &quot;Before VirtIO driver installation&quot;
Ошибка: IP-адреса не отображаются в Proxmox
Причина: Агент работает, но не передает сетевую информацию (часто из-за firewall внутри Windows или отсутствия VirtIO-драйверов сети).
Решение:
- Убедитесь, что в Device Manager сетевой адаптер называется «Red Hat VirtIO Ethernet Adapter»
- Проверьте, что Windows Firewall не блокирует qemu-ga.exe
- Перезапустите службу агента:
net stop qemu-ga && net start qemu-ga
Настройка Memory Ballooning для экономии RAM на хосте
Теперь, когда агент работает, можно включить балунинг памяти — технологию динамического управления RAM.
Что такое Ballooning простыми словами
Представьте: у вас на хосте 64 GB RAM, и вы подняли 10 виртуальных машин, каждой выделили по 8 GB. По-простому считаем: 10 × 8 = 80 GB — не хватает памяти!
Но на деле каждая VM использует, скажем, только 3 GB из 8 GB. Балунинг позволяет гипервизору «забрать» неиспользуемую память обратно и отдать другим VM.
Как это работает:
- Драйвер Balloon внутри Windows «надувает воздушный шар» — выделяет память, которую не использует
- Эта память возвращается хосту
- Если Windows нужно больше памяти, «шар сдувается», и хост возвращает RAM обратно
Включаем Ballooning в Proxmox
В веб-интерфейсе:
- VM → Hardware → Memory
- Установите Minimum memory (балунинг), например, 2048 MB (2 GB)
- Maximum — то, что вы изначально выделили, например, 8192 MB
Теперь VM может использовать от 2 до 8 GB в зависимости от нагрузки.
Через CLI:
qm set &lt;VMID&gt; --balloon 2048
Важно: Балунинг работает только при установленном QEMU Guest Agent и VirtIO Balloon Driver!
Проверяем балунинг
На хосте:
qm monitor &lt;VMID&gt; info balloon
Вы увидите текущий размер «шара» и сколько памяти реально используется.
Бонус: Оптимизация производительности Windows VM в Proxmox
Раз уж мы здесь, давайте выжмем максимум из виртуалки.
Включаем CPU host-passthrough
По умолчанию Proxmox эмулирует универсальный процессор. Для лучшей производительности передайте гостю реальные возможности вашего CPU:
qm set &lt;VMID&gt; --cpu host
Прирост производительности: 10-20% в зависимости от задач.
Используем VirtIO SCSI вместо IDE
Если ваш диск на контроллере IDE или SATA — переключите на VirtIO SCSI. Это существенно ускорит дисковые операции.
Осторожно: Смена контроллера требует переустановки Windows или миграции через клонирование диска. Лучше делать это на этапе создания VM.
Отключаем ненужные устройства
Tablet, ненужные USB-контроллеры, дискета (серьезно, она там есть по умолчанию) — всё это жрет ресурсы.
qm set &lt;VMID&gt; --tablet 0
Настраиваем кэш дисков
Для SSD-хранилищ используйте:
qm set &lt;VMID&gt; --scsi0 local-lvm:vm-&lt;VMID&gt;-disk-0,cache=writeback,discard=on
cache=writeback— ускоряет записьdiscard=on— поддержка TRIM для SSD
Автоматизация: скрипт для массовой установки агента
Если у вас десятки Windows VM, установка агента вручную — ад. Автоматизируем процесс.
PowerShell-скрипт для установки QEMU Guest Agent
Сохраните этот скрипт как install-qemu-agent.ps1 и запустите с правами администратора внутри каждой VM:
# PowerShell <a href="https://it-apteka.com/ustanovka-n8n-v-lxc-kontejner-proxmox-polnaja-instrukcija-ot-a-do-ja/" data-wpil-monitor-id="352">скрипт для автоматической установки</a> QEMU Guest Agent
# Требует подключенного ISO virtio-win.iso
$driveLetter = (Get-Volume | Where-Object {$_.FileSystemLabel -eq &quot;virtio-win&quot;}).DriveLetter
if (-not $driveLetter) {
Write-Host &quot;Ошибка: ISO virtio-win.iso не подключен!&quot; -ForegroundColor Red
exit 1
}
$installerPath = &quot;${driveLetter}:\guest-agent\qemu-ga-x86_64.msi&quot;
if (Test-Path $installerPath) {
Write-Host &quot;Установка QEMU Guest Agent...&quot; -ForegroundColor Green
Start-Process msiexec.exe -ArgumentList &quot;/i `&quot;$installerPath`&quot; /qn /l*v C:\qemu-ga-install.log&quot; -Wait
Write-Host &quot;Установка завершена. Проверяем службу...&quot; -ForegroundColor Green
Start-Sleep -Seconds 5
$service = Get-Service -Name &quot;QEMU-GA&quot; -ErrorAction SilentlyContinue
if ($service -and $service.Status -eq &quot;Running&quot;) {
Write-Host &quot;Служба QEMU Guest Agent запущена успешно!&quot; -ForegroundColor Green
} else {
Write-Host &quot;Запускаем службу вручную...&quot; -ForegroundColor Yellow
Start-Service -Name &quot;QEMU-GA&quot;
Write-Host &quot;Служба запущена.&quot; -ForegroundColor Green
}
Write-Host &quot;Перезагрузите систему для применения всех изменений.&quot; -ForegroundColor Cyan
} else {
Write-Host &quot;Ошибка: Установщик не найден по пути $installerPath&quot; -ForegroundColor Red
exit 1
}
Ansible-плейбук для массового развертывания
Для тех, кто управляет инфраструктурой через Ansible:
---
- name: Установка QEMU Guest Agent на Windows VM
hosts: windows_vms
tasks:
- name: Копируем MSI-пакет на целевую машину
win_copy:
src: /path/to/qemu-ga-x86_64.msi
dest: C:\temp\qemu-ga-x86_64.msi
- name: Устанавливаем QEMU Guest Agent
win_package:
path: C:\temp\qemu-ga-x86_64.msi
state: present
arguments: /qn
- name: Убеждаемся, что служба запущена
win_service:
name: QEMU-GA
state: started
start_mode: auto
- name: Перезагружаем систему
win_reboot:
reboot_timeout: 600
Часто задаваемые вопросы (FAQ)
Работает ли агент на Windows Server?
Да. QEMU Guest Agent полностью совместим с Windows Server 2012, 2016, 2019, 2022. Процесс установки идентичен.
Можно ли использовать агент в других гипервизорах?
Частично. QEMU Guest Agent разработан для KVM/QEMU, но некоторые функции могут работать в oVirt, OpenStack. В VMware и Hyper-V используются собственные агенты (VMware Tools, Integration Services).
Влияет ли агент на производительность?
Нет. Потребление ресурсов минимально: около 10-20 MB RAM и практически нулевая нагрузка на CPU.
Нужно ли обновлять агент?
Рекомендуется. При обновлении Proxmox VE желательно обновлять и VirtIO-драйверы вместе с агентом. Обычно достаточно раз в год проверять актуальность версии.
Агент установлен, но snapshot не работает
Причина: Для работы snapshot с консистентностью данных (quiesce) нужен не только агент, но и корректная настройка VSS в Windows.
Решение: Убедитесь, что служба Volume Shadow Copy (VSS) запущена в Windows. Проверьте командой:
vssadmin list providers
Должны быть активны Microsoft Software Shadow Copy Provider и QEMU Guest Agent VSS Provider.
Профилактика и лучшие практики
Регулярно проверяйте статус агента
Добавьте в свой мониторинг (Zabbix, Prometheus, Nagios) проверку статуса QEMU Guest Agent на всех Windows VM.
Пример проверки через Zabbix:
qm agent &lt;VMID&gt; ping
Если возвращает OK — агент работает. Если timeout или ошибка — пора разбираться.
Делайте snapshot перед обновлением драйверов
Всегда создавайте точку восстановления перед апдейтом VirtIO-драйверов:
qm snapshot &lt;VMID&gt; before-driver-update --description &quot;Before updating VirtIO drivers&quot;
Ведите документацию
Записывайте, на каких VM установлен агент, какие версии драйверов используются. Это сэкономит часы при диагностике проблем.
Используйте шаблоны VM
Создайте шаблон Windows VM с уже установленным QEMU Guest Agent и VirtIO-драйверами. При создании новых виртуалок клонируйте этот шаблон — и агент будет работать из коробки.
qm template &lt;VMID&gt;
Заключение: Прогноз выздоровления
Поздравляю! Теперь ваш Proxmox VE видит реальное потребление памяти Windows-виртуалок, а не просто «выделенный объем». Вы получили:
- Точный мониторинг памяти — никакого больше 100% использования на пустой системе
- Возможность балунинга — экономия RAM на хосте и гибкое распределение ресурсов
- IP-адреса в интерфейсе — не нужно логиниться в VM, чтобы узнать IP
- Корректный shutdown/reboot — VM теперь завершается корректно, как физический сервер
- Поддержку snapshot с quiesce — консистентные снимки без риска повреждения данных
Время на лечение: 15-30 минут на одну VM (включая скачивание драйверов и перезагрузку).
Побочные эффекты: Отсутствуют. Только позитив.
Профилактика: Регулярные обновления драйверов раз в 6-12 месяцев.
Что дальше?
Если эта статья была полезна:
- Подпишитесь на наш Telegram-канал — там мы делимся свежими рецептами по Linux, виртуализации, DevOps и SRE
- Пишите в комментариях, с какими еще проблемами в Proxmox вы сталкивались — возможно, следующая статья будет именно о вашей боли
- Сохраните статью в закладки — эта инструкция пригодится вам не раз
P.S. Если вы только начинаете работу с Proxmox или ищете качественный хостинг для виртуализации, у нас есть отдельная статья с разбором лучших провайдеров под эти задачи. Ссылка будет в комментариях — не пропустите!
Здоровья вашим серверам и стабильности вашим VM! 🖥️⚡


