Skip to main content
Crucial P3 Plus Gen4 NVMe SSD を購入

Crucial P3 Plus Gen4 NVMe SSD を購入

Table of Contents

このブログを Amazon EC2 から Raspberry Pi 5 に移行したことに伴い、公開Webサーバーのアクセス頻度を壊れやすいmicroSDカードで運用するのはちょっと怖かったので、Crucial P3 Plus Gen4 NVMe SSD 500GB と Geekworm X1001 PCIe to M.2 Key-M NVMe SSD PIP TOP for Raspberry Pi 5 を購入してSSD化しました。

Raspberry Pi SSD Kit という純正SSDもあるのですが、512GBの読取りが 50k IOPS、書込みが 90k IOPS な一方、Crucial P3 Plus 500GB の読取りは 350k IOPS、書込みは 460k IOPS 1 と段違いに良いです。ラズパイ5側がボトルネックになるので、ラズパイ5で使う分にはどちらも変わらないのですが、いつか他の機種に流用することがあった場合のことを考えて Crucial P3 Plus にしました。価格は Crucial P3 Plus のほうが安いです。読取りスループットが4,700MB/sから3,500MB/sに落ちるP3でも良かったのですが、300円しか変わらなかったので P3 Plus にしました。

私はEC2とラズパイを同じOSで動かしたいため、ラズパイにも Ubuntu 24.04 を入れています。Geekwormのマニュアルには「Only support Raspberry Pi OS (Bookworm) version, Raspberry Pi OS bullseye or Ubuntu or Home Assistant OS is NOT supported(Raspberry Pi OS (Bookworm) バージョンのみサポート。Raspberry Pi OS bullseye またはUbuntu、Home Assistant OS はサポートされていません)」とある一方、Linux Kernel 6.6 で修正されたという情報 2 もありました。ラズパイ5 + Ubuntu 24.04 + Geekworm X1001 + Crucial P3 Plus という構成で動作するかどうか不安がある状況です。

しかし結果としては、Ubuntu 24.04.1 (Kernel 6.8.0) では何の問題もなく認識できました。

