Files
SKADA/docs/razvertyvanie-proxmox.md
T
PTah 50616e6aa8 docs: сравнение схем RAID1+RAID10 vs единый RAID10
Схема B (4 диска RAID10 + Hot Spare) рекомендована по умолчанию. Схема A — раздельно для тяжёлых БД.

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

1154 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Развёртывание и настройка Proxmox VE
## Консолидация СКАДА, ЛЭРС, лифты, «Меркурий»
| Параметр | Значение |
|----------|----------|
| Версия | 1.2 |
| Дата | 09.07.2026 |
| Связанный документ | [Техническое задание](TZ-proxmox-konsolidaciya.md) |
---
## Содержание
1. [Предварительные требования](#1-предварительные-требования)
2. [Фаза 0 — Подготовка](#2-фаза-0--подготовка)
3. [Фаза 1 — Установка Proxmox VE](#3-фаза-1--установка-proxmox-ve)
- [3.1. Настройка MegaRAID (BIOS контроллера)](#31-настройка-megaraid-bios-контроллера)
- [3.2. Выбор схемы разбивки дисков](#32-выбор-схемы-разбивки-дисков)
- [3.3. Схема «A» — RAID1 + RAID10 (раздельно)](#33-схема-a--raid1--raid10-раздельно)
- [3.4. Схема «B» — один RAID10 на всё (рекомендуется)](#34-схема-b--один-raid10-на-всё-рекомендуется)
- [3.5. Установка Proxmox VE](#35-установка-proxmox-ve)
4. [Фаза 2 — Настройка IOMMU и VFIO (Вариант А)](#4-фаза-2--настройка-iommu-и-vfio-вариант-а)
5. [Фаза 3 — Создание виртуальных машин](#5-фаза-3--создание-виртуальных-машин)
6. [Фаза 4 — Установка Windows 10](#6-фаза-4--установка-windows-10)
7. [Фаза 5 — GPU и USB Passthrough (Вариант А)](#7-фаза-5--gpu-и-usb-passthrough-вариант-а)
8. [Фаза 6 — Настройка RDP (Вариант Б)](#8-фаза-6--настройка-rdp-вариант-б)
9. [Фаза 7 — Миграция программ](#9-фаза-7--миграция-программ)
10. [Фаза 8 — Резервное копирование](#10-фаза-8--резервное-копирование)
11. [Фаза 9 — Тестирование и ввод в эксплуатацию](#11-фаза-9--тестирование-и-ввод-в-эксплуатацию)
12. [Устранение неполадок](#12-устранение-неполадок)
13. [Справочник конфигураций ВМ](#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. Необходимые образы и файлы
- ISO Proxmox VE 8.x — [proxmox.com/downloads](https://www.proxmox.com/en/downloads)
- ISO Windows 10
- VirtIO drivers — [fedoraproject.org/wiki/Windows_Virtio_Drivers](https://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):
```bash
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, выполнить:
```bash
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
```
Скрипт проверки IOMMU groups:
```bash
#!/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
```
```bash
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](TZ-proxmox-konsolidaciya.md#31-подсистема-хранения-общая-для-обоих-вариантов).
### 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 или после установки ОС:
```bash
# После установки 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 | 36 | Хранилище `data-db``scsi1` ВМ (БД и данные) | ~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
```bash
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 + лифты, 60–80 ГБ | БД (если есть), по необходимости |
```bash
# Пример 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 + все диски ВМ + все БД
Диски 58 → 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
```bash
# 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:` внутри одного виртуального диска).
```bash
# Пример 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 ТБ |
```bash
# 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
#### Общие шаги (обе схемы)
1. Загрузиться с ISO Proxmox VE 8.x.
2. На экране выбора диска выбрать **VD0** (единственный или первый виртуальный диск 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. Завершить установку, перезагрузить.
#### Дополнительно для схемы A: подключение VD1 (RAID10) под БД
Выполнить **после** установки Proxmox, если выбрана схема A:
```bash
# 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 этот шаг **не выполняется**.
#### Первичная настройка хоста
```bash
# Обновление системы
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 (опционально)
```bash
# Схема 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
```bash
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"
```
Применить:
```bash
update-grub
```
### 4.3. Модули ядра
```bash
cat >> /etc/modules << 'EOF'
vfio
vfio_iommu_type1
vfio_pci
EOF
```
### 4.4. Blacklist GPU-драйверов на хосте
```bash
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 видеокарт:
```bash
lspci -nn | grep -i vga
# Пример AMD RX 550: 1002:699f
# Пример NVIDIA GT 1030: 10de:1d01
```
```bash
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.
```bash
update-initramfs -u -k all
reboot
```
### 4.6. Проверка после перезагрузки
```bash
dmesg | grep -i vfio
lspci -k | grep -A3 -i vga
# Должно быть: Kernel driver in use: vfio-pci
```
### 4.7. AMD reset-bug (при необходимости)
Если GPU не перезапускается после shutdown ВМ:
```bash
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)
```bash
# Создание 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:
```bash
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:
```bash
qm agent 101 ping
# Expected: no error
```
### 6.3. Базовая настройка Windows
На каждой ВМ:
```powershell
# Имя компьютера (пример для 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
```bash
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:**
```bash
# 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:
```bash
qm set 101 --cpu host,hidden=1,flags=+pcid
```
### 7.3. Проброс USB-ключа «Меркурия» (VM-101)
**По Vendor/Device ID (рекомендуется):**
```bash
# Узнать ID
lsusb | grep -i hasp
# Пример: 0529:0001
qm set 101 --usb1 host=0529:0001,usb3=1
```
**Passthrough USB-контроллера (если ключ нестабилен):**
```bash
# Найти 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):
```bash
# 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:
```bash
# На хосте, когда 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
```
3. Пропатчить ROM ([nvidia-kvm-patcher](https://github.com/sk1080/nvidia-kvm-patcher)).
4. Указать ROM в конфиге:
```bash
qm set 101 --hostpci0 01:00,pcie=1,x-vga=1,rombar=1,romfile=local:snippets/gt1030.rom
```
### 7.7. Проверка passthrough
```bash
# Перезагрузка хоста
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 на каждой ВМ
```powershell
# Включить 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)
```bash
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`.
Запуск:
```powershell
# Монитор 1
mstsc.exe "C:\RDP\scada.rdp" /f
# Монитор 2 и 3 — запустить аналогично, перетащить окна на нужные мониторы
```
### 8.5. Автозапуск RDP-сессий (опционально)
```powershell
# Поместить ярлыки в shell:startup
Copy-Item "C:\RDP\*.rdp" "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\"
```
### 8.6. Проверка сети
```powershell
# С клиентского ПК
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 (перенос образа)
```bash
# На исходном ПК — 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
```bash
# Ручной бэкап
vzdump 101 102 103 --mode snapshot --compress zstd --storage nas-backup
# Проверка
ls -lh /mnt/pve/nas-backup/dump/
```
### 10.3. Restore из бэkaпа
```bash
# Список бэкапов
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
```bash
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 не стартует
```bash
# Проверить лог
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-ключ не определяется
```bash
# На хосте — виден ли ключ
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 не отдаётся:
```bash
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. Полезные команды
```bash
# Статус всех 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
```
---
## Связанные документы
- [Техническое задание](TZ-proxmox-konsolidaciya.md)
- [Proxmox PCI Passthrough Wiki](https://pve.proxmox.com/wiki/PCI_Passthrough)
- [Proxmox USB Passthrough](https://pve.proxmox.com/wiki/USB_Physical_Port_Mapping)
- [IOMMU Groups Database](https://iommu.info/)