[Перевод] Расширение возможностей Raspberry Pi с помощью загрузочного NVMe-диска

Возможности подсистемы хранения данных одноплатного компьютера Raspberry Pi можно расширить, подключив к нему NVMe-диск. Такие диски обычно подключают к PCIe, что даёт им потенциальную возможность считывать и записывать данные на скорости более 3000 Мб/с.

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

Раскрыть весь потенциал NVMe-накопителя на Raspberry Pi 4 не удастся. Но у NVMe-диска есть пара преимуществ перед обычной SD-картой. Это — надёжность и скорость. Покупка подобного диска и адаптера к нему не потребует заметно больше средств, чем покупка более старого диска M.2. А если понадобится, то NVMe-диску можно найти и другое применение (ниже, при разговоре о CM4, я ещё к этому вернусь).

p7ehcinjole8lyuirpc8okqiefu.jpeg

Если у вас имеется внешний SSD с интерфейсом USB или M.2-диск, то вы тоже можете воспользоваться этим руководством.

Поиск и сборка аппаратных компонентов


Вот список компонентов, которые использованы в этом проекте:

  • Raspberry Pi 4 — в моём случае — версия с 8 Гб памяти.
  • Официальный источник питания.
  • SD-карта — карта размером 16–32 Гб нас вполне устроит.
  • Кардридер для SD-карт
  • USB-адаптер NVMe — обратите внимание на то, чтобы это была модель, поддерживающая USB3. Иначе скорость работы с данными будет ниже.
  • NVMe-диск — M.2-диски выглядят почти так же, но у них две выемки, а не одна. Обычно скорость работы SSD-дисков измеряется сотнями Мб/с, а не тысячами.


d974281eaf90ae583fcf471582948796.jpg


Компоненты, готовые к сборке

Вставьте NVMe-диск в адаптер и подключите его к компьютеру для того чтобы быстро его проверить.

ee717440b8497d46b86395f6e89259ab.jpg


Внутренняя печатная плата не закреплена. Поэтому проверьте всё при открытом корпусе

Я мог бы выбрать и более быстрый диск, не WD Blue, а, например, Samsung EVO 970 Plus. Но такой диск дороже на £50–60. Скорость передачи данных будет ограничена интерфейсом USB3 Raspberry Pi, поэтому тратиться на более быстрый диск смысла нет.

Настройка Raspberry Pi и тестирование диска


Загрузим 32-битную RaspiOS.

Мои инструкции должны сработать и на Ubuntu 20.04. Если при этом возникнут какие-то сложности — взгляните на этот материал.

Теперь запишем ОС на SD-карту, создадим файл boot.txt в первом разделе, подключим карту к Raspberry Pi и загрузимся. После этого подключимся к плате:

ssh pi@raspberrypi.local


Обновим систему:

sudo apt update -qy \
 && sudo apt upgrade -qy


Проверим версию загрузчика:

sudo vcgencmd bootloader_version
Sep  3 2020 13:11:43
version c305221a6d7e532693cc7ff57fddfc8649def167 (release)
timestamp 1599135103


Теперь включим загрузку с USB-накопителей, перейдя по пути Advanced Options > Boot Order > USB Boot.

138848165d628aa82545091f42ed599e.png


Включение загрузки с USB-накопителей

Мы занимаемся настройкой Raspberry Pi, а поэтому нам ничто не мешает зайти в раздел настроек Options > GPU Memory и изменить размер видеопамяти с 65 Мб на 16 Мб. Если Raspberry Pi не используется для работы с графическими программами, то мы, благодаря этому, ничего не потеряем, а лишь вернём системе немного оперативной памяти.

e67dd82c40a59450917a571c1404e3d8.png


А вы знали о том, что можно вернуть Raspberry Pi немного оперативной памяти?

Выключим Raspberry Pi.

Теперь воспользуемся компьютером, который применялся для записи ОС на SD-карту, или другим Raspberry Pi. Подключим к компьютеру NVMe-диск по USB и SD-карту с помощью кардридера. Я, для решения этой задачи, воспользовался компьютером Intel NUC с установленной на нём Linux.

После выполнения на этом компьютере команды lsblk должны быть выведены сведения о нашем диске:

alex@nuc7:~$ lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb                   8:16   1  29.7G  0 disk
├─sdb1                8:17   1   256M  0 part
└─sdb2                8:18   1  29.5G  0 part
sdc                   8:32   0 465.8G  0 disk
├─sdc1                8:33   0   256M  0 part
└─sdc2                8:34   0  29.5G  0 part


Теперь отзеркалим SD-карту на NVMe-диск. При этом нужно очень внимательно следить за правильностью имён накопителей. Иначе можно перезаписать загрузочный диск компьютера, на котором осуществляется подготовка NVMe-диска к работе:

sudo -I
root@nuc7:~# time dd if=/dev/sdb of=/dev/sdc bs=1M


Теперь нужно загрузить Raspberry Pi по USB и попробовать подключиться к плате:

ssh pi@raspberrypi.local


Далее, установим hdparm для исследования производительности диска:

sudo apt install -qy hdparm


Проверим скорость работы диска.

25d9820bf49a713fd09e3fb3a4960641.png


Хороший прирост производительности в сравнении с SD-картой!

Попробуем записать на диск файл размером 500 Мб из памяти:

pi@raspberrypi:~ $ dd if=/dev/zero of=test bs=1048576 count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 2.63385 s, 199 MB/s
pi@raspberrypi:~ $


Правда, если сравнить это с тем, что показывает Samsung EVO 970 Plus на моём шестиядерном Intel NUC, то это будет, так сказать, просто небо и земля.

07765c992d01b971a4707ccc796be179.png


Исследование производительности разных дисков и интерфейсов

Если посмотреть на скорость буферизованного чтения данных, то очевидным становится то, что интерфейс USB3 Raspberry Pi не даёт диску работать в полную силу:

  • M.2 SSD, подключённый по USB3 — 33,94 Мб/с
  • NVMe-диск, подключённый по USB3 — 344 Мб/с
  • NVMe в компьютере, подключённый по PCIe — 2531 Мб/с


Интересно то, что на той же операции SD-карта даёт результаты, которые лучше, чем результаты M.2 SSD, а именно — 43,35 Мб/с.

Тут хочется отметить то, что у нас есть шанс раскрыть потенциал NVMe-дисков тогда, когда широко распространится плата CM4 (Raspberry Pi Compute Module 4), имеющая один PCIe-канал. К ней можно будет напрямую подключать подобные диски. Вот видео, в котором идёт речь о CM4 и о различных возможностях ввода-вывода платы.

Итоги


Теперь в вашем распоряжении есть новое хранилище данных для Raspberry Pi, более быстрое и надёжное, чем SD-карта.

Планируете ли вы подключить NVMe-диск к Raspberry Pi?

8xzqbhb0at3_pjylb5c4366w_t8.png

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru