Files
SKADA/docs/razvertyvanie-proxmox.md
T
PTah d93660c817 docs(deploy): MegaRAID Write Back, разбивка 8 дисков, RAID10 под БД
Добавлены настройки VD (Write Back, Adaptive Read Ahead), схема RAID1+RAID10+Hot Spare, подключение data-db, двухдисковые ВМ на local-lvm.

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

37 KiB
Raw Blame History

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

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

Параметр Значение
Версия 1.1
Дата 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. Разбивка дисков (8 дисков)

Рекомендуемая схема для серверной конфигурации с 8 физическими SSD/SAS-дисками:

Диски 1, 2  →  RAID 1   →  VD0  →  Proxmox VE (ext4) + системные диски ВМ (Windows 10)
Диски 36   →  RAID 10  →  VD1  →  Только базы данных (СКАДА, ЛЭРС, «Меркурий»)
Диски 7, 8  →  Global Hot Spare  →  Автозамена при отказе любого из дисков 1–6
VD RAID Физические диски Назначение Примерный объём*
VD0 RAID1 1, 2 ОС Proxmox, local-lvm — системные диски ВМ ~960 ГБ (из 2× 960 ГБ)
VD1 RAID10 3, 4, 5, 6 Активно пишущиеся БД ~1,9 ТБ (из 4× 960 ГБ)
Hot Spare 7, 8 Global Hot Spare

*При дисках 960 ГБ. Для 1,92 ТБ — пропорционально.

Создание массивов в MegaRAID BIOS

  1. VD0 (RAID1): выбрать диски 1 и 2 → RAID Level 1 → применить политики из п. 3.1.
  2. VD1 (RAID10): выбрать диски 3, 4, 5, 6 → RAID Level 10 → применить политики из п. 3.1.
  3. Hot Spare: диски 7 и 8 → Make Global Hot Spare (на обоих).

При отказе любого диска из VD0 или VD1 контроллер автоматически начнёт rebuild на hot spare без участия оператора.

Создание через StorCLI (альтернатива, после загрузки с Live-USB)

# Пример (номера enclosure/slot уточнить: storcli64 /c0/eall/sall show)

# RAID1 — диски 0:0 и 0:1
storcli64 /c0 add vd r1 drives=0:0,0:1 writepolicy=wb readpolicy=ra

# RAID10 — диски 0:20:5
storcli64 /c0 add vd r10 drives=0:2,0:3,0:4,0:5 writepolicy=wb readpolicy=ra

# Global Hot Spare — диски 0:6 и 0:7
storcli64 /c0/e0/s6 add spares
storcli64 /c0/e0/s7 add spares

Упрощённые схемы (если дисков меньше 8)

Дисков Схема
4 RAID10 (все 4) → один VD → ext4 + LVM-thin (см. ТЗ 3.1)
2 RAID1 → один VD → ext4 + LVM-thin
2× NVMe (tower, без RAID-контроллера) ZFS mirror при установке Proxmox — бюджетная альтернатива

3.3. Установка Proxmox VE

  1. Загрузиться с ISO Proxmox VE 8.x.
  2. На экране выбора диска выбрать VD0 (RAID1) — первый виртуальный диск MegaRAID.
  3. Тип файловой системы: ext4 (или xfs — допустимая альтернатива).
  4. Не выбирать ZFS при аппаратном RAID.
  5. Proxmox автоматически создаст структуру LVM-thin (local-lvm) для дисков виртуальных машин.
  6. Задать:
    • Hostname: pve-scada
    • IP: 192.168.10.10/24
    • Gateway, DNS — по сети заказчика
  7. Завершить установку, перезагрузить.

VD1 (RAID10) на этом этапе не трогаем — он будет подключён после установки (п. 3.4).

Первичная настройка хоста

# Обновление системы
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.


3.4. Подключение RAID10 под базы данных

VD1 (RAID10) предназначен только для активно пишущихся баз данных СКАДА, ЛЭРС и «Меркурия». Системные диски Windows остаются на VD0 (local-lvm).

Шаг 1. Разметка VD1 на хосте

# Убедиться, что 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

Шаг 2. Добавить хранилище в Proxmox

Datacenter → Storage → Add → Directory:

Параметр Значение
ID data-db
Directory /mnt/pve/data-db
Content Disk image, VZDump backup file
Shared No

Или через CLI:

pvesm add dir data-db --path /mnt/pve/data-db --content images,backup --maxfiles 0

Шаг 3. Разделение дисков ВМ

Для каждой ВМ создаются два диска:

ВМ Диск 1 (система) Диск 2 (базы данных)
VM-101 (СКАДА + «Меркурий») local-lvm, 80100 ГБ data-db, 100+ ГБ
VM-102 (ЛЭРС) local-lvm, 6080 ГБ data-db, 60+ ГБ
VM-103 (Лифты) local-lvm, 6080 ГБ data-db — только если БД на этом диске

Пример добавления диска БД к VM-101:

qm set 101 --scsi1 data-db:100,iothread=1,discard=on,ssd=1

В Windows:

  • Диск 0 (VirtIO SCSI) — система Windows 10 + программы.
  • Диск 1 (VirtIO SCSI) — папки баз данных (перенести каталоги СКАДА/ЛЭРС/«Меркурия» на этот том).

Шаг 4. Проверка I/O

# Быстрый тест записи на RAID10
fio --name=db-test --directory=/mnt/pve/data-db --rw=randwrite --bs=4k \
    --numjobs=4 --iodepth=32 --size=1G --runtime=30 --time_based

Ожидаемый результат: существенно выше random write IOPS на /mnt/pve/data-db, чем на local-lvm (RAID1).


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 — Создание виртуальных машин

При схеме 8 дисков (раздел 3.2): scsi0 — системный диск на local-lvm (RAID1), scsi1 — диск БД на data-db (RAID10).

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

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