Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Выбор PCI Passthrough для идентичных устройств. Иногда возникает ситуация, когда вам нужно использовать несколько идентичных PCI устройств (например, две видеокарты) в вашей системе. Однако, при использовании PCI Passthrough, у вас могут возникнуть пробл

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Выбор PCI Passthrough для идентичных устройств. Иногда возникает ситуация, когда вам нужно использовать несколько идентичных PCI устройств (например, две видеокарты) в вашей системе. Однако, при использовании PCI Passthrough, у вас могут возникнуть пробл, Proxmox Виртуальная Среда
     
    radensb
    Guest
    #1
    0
    08.01.2020 18:40:00
    PCI Passthrough обсуждался много раз, но я не могу найти информацию о моём конкретном случае. У меня успешно работала передача PCI на предыдущей системе, когда я передавал HBA в мою OpenMediaVault VM с PVE 5.3. На моей текущей системе я установил PVE 6.1 и столкнулся с проблемой. Теперь у меня в системе два одинаковых контроллера HBA. Оба – старенькие LSI SAS2008, использующие один и тот же драйвер и имеющие одинаковые коды идентификаторов поставщика. Единственный способ их различить – это Bus ID. Один из контроллеров SAS2008 содержит диски загрузки Proxmox и vmfs, а второй передается в OpenMediaVault. В моей первой попытке я просто прошелся по инструкции по передаче PCI Passthrough, как и делал раньше, и занёс драйвер устройства в чёрный список... ОПС! Исчез доступ к дискам загрузки! После удаления занесённого в чёрный список драйвера через LiveCD я попробовал передать PCI Passthrough в OMV, и это сработало! VM загрузилась, и у меня был доступ к дискам на переданном HBA. Однако на экране входа в систему сервера (сообщения в логах?) появились тревожные сообщения о том, что диски из Linux RAID на переданном HBA начали давать сбои, и что RAID работает с уменьшенным количеством дисков. Я получил несколько таких сообщений подряд, и количество доступных дисков в RAID уменьшалось на 1 каждое сообщение. Я подтвердил, что когда OMV VM выключена, Proxmox видит диски с обоих контроллеров HBA, а как только я загружаю OMV, диски на переданном HBA контроллере больше не видны в Proxmox. Я думаю, что когда OMV VM загружается и берет под свой контроль переданный HBA и его подключенные диски, Proxmox воспринимает исчезновение дисков в RAID как сбой? Неприятная ситуация. Поскольку внесение драйвера в чёрный список не вариант (так как мне нужно иметь возможность загружаться), есть ли другой способ сообщить ProxMox игнорировать устройство по PCI Bus ID (адресу?), чтобы оно никогда не видело HBA, который передается? Мне кажется, что это и есть правильный способ настройки, и так работала моя старая система, так как HBA для дисков загрузки отличался от HBA для передачи в OMV, поэтому проблема с черным списком драйвера не возникала. Или же нет причин беспокоиться о том, что диски удаляются из Proxmox, когда доступ к HBA передаётся, и я могу игнорировать сообщения об ошибках/предупреждений, так как я (или думаю, что я) знаю, что происходит? Поскольку OMV VM настроена на автоматическую загрузку, и сервер редко перезагружается в нормальной эксплуатации, эта ситуация возникает не часто. Однако, если это может каким-то образом повредить диски на переданном HBA, я хотел бы это исправить. Буду благодарен за помощь в понимании этого лучше! Спасибо!
     
     
     
    dcsapak
    Guest
    #2
    0
    09.01.2020 16:35:00
    Это довольно сложная ситуация, и для её решения потребуется немало знаний Linux... В общем, тебе нужно запустить скрипт в initramfs, который перезапишет драйвер для определенных устройств в sysfs до загрузки модуля vfio-pci. Таким образом, устройство будет привязано к vfio-pci, а другое — к обычному драйверу. Есть пример/инструкция здесь: http://vfio.blogspot.com/2015/05/vfio-gpu-how-to-series-part-3-host.html, хотя мне никогда не приходилось это делать, и блог посвящен CentOS/Fedora, так что они используют dracut вместо update-initramfs и т.д.
     
     
     
    radensb
    Guest
    #3
    0
    11.01.2020 04:09:00
    @dcsapak Спасибо за ответ. Я не очень хорошо разбираюсь в Linux, но у меня есть хороший друг, который хорошо знает, и вместе с предоставленной ссылкой я смог дойти до этого места. Заметь: это не работает..., но я думаю, что я близок. Буду благодарен за любые советы и предложения (особенно касающиеся специфики PVE).

    Процесс:
    1. Найти устройство:
    Код: #lspci

    01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 02)

    #find /sys/devices/pci* | grep 01:00.0

    …

    /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/…

    …
    Загружать модуль vfio-pci первым:
    Код: #nano /etc/default/grub
         GRUB_CMDLINE_LINUX=”rd.driver.pre=vfio-pci” # изменить эту строку
    #update-grub
    Добавить опцию установки в iommu.conf (создать или изменить файл):
    Код: #nano /etc/modprobe.d/iommu.conf
         options vfio_iommu_type1 allow_unsafe_interrupts=1
         install vfio-pci /sbin/vfio-pci-override-sas2008-addr1.sh
    Добавить переопределение в initramfs через скрипт:
    Код: #nano /etc/initramfs-tools/hooks/vfio-pci-override-sas2008-addr1-hook.sh
         #!/bin/sh -e
         PREREQS=""
         case $1 in
         prereqs) echo "${PREREQS}"; exit 0;;
         esac
         . /usr/share/initramfs-tools/hook-functions
         copy_exec /sbin/vfio-pci-override-sas2008-addr1.sh /sbin
    #chmod 755 vfio-pci-override-sas2008-addr1-hook.sh
    Добавить модули в initramfs, чтобы они соответствовали /etc/modules? (не уверен, что это вообще нужно??)
    Код: #nano /etc/initramfs-tools/modules
         vfio_pci
         vfio
         vfio_iommu_type1
         vfio_virqfd
    Создать скрипт переопределения:
    Код: #nano /sbin/vfio-pci-override-sas2008-addr1.sh
         #!/bin/sh -e
         echo "vfio-pci"  >
         /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver_override
         modprobe -i vfio-pci
    #chmod 755 vfio-pci-override-sas2008-addr1.sh
    #update-initramfs -u -k all
    Затем проверить, есть ли файл:
    Код: #lsinitramfs -l /boot/initrd.img-5.3.13-1-pve | grep sas2008
    -rwxr-xr-x 1 root root 196 Jan 10 15:55 usr/sbin/vfio-pci-override-sas2008-addr1.sh (УРА!!!)

    #reboot

    #lspci | grep 01.00
    01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 02) --проклятье, все еще здесь!
    EDIT:: Меня проинформировали, что даже если бы это работало, я все равно видел бы устройство с lspci. Поэтому я проверяю с помощью fdisk -l и убеждаюсь, что диск, находящийся на этом HBA, не указан. В настоящее время он все еще присутствует. Однако я подтвердил, что мои скрипты выполняются.
    # устройство, которое я пытаюсь передать:
    root@pve:/etc/initramfs-tools/hooks# cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver_override
    vfio-pci
    # устройство, которое нужно хосту:
    root@pve:~# cat /sys/devices/pci0000:00/0000:00:09.0/0000:04:00.0/driver_override
    (null)
    Очевидно, мои скрипты выполняются. Тем не менее, я все равно вижу диск на этом HBA, и при запуске:
    Код: root@pve:~#  lspci -s 01:00.0 -v | grep driver
           Kernel driver in use: mpt3sas
    указывает на то, что устройство, которое я пытаюсь передать, по-прежнему использует драйвер ядра.
     
     
     
    radensb
    Guest
    #4
    0
    12.01.2020 08:11:00
    Я разобрался. Оказывается, процесс можно значительно упростить, добавив скрипт привязки в: Код: /etc/initramfs-tools/scripts/init-top/

    Процесс, которому я следовал:

    1.  Найти нужное устройство:
       Код: # lspci

       01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 02)

       # find /sys/devices/pci* | grep 01:00.0
       ...
       /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/…
       ...
    2.  Создать скрипт привязки:
       Код: # nano /etc/initramfs-tools/scripts/init-top/bind\_vfio.sh

       ```
       #!/bin/sh -e
       echo "vfio-pci"  > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver_override

       modprobe -i vfio-pci
       ```

    3.  # chmod 755 bind\_vfio.sh
    4.  # chown root:root /etc/initramfs-tools/scripts/init-top/bind\_vfio.sh
    5.  # update-initramfs -u -k all
    6.  Добавить модуль vfio в initramfs:
       Код: # nano /etc/initramfs-tools/modules

       vfio-pci

    7.  # update-initramfs -u -k all
    8.  # reboot

    Проверка:

    root@pve:~# lspci -s 01:00.0 -v
    01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 02)
    Subsystem: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] ...
    Kernel driver in use: vfio-pci
    Kernel modules: mpt3sas

    root@pve:~# lspci -s 04:00.0 -v
    04:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
    Subsystem: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] ...
    Kernel driver in use: mpt3sas
    Kernel modules: mpt3sas

    Прибыль. Таким образом, мы видим, что SAS2008 на 01:00.0 назначен драйверу vfio-pci. Хотя я все еще вижу устройство с помощью lspci, PVE не видит ни одного из подключенных к нему дисков. SAS2008 на 04:00.0 назначен драйверу mpt3sas, и все диски, подключенные к нему (мои загрузочные и vmfs-диски!), доступны в PVE.

    Следование опубликованным PVE инструкциям для запуска passthrough теперь приводит к желаемой операции passthrough к VM.

    Интересно (раздражает): Имя скрипта привязки, похоже, имеет значение (ПОЧЕМУ!?). Мой исходный скрипт (vfio-pci-override-sas2008-addr1.sh) содержал точно такое же содержимое, как скрипт bind\_vfio.sh, о котором я упоминаю выше. Однако, когда скрипт был назван vfio-pci-override-sas2008-addr1.sh, он не работал, даже хотя я подтвердил, что он запускается. Я получал загрузку mpt3sas вместо vfio-pci для драйвера ядра. Я затем сократил имя до vfio\_addr1.sh, но ЭТОГО ТОЖЕ НЕ СТАЛОСЬ! Я вспомнил, что где-то видел запись bind\_vfio.sh, поэтому попробовал это на всякий случай - и это сработало. Может быть, это связано с тем, что в других были цифры? Кто знает... но bind\_vfio.sh работает. Сумасшедшее...
     
     
     
    grinder
    Guest
    #5
    0
    05.03.2020 00:30:00
    @radensb: Ты мой герой!! Я боролся с этим весь уикенд, но не обращал внимания на твою раздражающую приписку в конце поста относительно названия скрипта. Ещё раз для всех, кто это читает, название должно быть именно таким: bind_vfio.sh Забавно, что хотя вторая карта SAS LSI в моей системе всё ещё использовала mpt3sas диск после всех настроек (за исключением названия скрипта), при включении связанной VM загружался драйвер vfio-pci. В общем, теперь всё идеально в моей установке Proxmox. Было бы хорошо добавить эту информацию в вики/документацию Proxmox. Ещё раз огромное спасибо radensb.
     
     
     
    silverstone
    Guest
    #6
    0
    01.05.2020 10:33:00
    ВАЖНО: см. EDIT #3, чтобы понять, почему этот скрипт не работает. Я немного модифицировал скрипт от @radensb, чтобы сделать его более динамичным, поддерживающим несколько устройств и отделяющим конфигурацию от скрипта. Моя основная мотивация — установить скрипт с помощью Saltstack на каждый хост PVE. Затем на каждом хосте PVE я буду определять специфичные для хоста PCI-устройства, которые необходимо передать гостевым системам.

    /etc/initramfs-tools/scripts/init-top/bind_vfio.sh
    Bash: #!/bin/bash

    # Конфигурационный файл
    config="/etc/default/vfio-pci-devices"

    if [[ -f "$config" ]]; then
       # Загрузка конфигурации
       echo "Загрузка конфигурации VFIO_PCI из $config."
       source $config
    else
       # Конфигурационный файл не существует
       echo "Конфигурационный файл $config не существует."
       echo "Драйвер не будет переопределен."
    fi

    # Проверка, пустой ли массив
    if [[ -z "${VFIO_PCI_DEVICES}" ]]; then
      echo "Устройство не указано в $config"
      echo "Драйвер не будет переопределен"
    else
      # Адрес устройства найден командой lspci
      for device in "${VFIO_PCI_DEVICES[@]}"
      do
         # Нужно поменять местами :00 с тем, что стоит впереди
         # e.g. 03:00.0 -> 00:03.0
         device_swapped=$(echo $device | sed  -e 's#\(..\)\:\(..\).\(.\)#\2:\1\.\3#g')

         # Определение целевого пути
         target="/sys/devices/pci0000:00/0000:${device_swapped}/driver_override"

         # Вывод сообщения
         echo "Настройка PCI-устройства $device для использования драйвера VFIO_PCI"
         echo "   Установка конфигурации в ${target}."

         # Переопределение драйвера по умолчанию драйвером vfio-pci
         # Позволяет устройству игнорироваться хостом и передаваться гостевой системе
         echo "vfio-pci"  > "${target}"
       done
    fi

    # (Пере)загрузка модуля
    modprobe -i vfio-pci /etc/default/vfio-pci-devices
    Bash: #!/bin/bash

    # Передача устройств гостевой системе
    VFIO_PCI_DEVICES=("03:00.0")

    # Не передавать устройства гостевой системе
    #VFIO_PCI_DEVICES=()
    Я использую только bash в своей среде и не имею большого опыта работы с другими оболочками. Смело адаптируйте.
    EDIT #1: Несмотря на то, что скрипт явно находится в initramfs, по какой-то причине он не выполняется, так как драйвер mpt3sas загружен для обеих карт (1 которая нужна хосту, 1 которая нужна гостевой).
    lsinitramfs -l /boot/initrd.img-5.3.18-3-pve | grep vfio
    Bash: -rw-r--r--   1 root     root           51 May  1 09:35 etc/modprobe.d/vfio.conf
    -rwxr-xr-x   1 root     root         1196 May  1 10:28 scripts/init-top/bind_vfio.sh
    drwxr-xr-x   3 root     root            0 May  1 10:43 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio
    drwxr-xr-x   2 root     root            0 May  1 10:43 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio/pci
    -rw-r--r--   1 root     root        89464 Mar 17 16:33 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio/pci/vfio-pci.ko
    -rw-r--r--   1 root     root        57736 Mar 17 16:33 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio/vfio.ko
    -rw-r--r--   1 root     root        36848 Mar 17 16:33 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio/vfio_iommu_type1.ko
    -rw-r--r--   1 root     root        11064 Mar 17 16:33 usr/lib/modules/5.3.18-3-pve/kernel/drivers/vfio/vfio_virqfd.ko
    Я думаю, что, возможно, bash недоступен на ранней стадии загрузки?
    EDIT #2: Я думаю, что проблема также в конфигурационном файле. Нельзя использовать что-либо внешнее по отношению к скрипту.
    EDIT #3: подтверждено 2 проблемы: одна — неправильный PCI-адрес (не нужно менять два числа местами), другая — то, что, вероятно, команды grep и sed нельзя использовать в среде предварительной загрузки. Поэтому я вернусь к решению, предложенному @radensb, и буду просто записывать из Saltstack в шаблон и делать цикл for там. Это немного жаль, но похоже, что это единственный способ.
     
     
     
    chOzcA75vE0poCY0F6XC
    Guest
    #7
    0
    07.12.2020 13:35:00
    @radensb Спасибо, я пропустил два SAS HBA в IT-режиме с прошивкой ROM, один для моей машины Proxmox, другой — для самой виртуальной машины. Когда я настраивал их несколько недель назад, всё было отлично, у них были собственные ID устройств. После того, как я заменил SSD на более ёмкие и пришлось повозиться, чтобы они заработали как положено, ID устройства Dell H310 и H210, видимо, установился в их прошивку LSI 9211-8i или что-то в этом роде. Не сразу, а после нескольких перезагрузок и небольшого перерыва в питании. ID устройства во VFIO изменился на что-то совершенно другое, который теперь был одинаковым на обеих картах. lspci -nn показывает следующий вывод: 04:00.0 Serial Attached SCSI controller [0107]: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] [1000:0072] (rev 03) 05:00.0 Serial Attached SCSI controller [0107]: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] [1000:0072] (rev 03) Шаги из твоего поста работают отлично. Я подумал, что добавлю это для тех, кто гуглит странные проблемы с passthrough, потому что я потратил немало времени на поиск этого поста. Некоторые из ключевых слов, которые я использовал, так как они, видимо, учитываются только для GPU? Может, это поможет кому-то ещё. pci passthrough identical device id vfio identical device id vfio identical cards pci stub
     
     
     
    LightLuck
    Guest
    #8
    0
    23.02.2025 19:17:00
    С последним обновлением я вообще не могу пропускать NVME, GPU и HBA в разные виртуальные машины. Пришлось переустановить одну из ВМ без пропуска NVME. И ещё пришлось убрать GPU passthrough на ВМ с контейнерами. Кстати, сейчас работает только этот способ, чтобы хоть что-то пропускать. Я пробовал другие методы, например, вот этот https://hsve.cc/passthrough/, и они вообще не работают.
     
     
     
    rpm5099
    Guest
    #9
    0
    06.05.2025 05:33:00
    @radensb Это очень полезно - я сейчас пытаюсь сделать то же самое, только с двумя сетевыми картами SFP+ 10gb с четырьмя портами. После прочтения этого я думаю, что мне нужно лучше спланировать процесс. Твой исходный пост был опубликован около 5 лет назад – что-нибудь изменилось, чтобы сделать всё немного проще? Я всерьез рассматриваю покупку сетевых карт другого бренда, чтобы можно было их заблокировать через драйвер – я не могу позволить себе, чтобы машина простаивала. Огромное спасибо.
     
     
     
    rpm5099
    Guest
    #10
    0
    06.05.2025 05:34:00
    В продолжение этой темы, моя основная мотивация здесь – плохая производительность pfSense HAProxy. Это подрывает все мои вложения в 10Gb оборудование.
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры