Files
SKADA/docs/razvertyvanie-proxmox.md
T
PTah d239d426c2 docs: добавить ТЗ и инструкцию развёртывания Proxmox
Документация по консолидации СКАДА, ЛЭРС, лифтов и Меркурия на единый сервер Proxmox VE — два варианта (GPU passthrough и RDP).

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

883 lines
27 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.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. Параллельная эксплуатация
- Срок: **714 дней**.
- Старые ПК остаются включёнными, но не используются оператором.
- При проблемах — откат на старые машины.
### 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/)