Proxmox: эмуляция SSD для виртуальных машин

Опция SSD emulation в Proxmox VE включается галочкой в свойствах диска виртуальной машины: Датастор → ВМ → Hardware → Hard Disk → Edit → SSD emulation. После её активации гостевая система начинает видеть виртуальный диск как твердотельный накопитель, а не как вращающийся HDD. Это меняет поведение ОС: Windows перестаёт запускать дефрагментацию и включает отправку команд TRIM, а Linux-дистрибутивы корректируют планировщик ввода-вывода и настройки выравнивания.

Функция особенно востребована, когда виртуальные диски физически размещены на SSD-массиве, NVMe или ZFS-пуле из флеш-накопителей. Без флага эмуляции гостевая система «думает», что работает с механическим диском, и применяет неоптимальные алгоритмы. Разберём, как правильно настроить эмуляцию SSD, с какими параметрами её сочетать и какие подводные камни встречаются на практике.

Что делает опция SSD emulation в Proxmox

Технически флаг ssd=1 в конфигурации диска заставляет QEMU/KVM сообщать гостевой системе, что устройство является твердотельным. Для virtio-дисков это передаётся через специальный атрибут ротации носителя: значение «non-rotational» отключает логику, рассчитанную на магнитные пластины.

Гостевая ОС реагирует на это по-разному. Windows 10 и 11 определяют тип носителя и отключают плановую дефрагментацию, заменяя её оптимизацией через TRIM. Linux проверяет файл /sys/block/vda/queue/rotational — при значении 0 система считает диск твердотельным и может сменить планировщик ввода-вывода на none или mq-deadline, что снижает накладные расходы.

  • 💾 Гостевая система видит диск как SSD и отключает дефрагментацию
  • ⚡ Включается корректная обработка команд TRIM/discard внутри ВМ
  • 🔧 Linux меняет планировщик I/O на более подходящий для флеш-памяти
  • 📊 Выравнивание разделов и размер блоков оптимизируются под SSD

Как включить эмуляцию SSD через веб-интерфейс

Самый простой способ — графический интерфейс Proxmox. Откройте нужную виртуальную машину, перейдите на вкладку Hardware, выберите диск и нажмите Edit. В открывшемся окне найдите чекбокс SSD emulation и отметьте его. Изменения применяются к конфигурации сразу, но гостевая система увидит новый тип устройства только после полной перезагрузки ВМ — не reboot изнутри гостя, а именно цикл выключения и включения.

Если диск создаётся заново, тот же чекбокс доступен в мастере добавления оборудования: Hardware → Add → Hard Disk. Там же рядом находится связанная опция Discard, о которой поговорим отдельно — в большинстве сценариев их включают вместе.

☑️ Включение SSD emulation в Proxmox

Выполнено: 0 / 6

Настройка через командную строку и конфигурационный файл

Администраторы, предпочитающие терминал, могут включить эмуляцию напрямую через утилиту qm set. Команда добавляет параметр ssd=1 к строке диска в конфигурации ВМ:

qm set 100 --scsi0 local-lvm:vm-100-disk-0,ssd=1,discard=on

Здесь 100 — идентификатор виртуальной машины, а scsi0 — шина и слот диска. Альтернативный путь — ручное редактирование файла /etc/pve/qemu-server/100.conf на узле кластера. Найдите строку нужного диска и допишите параметры через запятую. После правки конфигурация подхватывается демоном автоматически, но ВМ всё равно потребуется перезапустить.

Связка SSD emulation, Discard и типа контроллера

Одного флага эмуляции недостаточно для полноценной работы TRIM. Чтобы гостевая система могла сообщать хосту об освобождённых блоках, необходимо включить Discard и убедиться, что контроллер диска поддерживает эту функцию. Наиболее предсказуемо связка работает с VirtIO SCSI single и включённым тонким выделением пространства на хранилище.

ПараметрНазначениеРекомендация
SSD emulationСообщает гостю тип носителяВключать для дисков на SSD/NVMe
DiscardПроброс TRIM из гостя на хостВключать вместе с ssd=1
VirtIO SCSI singleКонтроллер с поддержкой discardПредпочтителен для Linux и Windows
IO threadОтдельный поток ввода-выводаПолезно при высокой нагрузке
CacheРежим кэширования записиОбычно Default (none) безопаснее

Обратите внимание: для того чтобы TRIM реально освобождал место, хранилище на стороне хоста тоже должно это поддерживать. Тонкие LVM (lvm-thin), ZFS и Ceph RBD работают с discard, а вот «толстые» raw-образы на директорном хранилище — нет.

📊 На каком хранилище размещены диски ваших ВМ в Proxmox?
LVM-thin
ZFS
Ceph
NFS или директорное хранилище

Проверка результата внутри гостевой системы

В Linux убедиться в успехе просто: выполните команду и посмотрите значение флага ротации.

