Схема B (4 диска RAID10 + Hot Spare) рекомендована по умолчанию. Схема A — раздельно для тяжёлых БД. Co-authored-by: Cursor <cursoragent@cursor.com>
42 KiB
Развёртывание и настройка Proxmox VE
Консолидация СКАДА, ЛЭРС, лифты, «Меркурий»
| Параметр | Значение |
|---|---|
| Версия | 1.2 |
| Дата | 09.07.2026 |
| Связанный документ | Техническое задание |
Содержание
- Предварительные требования
- Фаза 0 — Подготовка
- Фаза 1 — Установка Proxmox VE
- Фаза 2 — Настройка IOMMU и VFIO (Вариант А)
- Фаза 3 — Создание виртуальных машин
- Фаза 4 — Установка Windows 10
- Фаза 5 — GPU и USB Passthrough (Вариант А)
- Фаза 6 — Настройка RDP (Вариант Б)
- Фаза 7 — Миграция программ
- Фаза 8 — Резервное копирование
- Фаза 9 — Тестирование и ввод в эксплуатацию
- Устранение неполадок
- Справочник конфигураций ВМ
1. Предварительные требования
1.1. Состав виртуальных машин
| VM ID | Имя | Назначение | IP (пример) | vCPU | RAM | Диск |
|---|---|---|---|---|---|---|
| 101 | vm-scada | СКАДА + «Меркурий» | 192.168.10.11 | 6 | 20 ГБ | 200 ГБ |
| 102 | vm-lers | ЛЭРС Учёт | 192.168.10.12 | 4 | 16 ГБ | 120 ГБ |
| 103 | vm-lifts | Управление лифтами | 192.168.10.13 | 4 | 16 ГБ | 120 ГБ |
1.2. Необходимые образы и файлы
- ISO Proxmox VE 8.x — proxmox.com/downloads
- ISO Windows 10
- VirtIO drivers — fedoraproject.org/wiki/Windows_Virtio_Drivers
- Полные бэкапы текущих ПК (образы + БД + конфигурации)
1.3. Сетевая схема (пример)
| Узел | IP | VLAN | Назначение |
|---|---|---|---|
| Proxmox host | 192.168.10.10 | 10 | Управление |
| VM-101 | 192.168.10.11 | 10 | СКАДА + «Меркурий» |
| VM-102 | 192.168.10.12 | 10 | ЛЭРС |
| VM-103 | 192.168.10.13 | 10 | Лифты |
| MOXA (до замены) | 192.168.10.20 | 10 | Конвертер RS-485 |
| RDP-клиент | 192.168.10.50 | 10 | Рабочее место (Вариант Б) |
2. Фаза 0 — Подготовка
2.1. Инвентаризация
Зафиксировать для каждого текущего ПК:
- Версия Windows 10 (build)
- Версии СКАДА, ЛЭРС, лифтов, «Меркурия»
- Размеры баз данных
- IP-адреса, маски, шлюзы, DNS
- COM-порты и скорости (если используются)
- Подключение MOXA (IP, порт, виртуальный COM)
- Vendor:Product ID USB-ключа «Меркурия»
Узнать ID USB-ключа на Linux-хосте (после установки Proxmox):
lsusb
# Пример вывода: Bus 001 Device 005: ID 0529:0001 Aladdin HASP HL 3.25
2.2. Резервное копирование исходных систем
На каждом из трёх ПК:
- Создать образ диска (Macrium Reflect / Clonezilla).
- Экспортировать базы данных СКАДА и ЛЭРС штатными средствами ПО.
- Сохранить конфигурации лифтовой программы и «Меркурия».
- Скопировать бэкапы на внешний носитель и NAS.
2.3. Проверка IOMMU (только Вариант А, после сборки железа)
В BIOS включить VT-d/IOMMU, установить Proxmox, выполнить:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
Скрипт проверки IOMMU groups:
#!/bin/bash
# save as: /root/check-iommu.sh
for g in /sys/kernel/iommu_groups/*; do
echo "Group $(basename $g):"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done
done
chmod +x /root/check-iommu.sh
/root/check-iommu.sh | tee /root/iommu-groups.txt
Критерий готовности: каждая GPU находится в отдельной IOMMU group (допустимо только с HDMI-audio той же карты).
3. Фаза 1 — Установка Proxmox VE
Рекомендуемый путь — аппаратный RAID на Broadcom/LSI MegaRAID с BBU/CacheVault, ext4 + LVM-thin. Подробности по выбору контроллера — в ТЗ, раздел 3.1.
3.1. Настройка MegaRAID (BIOS контроллера)
Перед установкой Proxmox войдите в утилиту конфигурирования контроллера (Ctrl+R при загрузке, или UEFI MegaRAID Configuration Utility).
Обязательные параметры Virtual Drive (VD)
Для каждого созданного виртуального диска (RAID1 и RAID10) выставьте:
| Параметр | Значение | Зачем |
|---|---|---|
| Write Policy | Write Back with BBU (или Write Back, если CacheVault исправен) | Write Through снижает скорость записи в десятки раз — критично для БД СКАДА/ЛЭРС |
| Read Policy | Adaptive Read Ahead | Контроллер предугадывает чтение логов и баз данных |
| Disk Cache Policy | Enabled (или по рекомендации вендора SSD) | |
| I/O Policy | Direct (по умолчанию) | |
| Access Policy | Read/Write |
Важно. Write Back допустим только при исправном BBU или CacheVault (CVPM02/CVPM05). Проверьте статус:
Optimal, заряд кэша —OK. Без защиты кэша используйте Write Through (но производительность будет низкой).
Проверка CacheVault / BBU
В утилите MegaRAID или после установки ОС:
# После установки Proxmox (пакет storcli)
apt install storcli
storcli64 /c0 show | grep -i "cache\|bbu\|vault"
storcli64 /c0/cv show
Ожидаемый статус CacheVault: Optimal.
3.2. Выбор схемы разбивки дисков
Перед созданием массивов в MegaRAID выберите одну из двух схем.
Сравнение схем
| Критерий | Схема A: RAID1 + RAID10 | Схема B: один RAID10 на всё |
|---|---|---|
| Сложность | Выше (2 VD, 2 хранилища Proxmox, 2 диска на ВМ) | Ниже (1 VD, local-lvm, один диск на ВМ) |
| Минимум дисков | 6 (2+4) + spare | 6 (4+2 spare) |
| IOPS для БД | Максимум (отдельный RAID10) | Хороший (общий RAID10) |
| Изоляция нагрузки | БД не конкурируют с ОС/ВМ за диски | Общая очередь I/O |
| Ёмкость при 8×960 ГБ | ~0,9 + ~1,9 = ~2,8 ТБ | ~1,9 ТБ (4 диска в массиве) |
| Hot Spare при 8 дисках | 2 spare | 4 spare (избыточно, но допустимо) |
| Когда выбирать | Тяжёлые БД, доказанная высокая запись | По умолчанию для данного проекта |
Рекомендация для СКАДА / ЛЭРС / «Меркурия»
Схема B (4 диска RAID10 + Hot Spare) — рекомендуемый вариант по умолчанию.
Текущая нагрузка (3 ПК на i5-7400 / 8 ГБ) умеренная. Один RAID10 из 4 SSD с write-back кэшем MegaRAID достаточен для Proxmox, дисков Windows и баз данных одновременно. Схема проще в установке, миграции и сопровождении.
Схему A выбирайте, если:
- базы СКАДА/ЛЭРС уже сейчас активно упираются в диск;
- планируется сильный рост архивов;
- нужна жёсткая изоляция: сбой/нагрузка на БД не должны затрагивать загрузку Windows.
Сводная таблица по количеству дисков
| Всего дисков | Схема B (рекомендуется) | Схема A (раздельно) |
|---|---|---|
| 6 | 4 → RAID10 (всё) + 2 Hot Spare | 2 → RAID1 + 4 → RAID10, spare нет* |
| 8 | 4 → RAID10 (всё) + 4 Hot Spare | 2 → RAID1 + 4 → RAID10 + 2 Hot Spare |
| 4 | 4 → RAID10 (всё), без spare | — |
| 2 | — | 2 → RAID1 (всё), без spare |
*При 6 дисках и схеме A spare не остаётся — допустимо для бюджетной конфигурации, но лучше 8 дисков.
3.3. Схема «A» — RAID1 + RAID10 (раздельно)
Proxmox и системные диски ВМ — на RAID1. Базы данных и рабочие файлы — на отдельном RAID10.
Диски 1, 2 → RAID 1 → VD0 → Proxmox + диски Windows (система)
Диски 3–6 → RAID 10 → VD1 → Базы СКАДА, ЛЭРС, «Меркурий», рабочие файлы
Диски 7, 8 → Global Hot Spare
| VD | RAID | Диски | Назначение в Proxmox | Примерный объём* |
|---|---|---|---|---|
| VD0 | RAID1 | 1, 2 | Установка Proxmox, local-lvm — scsi0 ВМ (Windows) |
~960 ГБ |
| VD1 | RAID10 | 3–6 | Хранилище data-db — scsi1 ВМ (БД и данные) |
~1,9 ТБ |
| — | Hot Spare | 7, 8 | Автозамена | — |
Создание в MegaRAID BIOS
- VD0: диски 1, 2 → RAID 1 → политики из п. 3.1.
- VD1: диски 3, 4, 5, 6 → RAID 10 → политики из п. 3.1.
- Hot Spare: диски 7, 8 → Make Global Hot Spare.
StorCLI
storcli64 /c0 add vd r1 drives=0:0,0:1 writepolicy=wb readpolicy=ra
storcli64 /c0 add vd r10 drives=0:2,0:3,0:4,0:5 writepolicy=wb readpolicy=ra
storcli64 /c0/e0/s6 add spares
storcli64 /c0/e0/s7 add spares
Установка Proxmox (схема A)
- Установить Proxmox на VD0 (RAID1) → ext4 → LVM-thin (
local-lvm). - VD1 не форматировать при установке.
- После установки — подключить VD1 как хранилище
data-db(п. 3.5, шаг «Схема A»).
Размещение дисков ВМ (схема A)
| ВМ | scsi0 (local-lvm, RAID1) |
scsi1 (data-db, RAID10) |
|---|---|---|
| VM-101 | Windows 10 + программы, 80–100 ГБ | БД СКАДА + «Меркурий», 100+ ГБ |
| VM-102 | Windows 10 + ЛЭРС, 60–80 ГБ | БД ЛЭРС, 60+ ГБ |
| VM-103 | Windows 10 + лифты, 60–80 ГБ | БД (если есть), по необходимости |
# Пример VM-101
qm set 101 --scsi0 local-lvm:100,iothread=1,discard=on,ssd=1
qm set 101 --scsi1 data-db:100,iothread=1,discard=on,ssd=1
В Windows: перенести каталоги баз данных на диск D: (scsi1).
3.4. Схема «B» — один RAID10 на всё (рекомендуется)
Все данные — Proxmox, диски ВМ, базы, рабочие файлы — на одном RAID10. Оставшиеся диски — Global Hot Spare.
Диски 1–4 → RAID 10 → VD0 → Proxmox + все диски ВМ + все БД
Диски 5–8 → Global Hot Spare (при 8 дисках; при 6 — диски 5–6)
| Всего дисков | RAID10 | Hot Spare | Полезный объём* |
|---|---|---|---|
| 6 | 4 диска | 2 | ~1,9 ТБ |
| 8 | 4 диска | 4 | ~1,9 ТБ |
*При 4× 960 ГБ SSD. Для 4× 1,92 ТБ → ~3,8 ТБ.
Почему не все 8 дисков в RAID10? RAID10 из 8 дисков дал бы ~3,8 ТБ, но для данного проекта избыточен. 4 диска в RAID10 + 4 spare дают быструю автозамену при отказе (два spare на один массив) без усложнения. Если нужен объём, а не spare — можно 6 или 8 дисков в RAID10 (см. ниже).
Создание в MegaRAID BIOS (6 дисков)
- VD0: диски 1, 2, 3, 4 → RAID 10 → политики из п. 3.1.
- Hot Spare: диски 5, 6 → Make Global Hot Spare.
Создание в MegaRAID BIOS (8 дисков)
- VD0: диски 1, 2, 3, 4 → RAID 10.
- Hot Spare: диски 5, 6, 7, 8 → Make Global Hot Spare.
StorCLI
# RAID10 — 4 диска
storcli64 /c0 add vd r10 drives=0:0,0:1,0:2,0:3 writepolicy=wb readpolicy=ra
# Hot Spare (6 дисков: 2 spare; 8 дисков: 4 spare)
storcli64 /c0/e0/s4 add spares
storcli64 /c0/e0/s5 add spares
# при 8 дисках дополнительно:
storcli64 /c0/e0/s6 add spares
storcli64 /c0/e0/s7 add spares
Установка Proxmox (схема B)
- Установить Proxmox на VD0 (RAID10) → ext4 → LVM-thin (
local-lvm). - Все диски ВМ создавать на
local-lvm— один диск на ВМ, без разделения. - Базы данных хранить на том же диске Windows (или вынести в отдельный каталог на
C:/D:внутри одного виртуального диска).
# Пример VM-101 — один диск на всё
qm set 101 --scsi0 local-lvm:200,iothread=1,discard=on,ssd=1
Вариант: 6–8 дисков целиком в RAID10 (максимум объёма, без spare)
Если hot spare не нужен, а важен объём:
| Дисков | RAID10 | Полезный объём (4×960 база) |
|---|---|---|
| 6 | 6 дисков (3 пары) | ~2,8 ТБ |
| 8 | 8 дисков (4 пары) | ~3,8 ТБ |
# 8 дисков в одном RAID10 (без spare)
storcli64 /c0 add vd r10 drives=0:0,0:1,0:2,0:3,0:4,0:5,0:6,0:7 writepolicy=wb readpolicy=ra
Без hot spare при отказе диска массив уходит в Degraded до ручной замены. Для диспетчерской рекомендуется хотя бы 2 Global Hot Spare.
3.5. Установка Proxmox VE
Общие шаги (обе схемы)
- Загрузиться с ISO Proxmox VE 8.x.
- На экране выбора диска выбрать VD0 (единственный или первый виртуальный диск MegaRAID).
- Тип файловой системы: ext4 (или xfs).
- Не выбирать ZFS при аппаратном RAID.
- Proxmox автоматически создаст LVM-thin (
local-lvm) для дисков виртуальных машин. - Задать hostname
pve-scada, IP192.168.10.10/24, gateway, DNS. - Завершить установку, перезагрузить.
Дополнительно для схемы A: подключение VD1 (RAID10) под БД
Выполнить после установки Proxmox, если выбрана схема A:
# VD1 обычно /dev/sdb
lsblk
storcli64 /c0/vall show
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary ext4 0% 100%
mkfs.ext4 -L pve-data-db /dev/sdb1
mkdir -p /mnt/pve/data-db
echo 'LABEL=pve-data-db /mnt/pve/data-db ext4 defaults,noatime 0 2' >> /etc/fstab
mount -a
pvesm add dir data-db --path /mnt/pve/data-db --content images,backup --maxfiles 0
Для схемы B этот шаг не выполняется.
Первичная настройка хоста
# Обновление системы
apt update && apt full-upgrade -y
# Часовой пояс (пример: Москва)
timedatectl set-timezone Europe/Moscow
# Проверка версии
pveversion -v
# Проверка RAID
storcli64 /c0/vall show
storcli64 /c0/eall/sall show
Загрузка ISO в хранилище
Через веб-интерфейс: Datacenter → pve-scada → local → ISO Images → Upload
Загрузить:
Win10_22H2_ru.isovirtio-win-0.1.xxxx.iso
Настройка хранилища для бэкапов (NAS)
Datacenter → Storage → Add → NFS/CIFS — указать путь к NAS для vzdump.
Проверка I/O (опционально)
# Схема B — тест на local-lvm
fio --name=pve-test --directory=/var/lib/vz --rw=randwrite --bs=4k \
--numjobs=4 --iodepth=32 --size=1G --runtime=30 --time_based
# Схема A — сравнить RAID1 и RAID10
fio --name=db-test --directory=/mnt/pve/data-db --rw=randwrite --bs=4k \
--numjobs=4 --iodepth=32 --size=1G --runtime=30 --time_based
4. Фаза 2 — Настройка IOMMU и VFIO (Вариант А)
Для Варианта Б (RDP) этот раздел можно пропустить, достаточно базовой установки Proxmox.
4.1. BIOS
| Параметр | Значение |
|---|---|
| Intel VT-x / AMD SVM | ON |
| Intel VT-d / AMD IOMMU | ON |
| Boot Mode | UEFI |
| CSM / Legacy | OFF |
| Above 4G Decoding | ON |
| Resizable BAR | OFF (NVIDIA) |
| Primary Display | iGPU |
4.2. GRUB
nano /etc/default/grub
Для Intel:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Для AMD:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
Применить:
update-grub
4.3. Модули ядра
cat >> /etc/modules << 'EOF'
vfio
vfio_iommu_type1
vfio_pci
EOF
4.4. Blacklist GPU-драйверов на хосте
cat > /etc/modprobe.d/blacklist-gpu.conf << 'EOF'
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist radeon
blacklist amdgpu
EOF
4.5. Привязка GPU к vfio-pci
Узнать PCI ID видеокарт:
lspci -nn | grep -i vga
# Пример AMD RX 550: 1002:699f
# Пример NVIDIA GT 1030: 10de:1d01
nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=1002:699f,1002:699f,1002:699f
softdep radeon pre: vfio-pci
softdep amdgpu pre: vfio-pci
softdep nouveau pre: vfio-pci
softdep nvidia pre: vfio-pci
options vfio-pci disable_vga=1
Замените
ids=на реальные ID ваших трёх GPU.
update-initramfs -u -k all
reboot
4.6. Проверка после перезагрузки
dmesg | grep -i vfio
lspci -k | grep -A3 -i vga
# Должно быть: Kernel driver in use: vfio-pci
4.7. AMD reset-bug (при необходимости)
Если GPU не перезапускается после shutdown ВМ:
apt install git dkms build-essential -y
git clone https://github.com/gnif/vendor-reset.git
cd vendor-reset
echo "vendor-reset" >> /etc/modules
dkms install .
modprobe vendor-reset
5. Фаза 3 — Создание виртуальных машин
При схеме A (RAID1+RAID10):
scsi0— система наlocal-lvm,scsi1— БД наdata-db. При схеме B (один RAID10): толькоscsi0наlocal-lvm— один диск на всё.
5.1. Создание через CLI (пример VM-101)
# Создание VM
qm create 101 --name vm-scada --memory 20480 --cores 6 --sockets 1 \
--cpu host --machine q35 --bios ovmf --ostype win10 \
--scsihw virtio-scsi-single --agent enabled=1 \
--net0 virtio,bridge=vmbr0,firewall=1
# EFI disk
qm set 101 --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=0
# Системный диск (RAID1 / local-lvm)
qm set 101 --scsi0 local-lvm:100,iothread=1,discard=on,ssd=1
# Диск баз данных (RAID10 / data-db) — если настроен п. 3.4
qm set 101 --scsi1 data-db:100,iothread=1,discard=on,ssd=1
# CD-ROM с Windows
qm set 101 --ide2 local:iso/Win10_22H2_ru.iso,media=cdrom
# VirtIO drivers (второй CD)
qm set 101 --ide0 local:iso/virtio-win-0.1.xxxx.iso,media=cdrom
# USB 3.0 controller
qm set 101 --usb0 xhci=1
# Autostart
qm set 101 --onboot 1
# Boot order
qm set 101 --boot order=ide2\;scsi0
Аналогично для VM-102 и VM-103:
qm create 102 --name vm-lers --memory 16384 --cores 4 --sockets 1 \
--cpu host --machine q35 --bios ovmf --ostype win10 \
--scsihw virtio-scsi-single --agent enabled=1 \
--net0 virtio,bridge=vmbr0,firewall=1
qm set 102 --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=0
qm set 102 --scsi0 local-lvm:80,iothread=1,discard=on,ssd=1
qm set 102 --scsi1 data-db:60,iothread=1,discard=on,ssd=1
qm set 102 --ide2 local:iso/Win10_22H2_ru.iso,media=cdrom
qm set 102 --ide0 local:iso/virtio-win-0.1.xxxx.iso,media=cdrom
qm set 102 --usb0 xhci=1 --onboot 1
qm set 102 --boot order=ide2\;scsi0
qm create 103 --name vm-lifts --memory 16384 --cores 4 --sockets 1 \
--cpu host --machine q35 --bios ovmf --ostype win10 \
--scsihw virtio-scsi-single --agent enabled=1 \
--net0 virtio,bridge=vmbr0,firewall=1
qm set 103 --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=0
qm set 103 --scsi0 local-lvm:80,iothread=1,discard=on,ssd=1
qm set 103 --ide2 local:iso/Win10_22H2_ru.iso,media=cdrom
qm set 103 --ide0 local:iso/virtio-win-0.1.xxxx.iso,media=cdrom
qm set 103 --usb0 xhci=1 --onboot 1
qm set 103 --boot order=ide2\;scsi0
VM-103: диск
data-dbдобавлять только если база данных лифтовой системы хранится локально на диске ВМ.
5.2. Создание через веб-интерфейс
Для каждой ВМ (Create VM):
| Вкладка | Параметр | Значение |
|---|---|---|
| General | VM ID | 101 / 102 / 103 |
| General | Name | vm-scada / vm-lers / vm-lifts |
| OS | ISO | Windows 10 |
| System | Machine | q35 |
| System | BIOS | OVMF (UEFI) |
| System | Qemu Agent | ✓ |
| Disks | scsi0 | local-lvm, VirtIO SCSI, SSD, Discard — система Windows |
| Disks | scsi1 | data-db, VirtIO SCSI, SSD — базы данных (если настроен RAID10) |
| CPU | Type | host |
| CPU | Cores | по таблице |
| Memory | Memory | по таблице |
| Network | Model | VirtIO |
| Network | Bridge | vmbr0 |
| Confirm | Start after created | ✗ |
6. Фаза 4 — Установка Windows 10
6.1. Установка ОС
- Запустить ВМ, открыть Console.
- При установке Windows на экране выбора диска нажать Load driver.
- Указать драйвер VirtIO SCSI с CD
virtio-win(папкаvioscsi/w10/amd64). - Установить Windows 10.
- После первой загрузки установить с CD
virtio-win:viofs(опционально)vioserialBalloonqxldod(если используется виртуальный дисплей)NetKVM(сеть VirtIO)
6.2. Установка QEMU Guest Agent
С CD virtio-win, папка guest-agent, запустить qemu-ga-x86_64.msi.
Проверка на хосте Proxmox:
qm agent 101 ping
# Expected: no error
6.3. Базовая настройка Windows
На каждой ВМ:
# Имя компьютера (пример для VM-101)
Rename-Computer -NewName "VM-SCADA" -Restart
# Статический IP (пример)
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.10.11 -PrefixLength 24 -DefaultGateway 192.168.10.1
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 192.168.10.1
# Отключить спящий режим
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
# Отложить автоматические перезагрузки (через gpedit.msc или настройки Update)
6.4. Windows Update
Рекомендуется:
- активные часы: 08:00–20:00;
- отложить feature updates на 365 дней;
- отложить quality updates на 30 дней;
- запретить автоматическую перезагрузку в рабочее время.
7. Фаза 5 — GPU и USB Passthrough (Вариант А)
7.1. Определение PCI-адресов GPU
lspci | grep -i vga
# Пример:
# 01:00.0 VGA compatible controller: AMD Radeon RX 550
# 03:00.0 VGA compatible controller: AMD Radeon RX 550
# 04:00.0 VGA compatible controller: AMD Radeon RX 550
7.2. Проброс GPU
Через CLI:
# VM-101 — GPU на 01:00
qm set 101 --hostpci0 01:00,pcie=1,x-vga=1,rombar=1
# VM-102 — GPU на 03:00
qm set 102 --hostpci0 03:00,pcie=1,x-vga=1,rombar=1
# VM-103 — GPU на 04:00
qm set 103 --hostpci0 04:00,pcie=1,x-vga=1,rombar=1
Через веб-интерфейс (Hardware → Add → PCI Device):
| Параметр | Значение |
|---|---|
| Device | Выбрать GPU |
| All Functions | ✓ |
| ROM-Bar | ✓ |
| PCI-Express | ✓ |
| Primary GPU | ✓ |
| Display | none (убрать виртуальный VGA) |
Для NVIDIA добавить флаг CPU:
qm set 101 --cpu host,hidden=1,flags=+pcid
7.3. Проброс USB-ключа «Меркурия» (VM-101)
По Vendor/Device ID (рекомендуется):
# Узнать ID
lsusb | grep -i hasp
# Пример: 0529:0001
qm set 101 --usb1 host=0529:0001,usb3=1
Passthrough USB-контроллера (если ключ нестабилен):
# Найти USB controller в IOMMU group
lspci | grep -i usb
# Пробросить контроллер целиком
qm set 101 --hostpci1 00:14.0,pcie=1
Не подключать USB-ключ через некачественный USB-hub.
7.4. Проброс клавиатуры и мыши
Вариант 1 — отдельные USB-устройства (простой):
Через GUI: Hardware → Add → USB Device → Use USB Vendor/Device ID.
Вариант 2 — passthrough USB-контроллера (надёжный):
К каждой ВМ привязать отдельный физический USB-контроллер (встроенный или PCIe):
# VM-101 — USB controller at 00:14.0
qm set 101 --hostpci2 0b:00.0,pcie=1
# VM-102 — USB controller at 0c:00.0 (PCIe USB card)
qm set 102 --hostpci1 0c:00.0,pcie=1
# VM-103 — USB controller at 0d:00.0 (PCIe USB card)
qm set 103 --hostpci1 0d:00.0,pcie=1
7.5. Установка драйверов GPU в Windows
- Запустить VM-101 с passthrough GPU.
- Изображение установки/рабочего стола должно появиться на физическом мониторе, подключённом к GPU-1.
- Установить драйвер AMD/NVIDIA.
- Повторить для VM-102 и VM-103.
7.6. NVIDIA Code 43 — устранение
Если в диспетчере устройств Code 43:
- Убедиться:
ostype win10,cpu host,hidden=1,machine q35,bios ovmf. - Дамп VBIOS:
# На хосте, когда GPU не занят VM
echo 1 > /sys/bus/pci/devices/0000:01:00.0/reset
cat /sys/bus/pci/devices/0000:01:00.0/rom > /tmp/gt1030.rom
- Пропатчить ROM (nvidia-kvm-patcher).
- Указать ROM в конфиге:
qm set 101 --hostpci0 01:00,pcie=1,x-vga=1,rombar=1,romfile=local:snippets/gt1030.rom
7.7. Проверка passthrough
# Перезагрузка хоста
reboot
# После загрузки — все ВМ должны стартовать автоматически
qm list
# Проверить USB
qm config 101 | grep usb
qm config 101 | grep hostpci
Чек-лист:
- VM-101: картинка на мониторе 1, ключ «Меркурия» виден в Windows
- VM-102: картинка на мониторе 2
- VM-103: картинка на мониторе 3
- Каждая КМ управляет только своей ВМ
- Reboot хоста → все ВМ поднимаются, passthrough сохраняется
8. Фаза 6 — Настройка RDP (Вариант Б)
8.1. Настройка Windows на каждой ВМ
# Включить Remote Desktop
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# Разрешить NLA (рекомендуется)
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1
Или: Параметры → Система → Удалённый рабочий стол → Включить.
8.2. Создание учётных записей
| ВМ | Пользователь | Назначение |
|---|---|---|
| VM-101 | operator_scada | СКАДА + «Меркурий» |
| VM-102 | operator_lers | ЛЭРС |
| VM-103 | operator_lifts | Лифты |
Добавить пользователей в группу Remote Desktop Users.
8.3. USB-ключ на сервере (VM-101)
qm set 101 --usb1 host=0529:0001,usb3=1
MOXA подключается по сети — настроить виртуальный COM в Windows VM-101 (IP MOXA: 192.168.10.20).
8.4. Настройка клиентского ПК
На ПК в комнате диспетчеров создать три .rdp-файла:
scada.rdp:
full address:s:192.168.10.11
username:s:operator_scada
screen mode id:i:2
use multimon:i:1
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
compression:i:1
networkautodetect:i:1
lers.rdp — 192.168.10.12, lifts.rdp — 192.168.10.13.
Запуск:
# Монитор 1
mstsc.exe "C:\RDP\scada.rdp" /f
# Монитор 2 и 3 — запустить аналогично, перетащить окна на нужные мониторы
8.5. Автозапуск RDP-сессий (опционально)
# Поместить ярлыки в shell:startup
Copy-Item "C:\RDP\*.rdp" "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\"
8.6. Проверка сети
# С клиентского ПК
Test-NetConnection 192.168.10.11 -Port 3389
Test-NetConnection 192.168.10.12 -Port 3389
Test-NetConnection 192.168.10.13 -Port 3389
# Задержка
ping 192.168.10.11
# Должно быть < 5 ms
9. Фаза 7 — Миграция программ
9.1. Метод P2V (перенос образа)
# На исходном ПК — Clonezilla → файл образа → скопировать на Proxmox
# Конвертация и импорт (пример)
qm importdisk 101 /path/to/scada-disk.img local-zfs --format qcow2
qm set 101 --scsi0 local-zfs:vm-101-disk-0
9.2. Метод чистой установки + restore (рекомендуется)
- Установить Windows 10 на ВМ.
- Установить СКАДА / ЛЭРС / лифты / «Меркурий» с дистрибутивов.
- Восстановить базы данных из бэкапов.
- Перенести конфигурационные файлы проектов.
9.3. Порядок миграции
| Шаг | Система | VM | Проверка |
|---|---|---|---|
| 1 | «Меркурий» + USB-ключ | 101 | Ключ определяется, опрос через MOXA |
| 2 | СКАДА | 101 | Архив, тренды, алармы |
| 3 | ЛЭРС | 102 | Отчёты, база данных |
| 4 | Лифты | 103 | Связь с контроллерами, команды |
9.4. Настройка MOXA (до замены)
На VM-101:
- Установить драйвер виртуального COM MOXA NPort.
- Настроить подключение к IP
192.168.10.20, порт по документации MOXA. - В «Меркурии» указать виртуальный COM-порт.
- Проверить опрос счётчиков.
10. Фаза 8 — Reservное копирование
10.1. vzdump через веб-интерфейс
Datacenter → Backup → Add:
| Параметр | Значение |
|---|---|
| Node | pve-scada |
| Storage | NAS / local (с достаточным объёмом) |
| Schedule | Daily 02:00 |
| Selection mode | Include selected VMs |
| VMs | 101, 102, 103 |
| Mode | Snapshot |
| Compression | zstd |
| Retention | Keep last 7 |
10.2. vzdump через CLI
# Ручной бэкап
vzdump 101 102 103 --mode snapshot --compress zstd --storage nas-backup
# Проверка
ls -lh /mnt/pve/nas-backup/dump/
10.3. Restore из бэkaпа
# Список бэкапов
pvesm list nas-backup
# Восстановление (пример)
qmrestore /mnt/pve/nas-backup/dump/vzdump-qemu-101-*.zst 101 --force
10.4. Бэкапы баз данных
Дополнительно к vzdump — штатные средства резервного копирования СКАДА и ЛЭРС по расписанию на NAS.
11. Фаза 9 — Тестирование и ввод в эксплуатацию
11.1. Тестовый чек-лист
| № | Тест | Ожидаемый результат | ✓ |
|---|---|---|---|
| 1 | СКАДА: сбор архива 24 ч | Данные поступают | |
| 2 | СКАДА: открытие трендов | Без ошибок | |
| 3 | «Меркурий»: опрос счётчиков | Все точки отвечают | |
| 4 | ЛЭРС: формирование отчёта | Корректные данные | |
| 5 | Лифты: команда / статус | Контроллер отвечает | |
| 6 | Reboot VM-102 | VM-101 и VM-103 работают | |
| 7 | Reboot хоста Proxmox | Все 3 VM autostart ≤10 мин | |
| 8 | Restore VM-101 из vzdump | Система работоспособна | |
| 9 | Отключение UPS (тест) | Корректное shutdown |
11.2. Параллельная эксплуатация
- Срок: 7–14 дней.
- Старые ПК остаются включёнными, но не используются оператором.
- При проблемах — откат на старые машины.
11.3. Ввод в эксплуатацию
- Отключить старые ПК (хранить 2 недели).
- Передать документацию оператору и администратору.
- Зафиксировать дату ввода в журнале.
12. Устранение неполадок
12.0. MegaRAID — degraded / rebuild
storcli64 /c0 show
storcli64 /c0/vall show
storcli64 /c0/eall/sall show
| Состояние | Действие |
|---|---|
| Degraded | Проверить, сработал ли Global Hot Spare; дождаться rebuild |
| Rebuild in progress | Не выключать сервер; нагрузка на массив будет выше |
| BBU/CacheVault Failed | Немедленно переключить Write Policy на Write Through до замены модуля |
| Predictive Failure | Заменить диск; hot spare подхватит автоматически |
12.1. GPU passthrough — VM не стартует
# Проверить лог
qm start 101 2>&1 | tee /tmp/vm101-start.log
journalctl -u pve-guest@101 --no-pager -n 50
Возможные причины:
- GPU занята хостом → проверить
lspci -k, должен бытьvfio-pci. - IOMMU group содержит лишние устройства → ACS override (крайний случай).
- Нет UEFI ROM → использовать SeaBIOS или пропатченный ROM.
12.2. NVIDIA Code 43
cpu: host,hidden=1ostype: win10- Пропатченный VBIOS ROM
x-vga=1, Display = none
12.3. USB-ключ не определяется
# На хосте — виден ли ключ
lsusb | grep -i "0529\|guardant\|hasp\|rutoken"
# Проверить конфиг VM
qm config 101 | grep usb
# Попробовать passthrough USB-контроллера вместо устройства
12.4. HASP — высокая нагрузка CPU
При USB 2.0 passthrough с HASP dongle:
- Обновить VirtIO net driver до последней версии.
- Passthrough USB-контроллера целиком.
- Альтернатива: VirtualHere (USB over IP).
12.5. RDP — чёрный экран / обрыв
- Проверить firewall на VM и между VLAN.
- Отключить Bitmap Cache в RDP-клиенте.
- Проверить
qm agent NNN ping.
12.6. AMD GPU reset-bug
После shutdown VM GPU не отдаётся:
modprobe vendor-reset
# или reboot хоста
13. Справочник конфигураций ВМ
13.1. Пример /etc/pve/qemu-server/101.conf (Вариант А)
agent: 1
bios: ovmf
boot: order=scsi0
cores: 6
cpu: host
efidisk0: local-zfs:vm-101-disk-0,efitype=4m,pre-enrolled-keys=0,size=1M
hostpci0: 01:00,pcie=1,x-vga=1,rombar=1
machine: q35
memory: 20480
name: vm-scada
net0: virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0,firewall=1
onboot: 1
ostype: win10
scsi0: local-zfs:vm-101-disk-1,iothread=1,size=200G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
usb0: xhci=1
usb1: host=0529:0001,usb3=1
vga: none
13.2. Таблица passthrough (заполнить при внедрении)
| Ресурс | PCI / USB ID | VM | Монитор / назначение |
|---|---|---|---|
| GPU-1 | 01:00.0 | 101 | Монитор 1 |
| GPU-2 | 03:00.0 | 102 | Монитор 2 |
| GPU-3 | 04:00.0 | 103 | Монитор 3 |
| USB-ключ «Меркурия» | 0529:0001 | 101 | Лицензия |
| USB-контроллер КМ-1 | 0b:00.0 | 101 | Клавиатура/мышь 1 |
| USB-контроллер КМ-2 | 0c:00.0 | 102 | Клавиатура/мышь 2 |
| USB-контроллер КМ-3 | 0d:00.0 | 103 | Клавиатура/мышь 3 |
13.3. Полезные команды
# Статус всех VM
qm list
# Конфиг VM
qm config 101
# Консоль VM (VNC, если нет GPU passthrough)
qm terminal 101
# Перезапуск VM
qm reboot 101
# Shutdown VM
qm shutdown 101 --timeout 120
# Guest agent: IP адрес VM
qm guest cmd 101 network-get-interfaces
# Snapshot перед изменениями
qm snapshot 101 before-passthrough
# Откат snapshot
qm rollback 101 before-passthrough