Модификация BIOS для поддержки NVME через PCI

2023.09.26
Старые но актуальные платы не поддерживают загрузку с NVME вставленного в PCI-E, это решается путем рискованной модификации BIOS.

Внезапно захотелось поставить на материнскую плату Supermicro X9DBL-I NMVE накопитель через переходник. Как хранилище данных, такая конфигурация работает без нареканий и все прекрасно гоняется из под OC, но как загрузочный диск с ОС не работает - BIOS не поддерживает такую функциональность. А мне хотелось попробовать установить на него ProxMox (но потом я передумал).

Ниже перечисленное может полностью вывести материнскую плату из строя, вы делаете это на свой страх и риск!

Обновление прошивки BIOS

Первое что можно попробовать это обновить BIOS. Затем установить ОС в режиме UEFI и таким же образом загружать диск (в BIOS). Если речь идет о комбинированном переходнике PCI-E на M.2 то нужно настроить бифуркацию в BIOS (это когда один PCI-E слот может работать как 2 или 4 PCI-E слота).

Про бифуркацию есть упоминания в этом обсуждении и здесь, а ниже скрин как это выглядит в BIOS моей платы по пути Advanced - Chipset Configaration - Integrated IO Configuration:

На моей плате это не сработало - нет поддержки nvme из BIOS.

Модификация BIOS

BIOS можно модифицировать и добавить в прошивку драйвер поддержки NVME.

Из приведенных выше обсуждений есть ссылки на форум win-raid.com, который теперь доступен по новому адресу, интересующая нас тема здесь, а раздел форума про NMVE здесь.

Нам понадобится:

Выгрузить ROM текущей прошивки BIOS

Можно использовать свежую прошивку от производителя материнской платы, а можно выгрузить ROM BIOS. Для этого на загрузочную флешку с DOS заливаем afudos, на целевой плате загружаемся в DOS без установки и экспортируем ROM в файл:

afudos bios.rom /o

Вставка драйвера NVME в прошивку BIOS

Теперь нужно через MMTool вставить драйвера для NVME. Скачать драйвера можно по ссылкам выше или отсюда несжатый и сжатый, на случай если несжатый не влезет в ROM.

На самом деле прошивок существует несколько, по ходу написания статьи я познакомился с более зрелыми инструкциями, ссылки в конце статьи.

Делаем следующее:

Затем нажимаем Save image и сохраняем модифицированный ROM. Для надежности еще раз загрузим этот же ROM и убедимся что теперь в списке есть строка с нашим драйвером NVME.

Заливка модифицированной прошивки BIOS

Заливаем модифицированный ROM BIOS на загрузочную флешку с DOS, идем на целевую плату и выгружаем ROM:

afudos bios.rom /o

Дожидаемся, затем отключаем питание кнопкой на корпусе и загружаем.

Настройка

Теперь нужно настроить загрузку модуля, который мы встроили в BIOS, делается это через OpROM в интерфейсе BIOS в разделе Advanced - PCIe/PCI/PnP Configuration, для Launch Storage OpROM policy нужно включить UEFI only:

В UEFI Only не будет аппаратного RAID.

Результат

Теперь можно загружать флешку в UEFI, устанавливать ОС на NVME накопитель и загружаться с него:

В BIOS нужно выставить очередность загрузки:

В меню Boot Override также можно загрузиться с этого диска:

Проблемы

Конечно не обошлось без проблем, а в самом начале я писал что решил отказаться от этой затеи ...

Иногда, редко, но бывает при перезагрузке процесс висит на 92-ом POST коде несколько минут, а это код означает инициализацию PCI шины (дока по POST кодам). Странно, ну ладно, это происходит крайне редко.

А затем я решил проверить, что будет, если воткнуть SATA диск, на котором уже установлена ОС из под UEFI и ... теперь в BIOS нельзя выставить очередность загрузки с NVME, но при вызове Boot Menu можно загрузиться с этого диска.

Ссылки

В телеграм канале DevOps от первого лица можно оставить комментарий или почитать интересные истории из практики DevOps