Files
SKADA/docs/razvertyvanie-proxmox.md
T
PTah 81c1e16d6f docs: профили Dispatch Tower / Server Room, мониторинг RAID в инструкции
ТЗ: разделение железа под варианты А и Б. Установка Proxmox и мониторинг RAID перенесены в razvertyvanie-proxmox.md §3.5–3.6.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 11:22:10 +10:00

45 KiB
Raw Blame History

Развёртывание и настройка Proxmox VE

Консолидация СКАДА, ЛЭРС, лифты, «Меркурий»

Параметр Значение
Версия 1.3
Дата 09.07.2026
Связанный документ Техническое задание

Содержание

  1. Предварительные требования
  2. Фаза 0 — Подготовка
  3. Фаза 1 — Установка Proxmox VE
  4. Фаза 2 — Настройка IOMMU и VFIO (Вариант А)
  5. Фаза 3 — Создание виртуальных машин
  6. Фаза 4 — Установка Windows 10
  7. Фаза 5 — GPU и USB Passthrough (Вариант А)
  8. Фаза 6 — Настройка RDP (Вариант Б)
  9. Фаза 7 — Миграция программ
  10. Фаза 8 — Резервное копирование
  11. Фаза 9 — Тестирование и ввод в эксплуатацию
  12. Устранение неполадок
  13. Справочник конфигураций ВМ

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. Необходимые образы и файлы

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. Резервное копирование исходных систем

На каждом из трёх ПК:

  1. Создать образ диска (Macrium Reflect / Clonezilla).
  2. Экспортировать базы данных СКАДА и ЛЭРС штатными средствами ПО.
  3. Сохранить конфигурации лифтовой программы и «Меркурия».
  4. Скопировать бэкапы на внешний носитель и 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-lvmscsi0 ВМ (Windows) ~960 ГБ
VD1 RAID10 36 Хранилище data-dbscsi1 ВМ (БД и данные) ~1,9 ТБ
Hot Spare 7, 8 Автозамена

Создание в MegaRAID BIOS

  1. VD0: диски 1, 2 → RAID 1 → политики из п. 3.1.
  2. VD1: диски 3, 4, 5, 6 → RAID 10 → политики из п. 3.1.
  3. 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)

  1. Установить Proxmox на VD0 (RAID1) → ext4 → LVM-thin (local-lvm).
  2. VD1 не форматировать при установке.
  3. После установки — подключить 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 + ЛЭРС, 6080 ГБ БД ЛЭРС, 60+ ГБ
VM-103 Windows 10 + лифты, 6080 ГБ БД (если есть), по необходимости
# Пример 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 дисков)

  1. VD0: диски 1, 2, 3, 4 → RAID 10 → политики из п. 3.1.
  2. Hot Spare: диски 5, 6 → Make Global Hot Spare.

Создание в MegaRAID BIOS (8 дисков)

  1. VD0: диски 1, 2, 3, 4 → RAID 10.
  2. 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)

  1. Установить Proxmox на VD0 (RAID10)ext4 → LVM-thin (local-lvm).
  2. Все диски ВМ создавать на local-lvmодин диск на ВМ, без разделения.
  3. Базы данных хранить на том же диске 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

Предварительно: создание VD в MegaRAID

Перед установкой Proxmox создайте виртуальный диск (VD) в BIOS/UEFI контроллера MegaRAID или PERC (см. §3.23.4). Политики Write Back и Read Ahead — в §3.1.

Установка на аппаратный RAID (профиль Server Room, Вариант Б)

  1. Загрузиться с ISO Proxmox VE 8.x.
  2. В инсталляторе выбрать созданный VD (MegaRAID/PERC).
  3. Filesystem: ext4 (или xfs — допустимая альтернатива).
  4. Storage: LVM-thin — Proxmox автоматически создаст local-lvm для дисков ВМ.
  5. Не выбирать ZFS при аппаратном RAID.
  6. Задать hostname pve-scada, IP 192.168.10.10/24, gateway, DNS.
  7. Завершить установку, перезагрузить.

Установка на ZFS mirror (профиль Dispatch Tower, Вариант А)

Если tower-сборка без MegaRAID (2× NVMe в AHCI):

  1. Загрузиться с ISO Proxmox VE 8.x.
  2. Target disk: ZFS (RAID1) — выбрать 2 NVMe.
  3. Задать hostname, IP, gateway, DNS.
  4. Завершить установку.

ZFS — только для tower без аппаратного RAID. На Dell PERC / MegaRAID — ext4 + LVM-thin.

Дополнительно для схемы разбивки 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.iso
  • virtio-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

3.6. Мониторинг RAID

Применимо для аппаратного RAID (MegaRAID / PERC). Для ZFS mirror на tower — zpool status, zpool scrub.

Установка утилит управления

Broadcom / LSI MegaRAID (Supermicro, большинство сборок):

# StorCLI — скачать с сайта Broadcom, установить .deb
# https://www.broadcom.com/support/download-search
dpkg -i storcli_*.deb

# Проверка
storcli64 show

Dell PERC:

# perccli — аналог storcli для Dell
# https://www.dell.com/support — PERC H730/H755 CLI Tools
dpkg -i perccli_*.deb
perccli64 /c0 show

Устаревшие контроллеры:

apt install megaclisas-status   # MegaCLI, LSI 9271 и старше

Ежедневная проверка состояния

# Общий статус контроллера
storcli64 /c0 show

# Виртуальные диски (массивы)
storcli64 /c0/vall show

# Физические диски
storcli64 /c0/eall/sall show

# CacheVault / BBU
storcli64 /c0/cv show
storcli64 /c0/bbu show

Ожидаемые значения:

Параметр Норма
Controller Status Optimal
VD State Optimal
PD State Online
CacheVault / BBU Optimal, Charged
Write Policy WriteBack (WB)

События, требующие реакции

Событие Действие
Degraded Проверить hot spare / rebuild; не выключать сервер
Rebuild in progress Снизить нагрузку; дождаться завершения
Predictive Failure Заменить диск; hot spare подхватит автоматически
CacheVault Failed / BBU Failed Срочно: Write Policy → Write Through; заменить CVPM/BBU
Foreign Config Импортировать или очистить конфигурацию в MegaRAID BIOS

Оповещения (рекомендуется настроить)

  • degraded array;
  • predictive failure диска;
  • CacheVault / BBU charge low или failed;
  • rebuild completed / failed.

Варианты реализации:

  1. Cron + email — скрипт проверки storcli64 /c0 show и парсинг статуса.
  2. Zabbix / Prometheus — SNMP или script check для MegaRAID.
  3. iDRAC / iLO (Dell/HPE) — встроенные алерты по дискам и RAID.

Пример cron-скрипта (/etc/cron.daily/raid-check):

#!/bin/bash
STATUS=$(storcli64 /c0 show | grep -i "Status")
if echo "$STATUS" | grep -ivq "Optimal"; then
    echo "RAID ALERT on $(hostname): $STATUS" | mail -s "RAID degraded" admin@example.com
fi

Dell PERC — эквивалентные команды

perccli64 /c0 show
perccli64 /c0/vall show
perccli64 /c0/eall/sall show
perccli64 /c0/cv show

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. Установка ОС

  1. Запустить ВМ, открыть Console.
  2. При установке Windows на экране выбора диска нажать Load driver.
  3. Указать драйвер VirtIO SCSI с CD virtio-win (папка vioscsi/w10/amd64).
  4. Установить Windows 10.
  5. После первой загрузки установить с CD virtio-win:
    • viofs (опционально)
    • vioserial
    • Balloon
    • qxldod (если используется виртуальный дисплей)
    • 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

  1. Запустить VM-101 с passthrough GPU.
  2. Изображение установки/рабочего стола должно появиться на физическом мониторе, подключённом к GPU-1.
  3. Установить драйвер AMD/NVIDIA.
  4. Повторить для VM-102 и VM-103.

7.6. NVIDIA Code 43 — устранение

Если в диспетчере устройств Code 43:

  1. Убедиться: ostype win10, cpu host,hidden=1, machine q35, bios ovmf.
  2. Дамп 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
  1. Пропатчить ROM (nvidia-kvm-patcher).
  2. Указать 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.rdp192.168.10.12, lifts.rdp192.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 (рекомендуется)

  1. Установить Windows 10 на ВМ.
  2. Установить СКАДА / ЛЭРС / лифты / «Меркурий» с дистрибутивов.
  3. Восстановить базы данных из бэкапов.
  4. Перенести конфигурационные файлы проектов.

9.3. Порядок миграции

Шаг Система VM Проверка
1 «Меркурий» + USB-ключ 101 Ключ определяется, опрос через MOXA
2 СКАДА 101 Архив, тренды, алармы
3 ЛЭРС 102 Отчёты, база данных
4 Лифты 103 Связь с контроллерами, команды

9.4. Настройка MOXA (до замены)

На VM-101:

  1. Установить драйвер виртуального COM MOXA NPort.
  2. Настроить подключение к IP 192.168.10.20, порт по документации MOXA.
  3. В «Меркурии» указать виртуальный COM-порт.
  4. Проверить опрос счётчиков.

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. Параллельная эксплуатация

  • Срок: 714 дней.
  • Старые ПК остаются включёнными, но не используются оператором.
  • При проблемах — откат на старые машины.

11.3. Ввод в эксплуатацию

  1. Отключить старые ПК (хранить 2 недели).
  2. Передать документацию оператору и администратору.
  3. Зафиксировать дату ввода в журнале.

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=1
  • ostype: 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

Связанные документы