tats@fox:~$ sudo gdisk -l /dev/nvme0n1
GPT fdisk (gdisk) version 1.0.10

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.
Disk /dev/nvme0n1: 976773168 sectors, 465.8 GiB
Model: CT500P3PSSD8
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 83BC35CF-B95D-4A5E-A2A1-2E3FE0CB2A08
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 976773101 sectors (465.8 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

組み立て自体は簡単ですが、純正の Raspberry Pi Case for Raspberry Pi 5 には入らなくなってしまいました。純正の Raspberry Pi Active Cooler とは併用できます。

ベンチマーク
#

今まで使っていた SanDisk High Endurance microSD Card 64GB SDSQQNR-064G-GH3IA との性能比較をしてみましょう。ベンチマークツールにはfioを使い、シナリオにはCrystalDiskMark風の fio-CrystalDiskMark.md を使いました。

SanDisk High Endurance microSD Card 64GB
#

SEQ1M-Q8T1-Read        90.628 MB/s  
SEQ1M-Q8T1-Write       31.621 MB/s  
SEQ128K-Q32T1-Read     77.787 MB/s  
SEQ128K-Q32T1-Write    30.088 MB/s  
RND4K-Q32T16-Read      9.282 MB/s  
RND4K-Q32T16-Write     2.065 MB/s  
RND4K-Q1T1-Read        9.952 MB/s  
RND4K-Q1T1-Write       2.643 MB/s

Crucial P3 Plus Gen4 NVMe SSD 500GB
#

SEQ1M-Q8T1-Read        464.421 MB/s  
SEQ1M-Q8T1-Write       413.773 MB/s  
SEQ128K-Q32T1-Read     463.819 MB/s  
SEQ128K-Q32T1-Write    414.572 MB/s  
RND4K-Q32T16-Read      445.108 MB/s  
RND4K-Q32T16-Write     350.609 MB/s  
RND4K-Q1T1-Read        66.320 MB/s  
RND4K-Q1T1-Write       99.209 MB/s

RND4K-Q32T16-Readが50倍、RND4K-Q32T16-Writeが175倍という圧倒的性能向上です。ただし、ラズパイ5がボトルネックになっていて、P3 Plus のカタログ値を出せていません。

SSDをブートドライブにする方法
#

このままセカンダリドライブとしてSSDを運用することもできますが、SSDをプライマリドライブにしてmicroSDカードなしの構成に変更します。今回は Running Raspbian from USB Devices : Made Easy - Raspberry Pi Forums で配布されているusb-boot.zipを使いました。2016年の書込みで古すぎると最初は思いましたが、ラズパイ5にも言及しており、ずっと最初の書込みを更新しているようです。

usb-boot.zipの中には二つのスクリプトが入っています。usb-bootは名前にも関わらず NVMe SSD にも対応しているSDカード以外からブートさせるためのスクリプトです。sdc-bootはSDカードからブートさせるためのスクリプトです。usb-bootはファイルコピーからすべて実行させることも可能です。なお、ddを使っている情報も見受けられますが、マウントしていて書込みが発生しているmicroSDカードからddすると壊れたファイルが書き込まれるので、マウントしているmicroSDカードからddしてはいけません。

tats@fox:~$ cd /tmp/  
tats@fox:/tmp$ unzip usb-boot.zip  
Archive:  usb-boot.zip  
  inflating: mbr2gpt  
  inflating: sdc-boot  
  inflating: set-partuuid  
  inflating: usb-boot  
  inflating: usb-boot.txt  
tats@fox:/tmp$ chmod 755 usb-boot sdc-boot  
tats@fox:/tmp$ sudo mv usb-boot /usr/local/sbin/  
tats@fox:/tmp$ sudo mv sdc-boot /usr/local/sbin/  
  
tats@fox:~$ sudo usb-boot  
  
Use SD card to boot the USB device? <No>  
Select the USB mass storage device to boot (*) </dev/nvme0n1>  
Replicate BOOT/ROOT contents from /dev/mmcblk0 to /dev/nvme0n1? <Yes>  
Select the partition table type to use (MBR = 2TB Maximum) (*) <MBR>  
Do you wish to continue? <Yes>  
  
Replicating BOOT/ROOT contents from /dev/mmcblk0 to /dev/nvme0n1 (this will take a while)  
  
BOOT/ROOT contents replicated from /dev/mmcblk0 to /dev/nvme0n1  
  
SD card must be removed to boot the USB device

最初にいくつかの質問に答えるだけで全てのセットアップが完了します。SDカードを抜いて再起動して、立ち上がってきたら成功です。

tats@fox:~$ df  
Filesystem      Size  Used Avail Use% Mounted on  
tmpfs           794M  3.5M  790M   1% /run  
/dev/nvme0n1p2  457G   28G  407G   7% /  
tmpfs           3.9G     0  3.9G   0% /dev/shm  
tmpfs           5.0M     0  5.0M   0% /run/lock  
/dev/nvme0n1p1  510M  182M  329M  36% /boot/firmware  
tmpfs           794M   16K  794M   1% /run/user/2000  
  
tats@fox:~$ cat /etc/fstab  
PARTUUID=c4df567d-02    /       ext4    defaults        0       1  
PARTUUID=c4df567d-01    /boot/firmware  vfat    defaults        0       1  
# a swapfile is not a swap partition, no line here  
#   use  dphys-swapfile swap[on|off]  for that

デフォルトでは PCI Express 2.0 x1 として接続されますが、安定性と引き換えに PCI Express 3.0 x1 で動かすことで性能向上させることもできます。その場合はconfig.txtに以下のように書き込んで再起動します。

echo 'dtparam=pciex1_gen=3' | sudo tee -a /boot/firmware/config.txt

消費電力
#

私のラズパイ5は5V/4AのPoEスプリッターを使ってPoEで動かしているため、usb-bootでのファイルコピー中に消費電力について見てみました。結果としては6W程度でだいぶ余裕がある状況でした。

まとめ
#

このブログをRaspberry Pi 5に移行する際、microSDカードよりも高速な Crucial P3 Plus SSD と Geekworm X1001 アダプターを使ってSSD化しました。Ubuntu 24.04 でも問題なく認識され、microSDカードに比べて読み書き速度が大幅に向上しています。

usb-bootスクリプトを使って、SSDをブートドライブに設定しました。microSDカードを抜いた状態でSSDから起動するよう構成を変更しています。また、PCI Express 3.0 x1 で動作させることで、さらなる性能向上が可能です。消費電力も6W程度と、PoEスプリッターで十分に賄えるレベルでした。

Crucial P3 Plus Gen4 NVMe SSD 500GB
Crucial P3 Plus Gen4 NVMe SSD 500GB Amazon Amazonで価格を見る
Geekworm X1001 PCIe to M.2 Key-M NVMe SSD PIP TOP for Raspberry Pi 5
Geekworm X1001 PCIe to M.2 Key-M NVMe SSD PIP TOP for Raspberry Pi 5 Amazon Amazonで価格を見る
ブランドCrucial
製品名P3 Plus Gen4 NVMe SSD 500GB
型番CT500P3PSSD8JP
購入先Amazon
購入価格4,960円
購入日2024-11-27
ブランドGeekworm
製品名X1001 PCIe to M.2 Key-M NVMe SSD PIP TOP for Raspberry Pi 5
購入先Amazon
購入価格2,540円
購入日2024-11-27
Tats Shibata
Author
Tats Shibata
シバタツ(柴田竜典)はデータベーステクノロジー、パフォーマンスエンジニアリング、プリセールスにおいて20年以上の経験を持ちます。アマゾンウェブサービスジャパンの本部長 / Head of Japan Data Solutions Architecture として、彼はデータベースとアナリティクスの技術エキスパートからなるチームを率い、様々な業界のAWSカスタマーにソリューションを提供しています。本記事での発言は個人の見解です

Related