Возможности подсистемы хранения данных одноплатного компьютера Raspberry Pi можно расширить, подключив к нему NVMe-диск. Такие диски обычно подключают к PCIe, что даёт им потенциальную возможность считывать и записывать данные на скорости более 3000 Мб/с.
Я уже слышу слова критиков этой идеи, в частности, касающиеся реально достижимой скорости работы с данными, поэтому сразу сделаю оговорку.
Раскрыть весь потенциал NVMe-накопителя на Raspberry Pi 4 не удастся. Но у NVMe-диска есть пара преимуществ перед обычной SD-картой. Это — надёжность и скорость. Покупка подобного диска и адаптера к нему не потребует заметно больше средств, чем покупка более старого диска M.2. А если понадобится, то NVMe-диску можно найти и другое применение (ниже, при разговоре о CM4, я ещё к этому вернусь).
Если у вас имеется внешний SSD с интерфейсом USB или M.2-диск, то вы тоже можете воспользоваться этим руководством.
Поиск и сборка аппаратных компонентов
Вот список компонентов, которые использованы в этом проекте:
- Raspberry Pi 4 — в моём случае — версия с 8 Гб памяти.
- Официальный источник питания.
- SD-карта — карта размером 16-32 Гб нас вполне устроит.
- Кардридер для SD-карт
- USB-адаптер NVMe — обратите внимание на то, чтобы это была модель, поддерживающая USB3. Иначе скорость работы с данными будет ниже.
- NVMe-диск — M.2-диски выглядят почти так же, но у них две выемки, а не одна. Обычно скорость работы SSD-дисков измеряется сотнями Мб/с, а не тысячами.
Компоненты, готовые к сборке
Вставьте NVMe-диск в адаптер и подключите его к компьютеру для того чтобы быстро его проверить.
Внутренняя печатная плата не закреплена. Поэтому проверьте всё при открытом корпусе
Я мог бы выбрать и более быстрый диск, не 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
.
Включение загрузки с USB-накопителей
Мы занимаемся настройкой Raspberry Pi, а поэтому нам ничто не мешает зайти в раздел настроек Options > GPU Memory
и изменить размер видеопамяти с 65 Мб на 16 Мб. Если Raspberry Pi не используется для работы с графическими программами, то мы, благодаря этому, ничего не потеряем, а лишь вернём системе немного оперативной памяти.
А вы знали о том, что можно вернуть 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
Проверим скорость работы диска.
Хороший прирост производительности в сравнении с 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, то это будет, так сказать, просто небо и земля.
Исследование производительности разных дисков и интерфейсов
Если посмотреть на скорость буферизованного чтения данных, то очевидным становится то, что интерфейс 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?
Автор: ru_vds