docs: добавить ТЗ и инструкцию развёртывания Proxmox
Документация по консолидации СКАДА, ЛЭРС, лифтов и Меркурия на единый сервер Proxmox VE — два варианта (GPU passthrough и RDP). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
# SKADA — документация по консолидации серверов
|
||||||
|
|
||||||
|
Проект переноса систем **СКАДА**, **ЛЭРС**, **управление лифтами** и **«Меркурий»** с трёх отдельных компьютеров на единый сервер **Proxmox VE**.
|
||||||
|
|
||||||
|
## Документы
|
||||||
|
|
||||||
|
| Документ | Описание |
|
||||||
|
|----------|----------|
|
||||||
|
| [Техническое задание](docs/TZ-proxmox-konsolidaciya.md) | Цели, два варианта архитектуры (GPU passthrough / RDP), требования к железу, критерии приёмки |
|
||||||
|
| [Развёртывание и настройка](docs/razvertyvanie-proxmox.md) | Пошаговая инструкция: Proxmox, IOMMU, passthrough, RDP, миграция, бэкапы |
|
||||||
|
|
||||||
|
## Варианты реализации
|
||||||
|
|
||||||
|
- **Вариант А** — сервер в комнате диспетчеров, 3 GPU passthrough, 3 монитора
|
||||||
|
- **Вариант Б** — сервер в серверной, доступ к 3 VM по RDP с клиентского ПК
|
||||||
|
|
||||||
|
## Состав виртуальных машин
|
||||||
|
|
||||||
|
| VM | Системы |
|
||||||
|
|----|---------|
|
||||||
|
| VM-01 | СКАДА + «Меркурий» |
|
||||||
|
| VM-02 | ЛЭРС Учёт |
|
||||||
|
| VM-03 | Управление лифтами |
|
||||||
@@ -0,0 +1,315 @@
|
|||||||
|
# Техническое задание
|
||||||
|
|
||||||
|
## Консолидация систем СКАДА, ЛЭРС, лифты и «Меркурий» на единый сервер Proxmox VE
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| Версия | 1.0 |
|
||||||
|
| Дата | 09.07.2026 |
|
||||||
|
| Статус | Проектная документация |
|
||||||
|
| Связанный документ | [Развёртывание и настройка](razvertyvanie-proxmox.md) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Цель проекта
|
||||||
|
|
||||||
|
Перенести с трёх отдельных компьютеров (Windows 10, Intel Core i5-7400, 8 ГБ RAM) на **один физический сервер** следующие системы:
|
||||||
|
|
||||||
|
| № | Система | Текущее размещение | Монитор |
|
||||||
|
|---|---------|-------------------|---------|
|
||||||
|
| 1 | СКАДА + «Меркурий» (USB-ключ защиты) | один ПК | 1 |
|
||||||
|
| 2 | ЛЭРС Учёт | отдельный ПК | 2 |
|
||||||
|
| 3 | Управление лифтами | отдельный ПК | 3 |
|
||||||
|
|
||||||
|
### 1.1. Требования
|
||||||
|
|
||||||
|
- три системы доступны оператору **одновременно**;
|
||||||
|
- изоляция систем друг от друга (падение одной не останавливает остальные);
|
||||||
|
- сохранение привычной работы оператора;
|
||||||
|
- резервное копирование и возможность восстановления;
|
||||||
|
- замена MOXA на другой контроллер — **отдельная фаза** (раздел 10).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Исходные данные
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| ОС на всех системах | Windows 10 |
|
||||||
|
| Мониторы | 3 шт., рядом (~1 м друг от друга) |
|
||||||
|
| USB-ключ защиты | только «Меркурий» (Guardant / HASP / Rutoken) |
|
||||||
|
| Связь со счётчиками | MOXA (Ethernet → COM), замена планируется позже |
|
||||||
|
| Текущая нагрузка | i5-7400, 8 ГБ RAM на каждый ПК |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Целевая архитектура (общая для обоих вариантов)
|
||||||
|
|
||||||
|
На гипервизоре **Proxmox VE 8.x** создаются **3 виртуальные машины**:
|
||||||
|
|
||||||
|
| ВМ | Назначение | vCPU | RAM | Диск |
|
||||||
|
|----|-----------|------|-----|------|
|
||||||
|
| VM-01 | СКАДА + «Меркурий» | 4–6 | 16–20 ГБ | 120–200 ГБ |
|
||||||
|
| VM-02 | ЛЭРС Учёт | 4 | 12–16 ГБ | 80–120 ГБ |
|
||||||
|
| VM-03 | Управление лифтами | 4 | 12–16 ГБ | 80–120 ГБ |
|
||||||
|
|
||||||
|
**Ресурсы хоста Proxmox:** 4–6 vCPU, 8–12 ГБ RAM (остаток от 64 ГБ ОЗУ).
|
||||||
|
|
||||||
|
**Хранилище:** ZFS mirror из 2× NVMe SSD на хосте.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Вариант А — GPU Passthrough (сервер в комнате диспетчеров)
|
||||||
|
|
||||||
|
### 4.1. Описание
|
||||||
|
|
||||||
|
Сервер располагается **рядом с рабочим местом оператора** (расстояние до мониторов 1–2 м). К каждой ВМ пробрасываются:
|
||||||
|
|
||||||
|
- отдельная видеокарта → свой монитор;
|
||||||
|
- отдельный комплект клавиатура/мышь;
|
||||||
|
- на VM-01: USB-ключ «Меркурия» и MOXA/конвертер (до замены).
|
||||||
|
|
||||||
|
Оператор работает **как на трёх отдельных компьютерах**.
|
||||||
|
|
||||||
|
### 4.2. Схема
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ Сервер (Proxmox VE) — комната диспетчеров │
|
||||||
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||||
|
│ │ VM-01 │ │ VM-02 │ │ VM-03 │ │
|
||||||
|
│ │СКАДА+ │ │ ЛЭРС │ │ Лифты │ │
|
||||||
|
│ │Меркурий │ │ │ │ │ │
|
||||||
|
│ └──┬───┬───┘ └──┬───┬───┘ └──┬───┬───┘ │
|
||||||
|
│ │GPU│USB │GPU│USB │GPU│USB │
|
||||||
|
└─────┼───┼─────────┼───┼─────────┼───┼───────────────────────┘
|
||||||
|
│ │ │ │ │ │
|
||||||
|
Мон.1 КМ1 Мон.2 КМ2 Мон.3 КМ3
|
||||||
|
│
|
||||||
|
USB-ключ + MOXA (VM-01)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3. Требования к оборудованию
|
||||||
|
|
||||||
|
> **Важно.** Абсолютной гарантии совместимости passthrough не существует — результат зависит от связки CPU + материнская плата + BIOS + GPU. Перед закупкой проверять IOMMU groups на [iommu.info](https://iommu.info/) и обсуждения на [форуме Proxmox](https://forum.proxmox.com/).
|
||||||
|
|
||||||
|
| Компонент | Рекомендация | Комментарий |
|
||||||
|
|-----------|-------------|-------------|
|
||||||
|
| CPU | AMD Ryzen 9 5900X (12C/24T) или Ryzen 9 7900 | IOMMU из коробки; Intel — только с VT-d |
|
||||||
|
| Материнская плата | ASUS ProArt X570-CREATOR WIFI (AM4) или ASUS ProArt X870E-CREATOR WIFI (AM5) | Хорошие IOMMU groups по отзывам сообщества Proxmox |
|
||||||
|
| Альтернатива (3 GPU) | ASRock X570 Taichi, ASUS WS X570-ACE, Supermicro H12SSL-i | Нужно 3 физических PCIe ×16 и проверка IOMMU groups |
|
||||||
|
| RAM | 64 ГБ DDR4/DDR5 | ECC — желательно на серверных платах |
|
||||||
|
| Диски | 2× NVMe 1–2 ТБ (Samsung 990 Pro, Kingston KC3000) | ZFS mirror на хосте |
|
||||||
|
| GPU ×3 | AMD RX 550 4GB Low Profile (**предпочтительно**) | Стабильнее NVIDIA; возможен AMD reset-bug → модуль `vendor-reset` |
|
||||||
|
| GPU (альтернатива) | NVIDIA GT 1030 Low Profile ×3 | Часто Code 43 → патч VBIOS, `hidden=1`, `cpu: host` |
|
||||||
|
| GPU хоста | Встроенная iGPU или отдельная служебная | Proxmox не должен использовать passthrough-GPU |
|
||||||
|
| БП | 750–850 Вт, 80+ Gold | |
|
||||||
|
| UPS | 1000–1500 ВА, line-interactive | Сервер + мониторы |
|
||||||
|
| Сеть | 2× Gigabit | Отделение технологической сети (VLAN) |
|
||||||
|
| USB | 3+ независимых USB-контроллера или PCIe USB-карты | Надёжный passthrough КМ и USB-ключа |
|
||||||
|
|
||||||
|
#### Рекомендуемая конфигурация
|
||||||
|
|
||||||
|
| Позиция | Модель |
|
||||||
|
|---------|--------|
|
||||||
|
| CPU | AMD Ryzen 9 5900X |
|
||||||
|
| MB | ASUS ProArt X570-CREATOR WIFI |
|
||||||
|
| RAM | 64 ГБ DDR4-3200 (2×32) |
|
||||||
|
| SSD | 2× Samsung 990 Pro 1TB |
|
||||||
|
| GPU ×3 | Sapphire RX 550 4GB LP |
|
||||||
|
| БП | be quiet! Straight Power 11 850W |
|
||||||
|
| UPS | APC Smart-UPS 1500VA |
|
||||||
|
|
||||||
|
**Ориентир стоимости:** 150–220 тыс. ₽ (без мониторов и периферии).
|
||||||
|
|
||||||
|
#### Настройки BIOS (обязательно)
|
||||||
|
|
||||||
|
| Параметр | Intel | AMD |
|
||||||
|
|----------|-------|-----|
|
||||||
|
| Виртуализация | VT-x ON | SVM ON |
|
||||||
|
| IOMMU | VT-d ON | IOMMU ON (не Auto) |
|
||||||
|
| Режим загрузки | UEFI, CSM OFF | UEFI, CSM OFF |
|
||||||
|
| Above 4G Decoding | ON | ON |
|
||||||
|
| Resizable BAR | OFF (для NVIDIA) | по необходимости |
|
||||||
|
| Primary Display | iGPU (если есть) | iGPU (если есть) |
|
||||||
|
|
||||||
|
### 4.4. Плюсы и минусы
|
||||||
|
|
||||||
|
| Плюсы | Минусы |
|
||||||
|
|-------|--------|
|
||||||
|
| Полная автономность каждого рабочего места | Сложная настройка passthrough |
|
||||||
|
| Нет зависимости от сети для отображения | Сервер в комнате диспетчеров (шум, пыль) |
|
||||||
|
| Минимальная задержка ввода | Жёсткие требования к плате (3 PCIe ×16) |
|
||||||
|
| Привычно для оператора | NVIDIA может потребовать патч VBIOS |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Вариант Б — RDP (сервер в серверной)
|
||||||
|
|
||||||
|
### 5.1. Описание
|
||||||
|
|
||||||
|
Сервер располагается в **серверной / шкафу**. На рабочем месте диспетчеров — **клиентский ПК** с 3 мониторами. Оператор подключается к каждой ВМ по **RDP** в полноэкранном режиме на свой монитор.
|
||||||
|
|
||||||
|
### 5.2. Схема
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────────────┐ Gigabit LAN ┌─────────────────────┐
|
||||||
|
│ Серверная │◄────────────────────────────►│ Комната диспетчеров│
|
||||||
|
│ Proxmox VE │ (VLAN) │ Клиентский ПК │
|
||||||
|
│ ┌────┐┌────┐┌────┐ │ │ Монитор 1 → RDP VM-01
|
||||||
|
│ │VM01││VM02││VM03│ │ │ Монитор 2 → RDP VM-02
|
||||||
|
│ └──┬─┘└──┬─┘└──┬─┘ │ │ Монитор 3 → RDP VM-03
|
||||||
|
│ 1× GPU (админ) │ └─────────────────────┘
|
||||||
|
└──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3. Требования к оборудованию
|
||||||
|
|
||||||
|
#### Сервер (серверная)
|
||||||
|
|
||||||
|
| Компонент | Рекомендация |
|
||||||
|
|-----------|-------------|
|
||||||
|
| CPU | AMD Ryzen 9 5900X / Intel Core i7-13700 (12+ ядер) |
|
||||||
|
| MB | Любая с VT-d/IOMMU |
|
||||||
|
| RAM | 64 ГБ |
|
||||||
|
| SSD | 2× NVMe 1TB, ZFS mirror |
|
||||||
|
| GPU | 1× GT 1030 или iGPU — только для консоли хоста |
|
||||||
|
| NIC | 2× Gigabit (Intel I210/I225 предпочтительнее Realtek) |
|
||||||
|
| UPS | Обязателен |
|
||||||
|
|
||||||
|
#### Клиентское рабочее место
|
||||||
|
|
||||||
|
| Компонент | Рекомендация |
|
||||||
|
|-----------|-------------|
|
||||||
|
| ПК | Intel NUC / Beelink / офисный mini-PC (i5, 8 ГБ RAM) |
|
||||||
|
| Мониторы | 3× существующих |
|
||||||
|
| КМ | 1 комплект (управление клиентом) |
|
||||||
|
| Сеть | Gigabit, задержка ≤5 мс до сервера |
|
||||||
|
| ОС | Windows 10/11 Pro |
|
||||||
|
|
||||||
|
#### Сеть
|
||||||
|
|
||||||
|
| Параметр | Требование |
|
||||||
|
|----------|-----------|
|
||||||
|
| Пропускная способность | ≥1 Gbps |
|
||||||
|
| Задержка | ≤5 мс |
|
||||||
|
| VLAN | Отделить SCADA/лифты от офисной сети |
|
||||||
|
| Firewall | RDP (TCP 3389) только клиент ↔ сервер |
|
||||||
|
|
||||||
|
### 5.4. USB-ключ «Меркурия»
|
||||||
|
|
||||||
|
USB-ключ остаётся **на сервере**, пробрасывается в VM-01. MOXA (до замены) работает по **Ethernet** — USB passthrough для MOXA не требуется.
|
||||||
|
|
||||||
|
### 5.5. Лицензирование RDP
|
||||||
|
|
||||||
|
Windows 10 Pro допускает **1 одновременную RDP-сессию** на ВМ. Для данного проекта достаточно: клиент открывает 3 отдельных RDP-подключения к 3 разным ВМ.
|
||||||
|
|
||||||
|
### 5.6. Плюсы и минусы
|
||||||
|
|
||||||
|
| Плюсы | Минусы |
|
||||||
|
|-------|--------|
|
||||||
|
| Сервер в серверной (тише, безопаснее) | Зависимость от сети |
|
||||||
|
| Не нужны 3 GPU и сложный passthrough | Клиентский ПК — дополнительная точка отказа |
|
||||||
|
| Проще железо и поддержка | Задержка ввода (обычно незаметна в LAN) |
|
||||||
|
| Дешевле | При обрыве сети — нет доступа к системам |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Сравнение вариантов
|
||||||
|
|
||||||
|
| Критерий | Вариант А (GPU) | Вариант Б (RDP) |
|
||||||
|
|----------|----------------|-----------------|
|
||||||
|
| Расположение сервера | Комната диспетчеров | Серверная |
|
||||||
|
| Сложность внедрения | Высокая | Средняя |
|
||||||
|
| Стоимость железа | Выше (+3 GPU) | Ниже |
|
||||||
|
| Надёжность отображения | Не зависит от сети | Зависит от LAN |
|
||||||
|
| Изоляция систем | Полная | Полная |
|
||||||
|
| USB-ключ «Меркурия» | Passthrough | Passthrough |
|
||||||
|
| **Рекомендация** | Сервер рядом с мониторами | Сервер в серверной |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. План работ (этапы)
|
||||||
|
|
||||||
|
| Фаза | Содержание | Срок |
|
||||||
|
|------|-----------|------|
|
||||||
|
| 0 | Инвентаризация, бэкапы, выбор варианта | 3–5 дней |
|
||||||
|
| 1 | Закупка и сборка железа, проверка IOMMU (Вариант А) | 3–7 дней |
|
||||||
|
| 2 | Установка Proxmox VE | 1 день |
|
||||||
|
| 3 | Создание 3 ВМ, установка Windows 10 | 1–2 дня |
|
||||||
|
| 4 | Миграция СКАДА, «Меркурия», ЛЭРС, лифтов | 2–5 дней |
|
||||||
|
| 5 | Настройка passthrough (А) или RDP (Б) | 1–2 дня |
|
||||||
|
| 6 | Настройка резервного копирования | 0.5 дня |
|
||||||
|
| 7 | Параллельная эксплуатация и тесты | 7–14 дней |
|
||||||
|
| 8 | Ввод в промышленную эксплуатацию | 1 день |
|
||||||
|
|
||||||
|
Подробные команды и процедуры — в документе [Развёртывание и настройка](razvertyvanie-proxmox.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Критерии приёмки
|
||||||
|
|
||||||
|
| № | Критерий | Вариант А | Вариант Б |
|
||||||
|
|---|----------|-----------|-----------|
|
||||||
|
| 1 | 3 системы работают одновременно | ✓ | ✓ |
|
||||||
|
| 2 | Каждая система на своём мониторе | ✓ | ✓ |
|
||||||
|
| 3 | USB-ключ «Меркурия» определяется ПО | ✓ | ✓ |
|
||||||
|
| 4 | Опрос счётчиков через MOXA работает | ✓ | ✓ |
|
||||||
|
| 5 | Reboot одной ВМ не влияет на другие | ✓ | ✓ |
|
||||||
|
| 6 | Reboot хоста → autostart всех ВМ ≤10 мин | ✓ | ✓ |
|
||||||
|
| 7 | Ежедневный vzdump-бэкап выполняется | ✓ | ✓ |
|
||||||
|
| 8 | Restore из бэкапа проверен | ✓ | ✓ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Риски и меры
|
||||||
|
|
||||||
|
| Риск | Вероятность | Мера |
|
||||||
|
|------|-------------|------|
|
||||||
|
| Code 43 (NVIDIA passthrough) | Средняя | AMD RX 550; патч VBIOS |
|
||||||
|
| IOMMU groups «склеены» | Средняя | Проверка до покупки; ACS override (крайний случай) |
|
||||||
|
| USB-ключ нестабилен в VM | Низкая | Passthrough USB-контроллера целиком |
|
||||||
|
| AMD GPU reset-bug | Средняя | Модуль `vendor-reset` |
|
||||||
|
| Единая точка отказа (сервер) | Высокая | UPS + vzdump + процедура restore ≤4 ч |
|
||||||
|
| Обрыв сети (Вариант Б) | Средняя | Выделенный VLAN, резервный клиент |
|
||||||
|
| Windows Update перезагрузка | Средняя | Отложенные обновления, maintenance window |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Будущая фаза: замена MOXA на Меркурий-220/221
|
||||||
|
|
||||||
|
> **Статус:** не входит в текущий объём работ. Выполняется после стабилизации основной системы.
|
||||||
|
|
||||||
|
| № | Действие |
|
||||||
|
|---|----------|
|
||||||
|
| 10.1 | Определить модель: **Меркурий-221 (USB)** — предпочтительно |
|
||||||
|
| 10.2 | Подключить к серверу, passthrough в VM-01 по vendor:product ID |
|
||||||
|
| 10.3 | Установить драйвер USB-COM в Windows VM-01 |
|
||||||
|
| 10.4 | Перенастроить «Меркурий»: COM-порт, скорость, адреса счётчиков |
|
||||||
|
| 10.5 | Параллельный опрос (MOXA + 221) 3–7 дней |
|
||||||
|
| 10.6 | Переключение на 221, отключение MOXA |
|
||||||
|
| 10.7 | Документирование новой схемы |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Рекомендация по выбору варианта
|
||||||
|
|
||||||
|
| Условие | Вариант |
|
||||||
|
|---------|---------|
|
||||||
|
| Сервер может стоять в комнате диспетчеров | **А** (GPU passthrough) |
|
||||||
|
| Сервер только в серверной | **Б** (RDP) |
|
||||||
|
| Нет опыта с passthrough / ограничен бюджет | **Б** |
|
||||||
|
| Критична минимальная задержка и автономность | **А** |
|
||||||
|
| Не уверены в совместимости железа | Начать с **Б** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Передаваемая документация
|
||||||
|
|
||||||
|
После внедрения подготовить:
|
||||||
|
|
||||||
|
1. Схема сети (IP, VLAN, порты).
|
||||||
|
2. Таблица passthrough (GPU ↔ VM, USB ↔ VM).
|
||||||
|
3. Учётные записи и пароли (в защищённом хранилище).
|
||||||
|
4. Инструкция: перезагрузка сервера, restore из бэкапа.
|
||||||
|
5. Журнал изменений.
|
||||||
@@ -0,0 +1,882 @@
|
|||||||
|
# Развёртывание и настройка Proxmox VE
|
||||||
|
|
||||||
|
## Консолидация СКАДА, ЛЭРС, лифты, «Меркурий»
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| Версия | 1.0 |
|
||||||
|
| Дата | 09.07.2026 |
|
||||||
|
| Связанный документ | [Техническое задание](TZ-proxmox-konsolidaciya.md) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Содержание
|
||||||
|
|
||||||
|
1. [Предварительные требования](#1-предварительные-требования)
|
||||||
|
2. [Фаза 0 — Подготовка](#2-фаза-0--подготовка)
|
||||||
|
3. [Фаза 1 — Установка Proxmox VE](#3-фаза-1--установка-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
|
||||||
|
|
||||||
|
### 3.1. Установка
|
||||||
|
|
||||||
|
1. Загрузиться с ISO Proxmox VE 8.x.
|
||||||
|
2. Target disk: ZFS (RAID1) — выбрать 2 NVMe.
|
||||||
|
3. Задать:
|
||||||
|
- Hostname: `pve-scada`
|
||||||
|
- IP: `192.168.10.10/24`
|
||||||
|
- Gateway, DNS — по сети заказчика
|
||||||
|
4. Завершить установку, перезагрузить.
|
||||||
|
|
||||||
|
### 3.2. Первичная настройка хоста
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Обновление системы
|
||||||
|
apt update && apt full-upgrade -y
|
||||||
|
|
||||||
|
# Часовой пояс (пример: Москва)
|
||||||
|
timedatectl set-timezone Europe/Moscow
|
||||||
|
|
||||||
|
# Проверка версии
|
||||||
|
pveversion -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3. Загрузка ISO в хранилище
|
||||||
|
|
||||||
|
Через веб-интерфейс: **Datacenter → pve-scada → local → ISO Images → Upload**
|
||||||
|
|
||||||
|
Загрузить:
|
||||||
|
|
||||||
|
- `Win10_22H2_ru.iso`
|
||||||
|
- `virtio-win-0.1.xxxx.iso`
|
||||||
|
|
||||||
|
### 3.4. Настройка хранилища (если нужен NAS для бэкапов)
|
||||||
|
|
||||||
|
**Datacenter → Storage → Add → NFS/CIFS** — указать путь к NAS для vzdump.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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 — Создание виртуальных машин
|
||||||
|
|
||||||
|
### 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-zfs:1,efitype=4m,pre-enrolled-keys=0
|
||||||
|
|
||||||
|
# Системный диск
|
||||||
|
qm set 101 --scsi0 local-zfs:200,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-zfs:1,efitype=4m,pre-enrolled-keys=0
|
||||||
|
qm set 102 --scsi0 local-zfs:120,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-zfs:1,efitype=4m,pre-enrolled-keys=0
|
||||||
|
qm set 103 --scsi0 local-zfs:120,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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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 | Bus | SCSI, VirtIO, SSD, Discard |
|
||||||
|
| 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. Параллельная эксплуатация
|
||||||
|
|
||||||
|
- Срок: **7–14 дней**.
|
||||||
|
- Старые ПК остаются включёнными, но не используются оператором.
|
||||||
|
- При проблемах — откат на старые машины.
|
||||||
|
|
||||||
|
### 11.3. Ввод в эксплуатацию
|
||||||
|
|
||||||
|
1. Отключить старые ПК (хранить 2 недели).
|
||||||
|
2. Передать документацию оператору и администратору.
|
||||||
|
3. Зафиксировать дату ввода в журнале.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Устранение неполадок
|
||||||
|
|
||||||
|
### 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/)
|
||||||
Reference in New Issue
Block a user