image

При соответствующей настройке можно загружаться с накопителя NVME SSD даже на старых системах. Предполагается, что операционная система (ОС) умеет работать с NVME SSD. Рассматриваю именно загрузку ОС, поскольку при имеющихся в ОС драйверах NVME SSD виден в ОС после загрузки и может использоваться. Дополнительного программного обеспечения (ПО) для линукса не требуется. Для ОС семейства BSD и прочих юниксов способ скорее всего тоже подойдёт.

Для загрузки с какого-либо накопителя нужно, чтобы в программе первоначальной загрузки (ППЗ), в BIOS или EFI (UEFI) содержались драйвера для данного устройства. Накопители NVME SSD есть достаточно новые устройства по сравнению с BIOS, и в ППЗ прошивок старых материнских плат таких драйверов нет. В EFI без поддержки NVME SSD можно добавить соответствующий код, и тогда становится возможна полноценная работа с этим устройством — можно установить операционную систему и загрузить её. Для старых систем с т. н. «legacy BIOS» загрузкой ОС так сделать вряд ли получится. Однако это можно обойти.

Как делать


Я использовал openSUSE Leap 15.1. Для других линуксов действия будет примерно те же.

1. Подготовим компьютер для установки операционной системы.
Нужен ПК или сервер со свободным разъёмом PCI-E 4x или более длинным, неважно какой версии, хватит и PCI-E 1.0. Конечно, чем новее версия PCI-E, тем выше будет скорость. Ну и, собственно, NVME SSD с переходником M.2 — PCI-E 4x.
Также нужен какой-либо накопитель с ёмкостью 300 МБ и более, который виден из биоса и с которого можно грузить ОС. Это может быть НЖМД с подключением по IDE, SATA, SCSI. SAS. Или USB флэшка, или карта памяти. На дискету — не влезет. Диск CD-ROM не подойдёт, потребуется перезапись. DVD-RAM — без понятия. Условно назовём эту штуку «legacy BIOS накопитель».

2. Загружаем линукс для установки (с оптического диска или загрузочной флэшки или др.).

3. При размечивании диска распределим ОС по имеющимся накопителям:
3.1. Создадим раздел для загрузчика GRUB в начале «legacy BIOS накопителя» размером 8 МБ. Отмечу, что здесь используется особенность openSUSE — GRUB на отдельном разделе. Для openSUSE по умолчанию используется файловая система (ФС) BTRFS. Если разместить GRUB на разделе с ФС BTRFS, то система не загрузится. Поэтому используется отдельный раздел. Можете разместить GRUB в другом месте, лишь бы грузился.
3.2. После раздела с GRUB создадим раздел с частью системной папки («корня»), а именно с «/boot/», размером 300 МБ.
3.3. Оставшееся добро — остаток системной папки, раздел для свопа, раздел пользователя «/home/» (если таковой вы решили создать) можно разместить на NVME SSD.

После установки система грузит GRUB, который грузит файлы из /boot/, после чего NVME SSD становится доступным, затем идёт загрузка системы с NVME SSD.
На практике я получил существенное ускорение.

Требования по ёмкости «legacy BIOS накопителя»: 8 МБ для раздела GRUB — это по умолчанию, и где-то от 200 МБ для /boot/. 300 МБ я взял с запасом. При обновлении ядра (и при установке новых) линукс будет пополнять раздел /boot/ новыми файлами, при удалении ненужных более ядер — освобождать место. Оставшееся место на «legacy BIOS накопителе» за пределами этих двух разделов можно использовать по своему усмотрению.

Оценка скорости и стоимости


Стоимость NVME SSD 128 ГБ — примерно от 2000 р.
Стоимость переходника M.2 — PCI-E 4x — примерно от 500 р.
Также есть в продаже переходники M.2 — PCI-E 16x на четыре накопителя NVME SSD, ценой где-то от 3000 р. — если это кому надо.

Предельные скорости:
PCI-E 3.0 4x около 3900 МБ/с
PCI-E 2.0 4x 2000 МБ/с
PCI-E 1.0 4x 1000 МБ/с
Накопители с PCI-E 3.0 4x на практике достигают скорости около 3500 МБ/с.
Можно предположить, что достижимая скорость будет такой:
PCI-E 3.0 4x около 3500 МБ/с
PCI-E 2.0 4x около 1800 МБ/с
PCI-E 1.0 4x около 900 МБ/с

Что быстрее, чем SATA 600 МБ/с. Достижимая скорость для SATA 600 МБ/с — около 550 МБ/с.
При этом на старых материнских платах скорость SATA набортного контроллера может быть не 600 МБ/с, а 300 МБ/с или 150 МБ/с. Здесь набортный контроллер = контроллер SATA, встроенный в южный мост чипсета.

Отмечу, что для NVME SSD будет работать NCQ, а у старых набортных контроллеров этого может и не быть.

Я делал расчёты для PCI-E 4x, однако некоторые накопители имеют шину PCI-E 2x. Этого хватает для PCI-E 3.0, но для более старых стандартов PCI-E — 2.0 и 1.0 — такие NVME SSD лучше не брать. Также накопитель с буфером в виде чипа памяти будет быстрее, чем без оного.

Для желающих полностью отказаться от набортного контроллера SATA посоветую использовать контроллер Asmedia ASM 106x (1061 и др.), который предоставляет два порта SATA 600 (внутренних или внешних). Он работает весьма хорошо (после обновления прошивки), в режиме AHCI поддерживает NCQ. Подключается по шине PCI-E 2.0 1x.

Его предельная скорость:
PCI-E 2.0 1x 500 МБ/с
PCI-E 1.0 1x 250 МБ/с
Достижимая скорость будет такой:
PCI-E 2.0 1x 460 МБ/с
PCI-E 1.0 1x 280 МБ/с

Этого хватит на один SATA SSD или два НЖМД.

Замеченные недостатки


1. Не считываются параметры SMART с NVME SSD, есть только общие данные по производителю, серийному номеру и т.д. Возможно, из-за слишком старой материнской платы (мп). Для своих бесчеловечных опытов я использовал самую старую мп, которую смог найти, с чипсетом nForce4.

2. TRIM должен работать, но это надо проверять.

Заключение


Есть ещё другие возможности: купить контроллер SAS с разъёмом PCI-E 4x или 8х (бывают ли 16х или 32х?). Однако они если дешёвые, то поддерживают SAS 600, но SATA только 300, а дорогие будут дороже и медленнее предложенного выше способа.

Для использования с M$ Windows можно установить дополнительное ПО — загрузчик со встроенными драйверами для NVME SSD.

См. здесь:
www.win-raid.com/t871f50-Guide-How-to-get-full-NVMe-support-for-all-Systems-with-an-AMI-UEFI-BIOS.html
www.win-raid.com/t3286f50-Guide-NVMe-boot-for-systems-with-legacy-BIOS-and-older-UEFI-DUET-REFIND.html
forum.overclockers.ua/viewtopic.php?t=185732
pcportal.org/forum/51-9843-1
mrlithium.blogspot.com/2015/12/how-to-boot-nvme-ssd-from-legacy-bios.html

Предлагаю читателю самому оценить, нужно ли ему такое применение NVME SSD, или лучше будет купить новую материнскую плату (+ процессор + память) с имеющимся разъёмом M.2 PCI-E и поддержкой загрузки с NVME SSD в EFI.

Комментарии (24)


  1. MedicusAmicus
    18.10.2019 16:23
    +1

    Как заставить старую систему стартовать на неподдерживаемом железе?
    Никак, для загрузки (хотя бы старта) придется воткнуть совместимое железо.


    1. A1exXx
      18.10.2019 17:03

      В этой инструкции получается что да, но возможно для линукс с возможностью отделить boot это самый простой вариант. Для windows первая ссылка. я внимательно не изучал но там что-то про модификацию и перезапись старого биос для поддержки загрузки с NVME.
      Думал про это. но в итоге, после нескольких статей о производительности разных версий ссд понял что проще сата ссд купить если мама поддерживает сата 3.


    1. BD9 Автор
      19.10.2019 18:43

      Можно дополнить BIOS нужными драйверами.
      Для UEFI это уже давно делают.
      Для старого BIOS тоже наверное возможно. Просто это сложнее и не слишком выгодно.


  1. amarao
    18.10.2019 17:19

    Неспортивно. Как спортивно? Найти правильное ядро и initrd и сделать kexec в них.


    1. dvrpd
      18.10.2019 18:14

      И чем такая схема будет лучше обыной загрузки ядра с этого boot-раздела загрузчиком?


      1. amarao
        18.10.2019 18:14

        Тем, что boot будет на основном устройстве и не будет изнашиваться каждым следующим обновлением ядра.


        1. JerleShannara
          18.10.2019 18:30

          Кхем. Много лет назад я подключил китайскую CF карточку(до этого долгое время жившую в медиацентре) через переходник в IDE в древнюю машину(т.к. с авардовским биосом вечная проблема с большими хардами, а там был аж на 500Гб). Ядро обновляется, в бут пишется, CF живее всех живых по сей день. Хотя если каждые три часа компилить новое ядро из git-а, то может за пару лет и износится вхлам.


          1. amarao
            18.10.2019 21:03

            CF живёт. А новые SD'шки могут и подохнуть. Перезаписей там — по пальцам пересчитать.


  1. Sly_tom_cat
    18.10.2019 17:24

    Я наивно полагал, что решение будет с загрузкой NVME драйвера средствами менеджера загрузки UEFI…

    Сам бы я в первую очередь в эту сторону копал, а вот раздел по груб, раздел под /boot на legacy, а все остальное на NVME — это как-то очень костыльно.

    Но ни в коей мере не считаю это решение каким-то ущербным — главное что рабочее. Я только о том что хотелось бы чуточку более умное решение…

    Пошел гулить нет ли где-нибудь драйвера NVME для UEFI, я то может я вообще тут бред сейчас сморозил…


    1. Sly_tom_cat
      18.10.2019 17:42

      Во, нагуглил: тут есть NvmExpressDxe-64.efi

      План такой: кидаем его на EFS раздел, прописываем через efibootmgr новую загрузочную запись типа DRIVER (возможно потребуется сборка из efibootmgr мастера, где добавлена возможность активировать ремаппинг драйверов/устройств). И вуаля: в момент загрузки GRUB (ну или можно сразу ядро грузить) UEFI уже имеет доступ NVME устройству. Можно корень с бутом и грубом хранить уже на NVME устройстве.

      Не на чем попробовать, пока (нет под рукой подходящего железа), но по идее это позволит на компе с UEFI, который из коробки не поддерживает NVME, загружаться с NVME устройств. На legacy только EFS раздел.

      ЗЫ никакой перепрошивки firmware не нужно. В UEFI из коробки были впилены механизмы подгружать недостающие в прошивке драйвера с EFS раздела. Только для EFS раздела нужно устройстов которе из коробки видит UEFI.

      ЗЫЫ но если включен SecureBoot то надо будет еще озаботится подписанием этого драйвера.


    1. 4wardrostov
      19.10.2019 18:32

      Автор упомянул nForce4… Какой там UEFI?


  1. wlr398
    18.10.2019 20:36

    C NVME под Linux есть интересный вопрос. Если смотреть статистику через smartctl или nvme smart-log, то получается странная в сравнении с SATA ситуация, power_on_hours вообще не соответствует реальной наработке, оно меньше. Может NVME накопители часть времени находятся в режиме спячки и это не считается за наработку power on?
    Так же, нарастает счётчик unsafe_shutdowns, хотя завершение работы на 100% всегда делается корректно.
    Никто не сталкивался?


  1. TicSo
    18.10.2019 22:20

    У меня вопрос может чуть в сторону от задачи, решаемой в статье, но по теме…
    Можно ли получить максимум по производительности и правильную работу двух NVME SSD в софтовом raid1 на бюджетных материнках. Например, на материнке, где есть один порт 1xM.2_supports_PCIe 3.0x4.
    Видел чуть дороже материнки с двумя портами M.2, но там в описании указано, что только один из них поддерживает PCIe 3.0x4.
    Приведу пример конфигурации:
    MSI B450M PRO-M2 V2 (имеет один 1xM.2_supports_PCIe 3.0x4)
    CPU AMD Ryzen 5 2600
    SSD NVME MZ-V7P1T0BW (interface PCIe Gen 3.0x4, NVMe 1.3)
    Вот таких 2 шт ssd можно запустить под Linux Debian в raid1 на 3500Mb/s?
    Можно ли использовать переходники (описанные в статье), чтобы в единственный слот PCIe 3.0 x16 вставить еще и видеокарту, например:
    Inno3D GeForce GT 730 2GB, GDDR5 и всех подружить… Спасибо.


    1. kolu4iy
      18.10.2019 23:03

      Мне кажется, что если вы ответите на вопрос "зачем", то вам накидают решений заметно быстрее… Ну например, не так давно я читал про ssd от интел с sdram-интерфейсом (https://www.anandtech.com/show/12828/intel-launches-optane-dimms-up-to-512gb-apache-pass-is-here)


    1. JerleShannara
      19.10.2019 04:09

      Ответ — простыми способами нельзя. либо видеокарта в x16, либо вторая NVMe через переходник. Если вас устроит, что одна NVMeшка будет работать на PCIe gen 3 x1, то можно переходник на х1 воткнуть. Так даже можно будет три штуки на эту мать вставить, но вот скорость двух будет на не очень высоком уровне, зато будет «мощная игровая видеокарта»


      1. TicSo
        19.10.2019 09:29

        Понятно, спасибо. Нужна максимальная производительность по SSD NVME в raid1. Тогда надо искать вариант видеокарты в слот PCIe 2.0x1.
        В результате получу полноценный софтовый рэйд или с nvme ждать грабли?


        1. BD9 Автор
          19.10.2019 19:12

          RAID 1 (mirroring — «зеркалирование») — массив из двух (или более) дисков, являющихся полными копиями друг друга.

          Поставьте Intel Optane 1 шт. и будет и скорость, и надёжность.
          Но вообще-то если нужны вещи вроде RAID 1, то нужно брать мп не microATX, а ATX и больше, ИБП, ECC RAM,…

          Сильно извращаясь: видеокарту в M.2 через переходник PCI-E 4x — M.2 (видеокарта влезет, если пропилить паз в торце):
          image

          И 2-4 накопителя M.2 через переходник M.2 — PCI-E 16x:
          image


  1. CybDo
    19.10.2019 18:33

    Тоже столкнулся с вопросом драйвера Nvme, когда решил добавить новый ssd. Поискал инфу в интернете и понял, что танцы с бубнами и доп раз делами на других дисках для старта не подходит. Да и варианты мне показались какими то "с костылями". Итак, что было решено. Имеею мать Asrock z77 extreme4m, i5 3570к, 16gb ram. Прикупил новый ссд и после гугления нашел на англофоруме инфу, что нужно добавить в прошивку биоса сам драйвер. Скачал последний архив в сайта производителя (12 или 13 года последняя версия). Распаковка, открыл редактором и нашел нужный раздел, после чего добавил драйвер. Далее созранение/компиляция, называйте как хотите) через втроенный в uefi загрузчик обновляю с флешки биос, и… Все заработало! Теперь комп на старте видит Nvme. Грузии вин10, запускаем тест и получаем в погоне около скорость чтения около 3800.



  1. lotse8
    20.10.2019 16:15

    Не знаю как у кого, у меня HP покупки 2012 года без UEFI. Воткнул SSD на тот же шлейф во второй разъем, подключил питание, в BIOS выставил SSD диск приоритетным для загрузки. С помощью Acronis создал резервную копию загрузочного диска и развернул ее на SSD. Перезагрузился и все заработало с SSD, даже лицензия Windows7 не слетела. HDD стал вторым диском. Только скорость 3Gb вместо 6Gb возможных, поэтому можно было купить SSD более медленный и соответственно более дешевый.


    1. BD9 Автор
      20.10.2019 17:25

      HP покупки 2012 года без UEFI
      UEFI может появиться после обновления прошивки BIOS.
      на тот же шлейф
      — это для IDE, у SATA одно устройство на разъём и кабель.
      Для ноутбука SSD надо ставить заместо HDD — в том разъёме будет полная скорость.
      подключил питание
      Если это не ноутбук, то можно доставить контроллер на Asmedia ASM 106x, и получить ускорение, как и описано в статье.


      1. lotse8
        20.10.2019 21:19

        это для IDE, у SATA одно устройство на разъём и кабель

        Intel® Desktop/Workstation/Server Express Chipset SATA AHCI Controller


  1. Sterpa
    20.10.2019 18:50

    ИМХО, несколько мудреный способ и не для всех BIOS & OS.
    Вот тут с Клевером (Clover) можно добиться совсем универсального решения.


    1. BD9 Автор
      21.10.2019 17:05

      1. Появляется зависимость от стороннего ПО.
      2. Появляется зависимость от работоспособности флэшки и её наличия (кто-то спёр флэшку, и сервер уже не загрузить...).
      Сделать всё стандартным установщиком намного надёжнее.

      не для всех BIOS
      — включили в загрузке «Legacy BIOS Boot» и свели задачу к уже решённой. Всё равно «Legacy BIOS Boot» иногда приходится использовать для поддержки старого железа.