Files
SKADA/docs/razvertyvanie-proxmox.md
PTah 471951d296 docs(TZ): HPE Smart Array P816i (4GB+FBWC)
Добавлен блок HPE ProLiant, FBWC, smartpqi/ssacli; конфигурация DL380 Gen10.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 15:01:27 +10:00

1403 lines
53 KiB
Markdown
Raw Permalink 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.5 |
| Дата | 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)
- [3.6. Мониторинг RAID](#36-мониторинг-raid)
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--миграция-программ)
- [9.2. Восстановление из Veeam Agent](#92-восстановление-из-veeam-agent)
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
#### Предварительно: создание VD в MegaRAID
Перед установкой Proxmox создайте виртуальный диск (VD) в BIOS/UEFI контроллера **MegaRAID**, **PERC** или **HPE Smart Array** (см. §3.23.4). Политики Write Back и Read Ahead — в §3.1.
#### Установка на аппаратный RAID (профиль Server Room, Вариант Б)
1. Загрузиться с ISO Proxmox VE 8.x.
2. В инсталляторе выбрать созданный **VD** (MegaRAID / PERC / HPE Smart Array).
3. **Filesystem:** **ext4** (или **xfs** — допустимая альтернатива).
4. **Storage:** **LVM-thin** — Proxmox автоматически создаст `local-lvm` для дисков ВМ.
5. **Не выбирать ZFS** при аппаратном RAID.
6. Задать hostname `pve-scada`, IP `192.168.10.10/24`, gateway, DNS.
7. Завершить установку, перезагрузить.
#### Установка на ZFS mirror (профиль Dispatch Tower, Вариант А)
Если tower-сборка **без MegaRAID** (2× NVMe в AHCI):
1. Загрузиться с ISO Proxmox VE 8.x.
2. Target disk: **ZFS (RAID1)** — выбрать 2 NVMe.
3. Задать hostname, IP, gateway, DNS.
4. Завершить установку.
> ZFS — только для tower без аппаратного RAID. На Dell PERC / HPE Smart Array / MegaRAID — **ext4 + LVM-thin**.
#### Дополнительно для схемы разбивки 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
```
---
### 3.6. Мониторинг RAID
> Применимо для **аппаратного RAID** (MegaRAID / PERC / HPE Smart Array). Для ZFS mirror на tower — `zpool status`, `zpool scrub`.
#### Установка утилит управления
**Broadcom / LSI MegaRAID (Supermicro, большинство сборок):**
```bash
# StorCLI — скачать с сайта Broadcom, установить .deb
# https://www.broadcom.com/support/download-search
dpkg -i storcli_*.deb
# Проверка
storcli64 show
```
**Dell PERC (H755, H730p, H750):**
```bash
# perccli — скачать с dell.com/support
perccli64 /c0 show
perccli64 /c0/vall show
perccli64 /c0/cv show
```
**HPE Smart Array (P816i, P408i, P822):**
```bash
# ssacli — HPE Smart Storage Administrator CLI
# https://www.hpe.com/support — ssacli для ProLiant Gen10
ssacli ctrl all show detail
ssacli ctrl slot=0 show config
ssacli ctrl slot=0 pd all show
ssacli ctrl slot=0 array all show
```
**Broadcom MegaRAID / xFusion (9460, 9560):**
```bash
# StorCLI — Broadcom и rebadged xFusion
dpkg -i storcli_*.deb
storcli64 /c0 show
storcli64 /c0/cv show
```
**Устаревшие контроллеры:**
```bash
apt install megaclisas-status # MegaCLI, LSI 9271 и старше
```
#### Ежедневная проверка состояния
```bash
# Общий статус контроллера
storcli64 /c0 show
# Виртуальные диски (массивы)
storcli64 /c0/vall show
# Физические диски
storcli64 /c0/eall/sall show
# CacheVault / BBU
storcli64 /c0/cv show
storcli64 /c0/bbu show
```
**Ожидаемые значения:**
| Параметр | Норма |
|----------|-------|
| Controller Status | Optimal |
| VD State | Optimal |
| PD State | Online |
| CacheVault / BBU | Optimal, Charged |
| Write Policy | WriteBack (WB) |
#### События, требующие реакции
| Событие | Действие |
|---------|----------|
| **Degraded** | Проверить hot spare / rebuild; не выключать сервер |
| **Rebuild in progress** | Снизить нагрузку; дождаться завершения |
| **Predictive Failure** | Заменить диск; hot spare подхватит автоматически |
| **CacheVault Failed / BBU Failed** | **Срочно:** Write Policy → Write Through; заменить CVPM/BBU |
| **Foreign Config** | Импортировать или очистить конфигурацию в MegaRAID BIOS |
#### Оповещения (рекомендуется настроить)
- degraded array;
- predictive failure диска;
- CacheVault / BBU charge low или failed;
- rebuild completed / failed.
**Варианты реализации:**
1. **Cron + email** — скрипт проверки `storcli64 /c0 show` и парсинг статуса.
2. **Zabbix / Prometheus** — SNMP или script check для MegaRAID.
3. **iDRAC / iLO** (Dell/HPE) — встроенные алерты по дискам и RAID.
Пример cron-скрипта (`/etc/cron.daily/raid-check`):
```bash
#!/bin/bash
STATUS=$(storcli64 /c0 show | grep -i "Status")
if echo "$STATUS" | grep -ivq "Optimal"; then
echo "RAID ALERT on $(hostname): $STATUS" | mail -s "RAID degraded" admin@example.com
fi
```
#### Dell PERC — эквивалентные команды
```bash
perccli64 /c0 show
perccli64 /c0/vall show
perccli64 /c0/eall/sall show
perccli64 /c0/cv show
```
---
## 4. Фаза 2 — Настройка IOMMU и VFIO (Вариант А)
> Для **Варианта Б (RDP)** этот раздел можно пропустить, достаточно базовой установки Proxmox.
### 4.1. BIOS
| Параметр | Значение |
|----------|----------|
| Intel VT-x / AMD SVM | ON |
| Intel VT-d / AMD IOMMU | ON |
| Boot Mode | UEFI |
| CSM / Legacy | OFF |
| Above 4G Decoding | ON |
| Resizable BAR | OFF (NVIDIA) |
| Primary Display | iGPU |
### 4.2. GRUB
```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. Восстановление из Veeam Agent
> **Veeam Agent** создаёт бэкап **физической** Windows. Готового диска для импорта в Proxmox нет — восстановление выполняется через **Veeam Recovery Media** в новую ВМ.
#### Когда использовать
| Подход | Когда |
|--------|-------|
| **Veeam Agent → bare metal restore в ВМ** | Нужно быстро поднять «как было», есть рабочие `.vbk` |
| **Чистая установка + restore БД** (§9.3) | **Предпочтительно** для стабильной работы на VirtIO |
Перед миграцией всех систем — **обязательно** протестировать restore **одной** ВМ (например, ЛЭРС).
#### Что понадобится
- Рабочие цепочки бэкапов Veeam Agent (`.vbk` / `.vib`) на NAS или внешнем носителе.
- ISO **Veeam Recovery Media** (создаётся в консоли Veeam Agent на исходном ПК или отдельной машине).
- Доступ Proxmox к репозиторию бэкапов по **сети** (SMB/NFS) или копия на `local` ISO/storage.
- Лицензия с **Recovery to dissimilar hardware** / **Universal Restore** (если есть) — упрощает первую загрузку.
#### Подготовка ВМ в Proxmox
Создать пустую ВМ под восстанавливаемую систему (пример — VM-102, ЛЭРС):
| Параметр | Значение | Зачем |
|----------|----------|-------|
| Machine | q35 | Совместимость с Win10 |
| BIOS | **OVMF (UEFI)** | Если исходный Win10 установлен в UEFI (обычно) |
| Disk | SATA или SCSI, **≥ размера исходного диска** | Место под restore |
| Disk bus (первая попытка) | **SATA** | Меньше проблем с драйверами при restore |
| Network | VirtIO или E1000 | E1000 — если сеть нужна уже в Recovery Media |
| CD-ROM | Veeam Recovery Media ISO | Загрузка для restore |
```bash
# Пример: подготовка VM-102 под restore (диск 120 ГБ, SATA)
qm set 102 --scsi0 local-lvm:120,cache=writeback,discard=on,ssd=1
qm set 102 --scsihw virtio-scsi-single
# При BSOD после restore — временно переключить на SATA:
# qm set 102 --scsi0 none
# qm set 102 --sata0 local-lvm:120,ssd=1
```
#### Пошаговое восстановление
1. Загрузить ISO **Veeam Recovery Media** в CD-ROM ВМ, boot order: CD → disk.
2. Запустить ВМ, войти в мастер восстановления Veeam.
3. Указать расположение бэкапа (путь к `.vbk` на NAS/SMB).
4. Выбрать **Entire computer restore** / восстановление всего компьютера.
5. Целевой диск — виртуальный диск ВМ (единственный).
6. Включить **Recovery to dissimilar hardware** / **Universal Restore** (если доступно).
7. Дождаться завершения restore, отключить ISO Recovery Media.
8. Boot order: disk first → перезагрузить ВМ.
#### После первой загрузки Windows
1. Если загрузка успешна — установить **QEMU Guest Agent** и **VirtIO drivers** с `virtio-win.iso`:
- NetKVM (сеть)
- vioscsi (если переключите диск на VirtIO SCSI)
2. При необходимости сменить контроллер диска на **VirtIO SCSI** (после установки `vioscsi`).
3. Задать статический IP (если сбился после restore).
4. **Windows Update** — отложить автоперезагрузку (см. §6.3).
5. Проверить службы СКАДА / ЛЭРС / лифтов / «Меркурия».
#### Специфика для VM-101 (СКАДА + «Меркурий»)
После restore дополнительно:
```bash
# USB-ключ «Меркурия» — passthrough в Proxmox
lsusb | grep -i "0529\|guardant\|hasp\|rutoken"
qm set 101 --usb1 host=XXXX:YYYY,usb3=1
```
- Проверить, что «Меркурий» видит ключ и COM/MOXA.
- **Вариант А:** настроить GPU/USB passthrough (§7).
- **Вариант Б:** включить RDP (§8).
#### Типичные проблемы и решения
| Симптом | Причина | Решение |
|---------|---------|---------|
| **No bootable device** | Legacy vs UEFI | ВМ → **OVMF**; или SeaBIOS, если исходник был MBR/Legacy |
| **INACCESSIBLE_BOOT_DEVICE** (BSOD) | Нет драйвера VirtIO/SATA | Restore на **SATA**; Universal Restore; или загрузка с Recovery Media → repair |
| Сеть не работает | Другой NIC | E1000 в ВМ для restore; после загрузки — VirtIO NetKVM |
| Windows просит активацию | Смена «железа» | Повторная активация (Retail/Volume) |
| «Меркурий» не видит ключ | USB не проброшен | `qm set` USB passthrough; не использовать hub |
| MOXA не отвечает | IP/COM сбились | Проверить IP ВМ и настройки NPort (§9.5) |
| Очень долгий restore | Бэkaп по сети | Restore с локальной копии `.vbk` на Proxmox/NAS рядом |
#### Чек-лист после restore
- [ ] Windows загружается без BSOD
- [ ] Сеть, IP, доступ к контроллерам
- [ ] Приложение (СКАДА/ЛЭРС/лифты) запускается
- [ ] База данных на месте, отчёты/архивы работают
- [ ] USB-ключ «Меркурия» (VM-101) — если применимо
- [ ] Guest Agent установлен, `qm agent NNN ping` — OK
- [ ] Старый физический ПК **не отключать** до окончания параллельных тестов (§11)
#### Сравнение с другими методами
| Метод | Скорость | Стабильность на Proxmox |
|-------|----------|-------------------------|
| Veeam Agent restore | Быстро | Средняя (зависит от драйверов) |
| Clonezilla P2V (§9.1) | Средне | Средняя |
| Чистая установка + БД (§9.3) | Дольше | **Высокая** |
---
### 9.3. Метод чистой установки + restore (рекомендуется)
1. Установить Windows 10 на ВМ.
2. Установить СКАДА / ЛЭРС / лифты / «Меркурий» с дистрибутивов.
3. Восстановить базы данных из бэкапов.
4. Перенести конфигурационные файлы проектов.
### 9.4. Порядок миграции
| Шаг | Система | VM | Проверка |
|-----|---------|-----|----------|
| 1 | «Меркурий» + USB-ключ | 101 | Ключ определяется, опрос через MOXA |
| 2 | СКАДА | 101 | Архив, тренды, алармы |
| 3 | ЛЭРС | 102 | Отчёты, база данных |
| 4 | Лифты | 103 | Связь с контроллерами, команды |
### 9.5. Настройка 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 из бэкапа
```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/)