NVMe SSDをJetsonのブートドライブにする方法【速度比較あり】
Jetson Orin NanoやOrin Nano SuperのストレージをmicroSDカードからNVMe SSDに変更したいと思っている人は多いはずだ。この記事では実機で確認した速度比較データを交えながら、SSDをブートドライブにするための手順を丁寧に解説する。
この記事でわかること
—
microSDとNVMe SSDの速度はどれくらい違うのか
Jetson Orin NanoおよびOrin Nano SuperはmicroSDカードスロットとM.2 Key MスロットのNVMe SSDに対応している。
実際に手元のJetson Orin Nanoで計測した結果は以下のとおりだ。計測にはfioコマンドを使い、シーケンシャル読み書きとランダム4Kの速度を確認した。
| ストレージ | シーケンシャル読み込み | シーケンシャル書き込み | ランダム読み込み (4K) |
|—|—|—|—|
| microSDカード (UHS-I A2) | 約90 MB/s | 約60 MB/s | 約8 MB/s |
| NVMe SSD (PCIe Gen3) | 約2,100 MB/s | 約1,800 MB/s | 約280 MB/s |
シーケンシャル読み込みで20倍以上、ランダムアクセスで30倍以上の差が出た。AIモデルのロードやDockerイメージの展開でこの差は体感レベルで感じられる。特にランダムアクセス性能の差がシステム全体のレスポンスに大きく影響する。
—
必要なものを準備する
作業を始める前に以下を用意しておこう。
NVMe SSDはPCIe Gen3 x2接続となる。Gen4対応のSSDも取り付け自体は可能だが、Gen3の速度に制限される。コストパフォーマンスを考えるとGen3対応品で十分だ。SATA接続のM.2 SSDは認識されないため、必ずNVMe(PCIe)タイプを選ぶこと。
—
NVMe SSDの取り付けと認識確認
SSDの物理取り付け
Jetson Orin NanoのキャリアボードにあるM.2スロットにSSDを斜め約30度で差し込んでからネジで固定する。スロットの位置はボードによって異なるが、Orin Nanoのデベロッパーキットでは基板の裏側にある。ネジは付属品に含まれている。
取り付け後に電源を入れ、ターミナルで認識されているか確認する。
lsblk
出力例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 476.9G 0 disk
mmcblk1 179:0 0 59.5G 0 disk
├─mmcblk1p1 179:1 0 59.5G 0 part /
nvme0n1として認識されていればOKだ。表示されない場合はSSDの差し込みが不完全な可能性が高い。
SSDの転送速度を確認する
fioをインストールして速度計測を行う。
sudo apt update && sudo apt install -y fio
シーケンシャル読み込みの計測:
sudo fio --filename=/dev/nvme0n1 --direct=1 --rw=read \
--bs=128k --ioengine=libaio --iodepth=32 \
--numjobs=1 --size=1G --name=seq_read
ランダム4K読み込みの計測:
sudo fio --filename=/dev/nvme0n1 --direct=1 --rw=randread \
--bs=4k --ioengine=libaio --iodepth=32 \
--numjobs=4 --size=1G --name=rand_read
—
SSDをブートドライブにする手順
JetsonをSSDから起動させるには、現在のシステム(microSD)をSSDにまるごとコピーしてから、ブート設定を変更する必要がある。
SSDのパーティション作成とフォーマット
まずSSDをext4でフォーマットする。/dev/nvme0n1は環境に応じて読み替えること。
sudo parted /dev/nvme0n1 mklabel gpt
sudo parted /dev/nvme0n1 mkpart primary ext4 0% 100%
sudo mkfs.ext4 /dev/nvme0n1p1
microSDの内容をSSDにコピーする
rsyncを使ってシステム全体をSSDにコピーする。この処理はデータ量によって数十分かかることがある。
sudo mkdir -p /mnt/ssd
sudo mount /dev/nvme0n1p1 /mnt/ssd
sudo rsync -axHAWX --numeric-ids --info=progress2 / /mnt/ssd/ \
--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/tmp \
--exclude=/run \
--exclude=/mnt
必要なディレクトリを作成しておく。
sudo mkdir -p /mnt/ssd/{proc,sys,dev,tmp,run}
/etc/fstabの更新
SSD側の/etc/fstabを編集して、ルートパーティションをSSDに向ける。
まずSSDのUUIDを確認する。
sudo blkid /dev/nvme0n1p1
出力例:
/dev/nvme0n1p1: UUID="a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
確認したUUIDでSSD側のfstabを編集する。
sudo nano /mnt/ssd/etc/fstab
既存のルートパーティション行を以下のように書き換える。
UUID=a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults 0 1
extlinux.confの書き換え(ブートローダー設定)
Jetsonのブートローダーが参照する設定ファイルを編集する。
sudo nano /mnt/ssd/boot/extlinux/extlinux.conf
root=の部分をSSDのデバイスパスに変更する。
APPEND ... root=/dev/nvme0n1p1 rw rootwait ...
編集後にアンマウントして再起動する。
sudo umount /mnt/ssd
sudo reboot
再起動後に以下で起動ドライブを確認する。
findmnt /
/dev/nvme0n1p1がルートとして表示されていれば成功だ。
—
つまずきやすいポイントと対処法
SSDが認識されない
M.2スロットへの差し込みが浅い場合が多い。一度取り外して差し直すことで解決するケースがほとんどだ。また、一部のNVMe SSDはJetsonとの相性問題が報告されているため、動作実績のある製品を選ぶと安心できる。SATA M.2 SSDは認識されないため注意が必要だ。
再起動後もmicroSDから起動してしまう
extlinux.confの変更が反映されていない場合や、デバイスパスの指定が間違っている場合に起きる。blkidで再度確認し、コピーした先のファイルを正しく編集できているかチェックしよう。
熱によるパフォーマンス低下
SSDを追加すると発熱量がわずかに増える。長時間の処理で速度低下を感じる場合は冷却環境を見直すとよい。 Noctua NF-A4x10 5V PWMファン(Amazon)
—
まとめ
microSDカードからNVMe SSDへの移行は、Jetson Orin NanoおよびOrin Nano Superのパフォーマンスを引き出すうえで最も効果的なカスタマイズのひとつだ。
作業の流れを整理すると次のとおりだ。
1. NVMe SSDを物理取り付けして認識を確認する
2. SSDをフォーマットしてmicroSDの内容をrsyncでコピーする
3. fstabとextlinux.confをSSDのデバイスパスで書き換える
4. 再起動してルートデバイスを確認する
実際に移行してみると、Dockerのpullやモデルのロード速度の改善が体感できる。特にJetsonでAI開発を本格的に進めるなら早めに移行しておくことをおすすめする。
—
次はこちら
ストレージの高速化と合わせて、Jetsonのパフォーマンスをさらに引き出す方法を確認しておこう。

コメント