docs: добавить ТЗ и инструкцию развёртывания Proxmox

Документация по консолидации СКАДА, ЛЭРС, лифтов и Меркурия на единый сервер Proxmox VE — два варианта (GPU passthrough и RDP).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
PTah
2026-07-09 10:28:49 +10:00
commit d239d426c2
3 changed files with 1220 additions and 0 deletions
+882
View File
@@ -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. Параллельная эксплуатация
- Срок: **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/)