cat /sys/block/sda/queue/rotational

Значение 0 означает, что система видит диск как SSD. Дополнительно можно проверить поддержку discard выводом lsblk -D — ненулевые значения в колонках DISC-GRAN и DISC-MAX подтверждают проброс TRIM.

В Windows откройте утилиту «Оптимизация дисков» (dfrgui): в колонке «Тип носителя» должно отображаться «Твердотельный накопитель». Если там по-прежнему «Жёсткий диск», вероятно, ВМ не была полностью перезапущена после изменения конфигурации, либо используется контроллер IDE/SATA, где поведение флага может отличаться.

⚠️ Внимание: простая перезагрузка изнутри гостевой ОС (reboot) не всегда применяет изменения виртуального оборудования. Выполняйте полный shutdown с последующим запуском ВМ через интерфейс Proxmox.
Почему Windows всё ещё показывает HDD после включения ssd=1

Наиболее частые причины — ВМ перезагружена, а не выключена/включена; диск подключён через старый контроллер IDE; в конфиге диска параметр ssd=1 фактически не сохранился (проверьте qm config VMID). Также убедитесь, что в госте установлены актуальные virtio-драйверы для Windows.

Типичные ошибки и ограничения

Первая распространённая ошибка — включение эмуляции SSD для дисков, которые физически лежат на HDD-массиве. Вреда в этом обычно нет, но и пользы тоже: гостевая система отключит дефрагментацию, которая на механических дисках как раз нужна. Включайте флаг осознанно, только когда бэкенд действительно твердотельный.

Вторая проблема — ожидание чуда от discard на неподходящем хранилище. Если пул не поддерживает тонкое освобождение блоков, TRIM из гостя просто уйдёт «в никуда», а место на хосте не освободится. Проверяйте тип хранилища заранее в разделе Datacenter → Storage.

  • 🚫 Не включайте ssd=1 для дисков на HDD-рейдах без необходимости
  • 🧩 Проверяйте совместимость контроллера: IDE и старые SATA-эмуляции могут игнорировать флаг
  • 💽 Для Windows-гостей заранее установите VirtIO-драйверы из официального ISO
  • 🔁 Помните про полный цикл выключения/включения ВМ после изменений
⚠️ Внимание: на хранилищах с тонким выделением (lvm-thin, ZFS) агрессивный TRIM из множества ВМ может создавать дополнительную нагрузку на метаданные пула. При массовом включении discard наблюдайте за latency хранилища и при необходимости настройте периодический fstrim по расписанию вместо мгновенного.

Влияет ли эмуляция SSD на производительность

Прямого прироста скорости флаг ssd=1 не даёт — виртуальный диск работает через те же механизмы QEMU и того же хранилища. Эффект косвенный: гостевая ОС перестаёт выполнять вредные для флеш-памяти операции и начинает использовать оптимальные алгоритмы. На практике это проявляется в снижении лишних операций записи и более предсказуемой задержке.

Реальный прирост производительности дают смежные настройки: выбор VirtIO Block или VirtIO SCSI вместо эмулируемого SATA, включение IO thread, грамотный выбор режима кэша и отказ от лишних слоёв (например, qcow2 поверх ZFS). Эмуляция SSD — лишь один элемент общей оптимизации дисковой подсистемы виртуализации.

⚠️ Внимание: меняйте режим кэша диска (writeback, writethrough) только с пониманием рисков — writeback без защищённого питания хоста может привести к повреждению файловых систем гостей при внезапном отключении электричества.

Часто задаваемые вопросы

Нужно ли включать SSD emulation, если диски на NVMe?

Да. Флаг сообщает гостевой системе реальный тип носителя, что отключает дефрагментацию в Windows и включает корректную обработку TRIM. На NVMe-хранилище это особенно уместно, хотя прямого ускорения не даст.

Работает ли SSD emulation с контроллером SATA?

Поведение зависит от версии QEMU и гостевой ОС. Наиболее предсказуемо флаг работает с VirtIO Block и VirtIO SCSI. Если гостевая система не определяет диск как SSD на SATA-контроллере, рассмотрите миграцию диска на virtio-шину.

Опасно ли включать Discard для всех ВМ сразу?

Сам по себе discard безопасен, но массовая отправка TRIM создаёт нагрузку на метаданные тонких пулов. Включайте постепенно и наблюдайте за задержками хранилища. Для Linux-гостей альтернатива — периодический fstrim по расписанию.

Как проверить, что параметр ssd=1 реально применился?

На хосте выполните qm config VMID и найдите строку диска — там должно быть ssd=1. Внутри Linux-гостя проверьте /sys/block/имя_диска/queue/rotational: значение 0 подтверждает эмуляцию SSD.

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

Нет, пересоздание не требуется. Достаточно отредактировать параметры существующего диска через веб-интерфейс или команду qm set, после чего выполнить полный цикл выключения и запуска виртуальной машины.