Метод 1: Прямой доступ к RAW-диску через LVM («RAW disk passthrough»)
Этот подход предполагает использование физического диска (или его раздела) напрямую как RAW-устройство, интегрированное в систему хранения Proxmox на базе LVM (или LVM-Thin). Это не настоящий passthrough устройства, а имитация — диск всё ещё проходит через виртуализацию Proxmox, но без слоя файловой системы (например, без QCOW2 или RAW-файла внутри хранилища).

Шаги по реализации :
# 1. Остановить ВМ
qm stop <VMID>
# 2. Импортировать физическое устройство как RAW-диск в хранилище (например, local-lvm)
qm importdisk <VMID> /dev/nvme0n1 local-lvm --format raw
# 3. Назначить диск ВМ с оптимизациями
qm set <VMID> -scsi0 local-lvm:vm-<VMID>-disk-0,cache=writeback,discard=on
/dev/nvme0n1 — это целый диск, а не раздел. Убедитесь, что он не используется и не содержит ОС или важных данных.✅Преимущества:
- Относительно простая интеграция в Proxmox (через WebUI можно управлять).
- Поддержка live migration (если используете кластер и общий LVM).
- Возможность использовать
discard=onдля TRIM (для SSD/NVMe). - Кэширование
writebackускоряет запись (но требует ИБП или гарантированного питания!).
❌Недостатки:
- Производительность всё ещё проходит через стек QEMU/KVM и LVM, а не напрямую.
- Не подходит для дисков, которые уже смонтированы в хостовой системе.
- Нет полного аппаратного passthrough — дисковые операции эмулируются через virtio-scsi или scsi.
Метод 2: PCI(e) Passthrough физического диска (или NVMe-контроллера)
Это настоящий аппаратный passthrough — хост полностью передаёт устройство VM, и обходит стек QEMU/KVM для I/O. Это даёт максимальную производительность и полный контроль над устройством в гостевой ОС.
Как это работает:
Вы можете передать всё NVMe-устройство, SATA-контроллер, или даже отдельный USB-контроллер с диском – всё зависит от аппаратной поддержки.
Для NVMe-дисков это особенно эффективно, так как они часто имеют PCIe-интерфейс и могут быть переданы напрямую.
Шаги:
1. Убедиться, что IOMMU включён:
- В BIOS/UEFI включите Intel VT-d или AMD-Vi.
- В
/etc/default/grubдобавьте:
intel_iommu=on iommu=pt # для Intel
# или
amd_iommu=on iommu=pt # для AMD
- Обновите GRUB и перезагрузите:
update-grub && reboot
2. Найти PCI-адрес диска:
lspci | grep -i nvme
# Пример вывода: 02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981
3. Заблокировать использование устройства хостом:
Добавьте в /etc/modprobe.d/vfio.conf:
options vfio-pci ids=144d:a804 # замените на vendor:device ID из lspci -n -s 02:00.0
И в /etc/modules:
vfio
vfio_iommu_type1
vfio_pci
4. Перезагрузите или перезагрузите модули.
5. Назначить устройство ВМ:
В конфигурации VM (/etc/pve/qemu-server/<VMID>.conf) добавьте:
Или через WebUI: Hardware → Add → PCI Device → выбрать NVMe/SATA-контроллер.

✅Преимущества:
- Максимальная производительность, как на физической машине.
- Гостевая ОС видит настоящее «железо» — можно использовать NVMe-специфичные утилиты (например,
nvme-cli). - Отсутствие overhead от QEMU/KVM для I/O.
❌ Недостатки:
- Нет live migration — VM привязана к физическому хосту.
- Нельзя использовать то же устройство в хосте или другой VM.
- Требует поддержки IOMMU и правильной настройки BIOS.
- Менее гибко: не подходит для динамического распределения ресурсов.
- Баз данных (PostgreSQL, ClickHouse и др.)
- Специализированных систем хранения (Ceph OSD, TrueNAS VM)
- Низколатентных приложений с жёсткими требованиями к I/O
Сравнение двух методов
|
Характеристика
|
RAW через LVM (
qm importdisk) |
PCI Passthrough
|
|---|---|---|
|
Производительность
|
Высокая (но через QEMU)
|
Максимальная (прямой доступ)
|
|
Поддержка live migration
|
Да (если хранилище общее)
|
Нет
|
|
Управление через WebUI Proxmox
|
Да
|
Да (частично)
|
|
Гибкость
|
Высокая
|
Низкая
|
|
Нужны ли специальные настройки BIOS
|
Нет
|
Да (IOMMU)
|
|
Безопасность/изоляция
|
Средняя (через hypervisor)
|
Высокая (аппаратная изоляция)
|
|
Использование TRIM/discard
|
Да (
discard=on) |
Зависит от гостевой ОС и драйверов
|
Рекомендации
- Используйте RAW через LVM, если вам нужна балансировка между производительностью и управляемостью.
- Используйте PCI passthrough, если максимальная производительность критична, и вы готовы пожертвовать миграцией и гибкостью.
Если вы используете NVMe-диск, и он не нужен хосту, PCI passthrough — лучший выбор.
💡 Современные SSD/NVMe с поддержкой SR-IOV позволяют даже делить NVMe на несколько virtual functions (VF), но это требует поддержки со стороны контроллера и Proxmox (через
vfio+SR-IOV).







1 комментарий