Orange Pi 5にNVMe SSDを接続してUbuntu ServerをNVMe SSDにインストールする

Posted by 雅楽斎 on Wednesday, July 12, 2023

TOC

以下の記事の続きです。

Orange Pi 5のOSをJoshua Riek氏のビルドするUbuntu Serverにスイッチ、簡易温度測定

そもそものOrange Pi 5でのM.2スロットの注意

RK3588Sを搭載しているOrange Pi 5ですが、M.2スロットがボードの裏面にあり、ここにSSDを接続できます。1

ですが、このM.2スロットがPCI Express 2.0の1レーンで接続されているので、なかなかの低速でしか使えません。

どのくらいの低速かというと、PCI Express 2.0の転送レートは理論値は1レーンあたり5Gbpsで、8b10bで通信をするので実効値の上限は4Gbpsです。

他方、SATA3の通信速度は6Gbpsであり、こちらも8b10bで通信をするので実効値の上限は4.8Gbpsです。

つまり、Orange Pi 5のM.2スロットの通信速度はSATA3よりも遅い。ということを前提にしてNVMe SSDを使うことになります。2

なので、今回は十分に遅い通信速度でSSDを繋ぐことから読み書き時の発熱はかなり小さいだろうという目論見でTBW重視でSSDを選びました。

今回のSSDはこちら!色々いわくつきのSiliconPowerのP34A80 1TB(SP001TBP34A80M28)

SP P34A80 PCIe Gen 3x4 M.2 2280 SSD_Compact and case-less for ultrabooks or tablet PCs

なぜこれを選んだかというのは理由が様々あるわけですが、今回これを選んだのは

だからです。逆になぜいわくつきなのかというと

  • 同じ品番なのにNANDチップがメーカーごと変わる
  • 同じ品番なのに片面実装になったり両面実装になったりする
  • 中国共産党・人民解放軍と関係があると言われていてアメリカで禁輸措置が取られているYMTC(长江存储科技有限责任公司)のNANDチップが使われていた

という話題に事欠かないSSDです。NANDチップがロットで変わることを考えると信頼性については疑問が残りますが、今回はそもそも読み込み3.4GB/s、書き込み3GB/sの高速SSDをSATA3よりも遅い超低速環境で使うので、問題があったとしても顕在化しないだろうと高を括っている部分はあります。

Orange Pi 5とGeekworm N506に取り付け

これをまずはOrange Pi 5に取り付けて、その後Geekworm N506に取り付けます。

ちなみに両面実装でした。仕様に書かれてるDRAMキャッシュは表面実装で間に合うのかな?それとも裏面分はDRAMキャッシュなし?

NANDチップはYMTCのロゴが見えるので、やっぱりアメリカで禁輸措置の取られてるYMTCなのかな?東芝の64層3D TLC NAND(BiCS 3)ではありませんでした。

「YA2070701」「CAA 2244」「YMN0BTE1B1JC3B」は情報が見つかりませんでした。CAA 2244は製造ラインと2022年44週製造かな?

Orange Pi 5に取り付け

2242のサイズを超えているので、この跳ね上がった状態でOrange Pi 5への装着は完了です。

Geekworm N506に取り付け

Orange Pi 5をN506に取り付けるとこんな具合になります(仮どめ状態なのでネジ穴が真ん中になってないですがこのあと真ん中になります)

そして裏面のNANDチップはちょうど実装部分だけが上に何もない状態に。ここだけでもヒートシンク付けたほうがいいかな…

装着完了の図。SSDにヒートシンクを付けるべきかの是非ですが、ボードの下側の余裕が数mmしかないので付けれないものもあります。ケースの下側から風を送れれば十分だとは思います。

MicroSDで起動してSSDにUbuntuをインストール

SSDを装着したOrange Pi 5にこれまで通りMicroSDを挿して電源を入れると以前と変わらずMicroSDから普通にブートするので、諸々の作業をします。

SSDを認識しているか

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mtdblock0    31:0    0    16M  0 disk 
mmcblk1     179:0    0  59.6G  0 disk 
├─mmcblk1p1 179:1    0   512M  0 part /boot/firmware
└─mmcblk1p2 179:2    0  59.1G  0 part /
nvme0n1     259:0    0 953.9G  0 disk 

パーティションを切っていないので、デバイスだけ認識される状態でnvmeで始まる文字列が表示されていれば問題ないでしょう。

一応S.M.A.R.T値を見る

# apt-get install smartmontools
# smartctl /dev/nvme0 -a
smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.10.160-rockchip] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       SPCC M.2 PCIe SSD
Serial Number:                      230195305xxxxxx
Firmware Version:                   VB421D70
PCI Vendor/Subsystem ID:            0x10ec
IEEE OUI Identifier:                0x00e04c
Controller ID:                      1
NVMe Version:                       1.3
Number of Namespaces:               1
Namespace 1 Size/Capacity:          1,024,209,543,168 [1.02 TB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            500e04 c012070d10
Local Time is:                      Mon Jul 10 23:31:55 2023 JST
Firmware Updates (0x02):            1 Slot
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x0014):     DS_Mngmt Sav/Sel_Feat
Log Page Attributes (0x02):         Cmd_Eff_Lg
Maximum Data Transfer Size:         32 Pages
Warning  Comp. Temp. Threshold:     100 Celsius
Critical Comp. Temp. Threshold:     110 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     8.00W       -        -    0  0  0  0   230000   50000
 1 +     4.00W       -        -    1  1  1  1     4000   50000
 2 +     3.00W       -        -    2  2  2  2     4000  250000
 3 -     0.50W       -        -    3  3  3  3     4000    8000
 4 -   0.0090W       -        -    4  4  4  4     8000   30000

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         0

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        38 Celsius
Available Spare:                    100%
Available Spare Threshold:          32%
Percentage Used:                    0%
Data Units Read:                    19 [9.72 MB]
Data Units Written:                 0
Host Read Commands:                 443
Host Write Commands:                0
Controller Busy Time:               0
Power Cycles:                       2
Power On Hours:                     1
Unsafe Shutdowns:                   1
Media and Data Integrity Errors:    0
Error Information Log Entries:      0
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0

Error Information (NVMe Log 0x01, 8 of 8 entries)
No Errors Logged

新品のSSD感漂っていますね。

SSDにUbuntu Serverをインストール

私の場合はJoshua Riek氏のビルドしたUbuntu Serverを使っているので、このイメージをそのままSSDに焼き付けます。手順としてはEtcherでMicroSDに焼いたイメージファイルをddコマンドでSSDに焼くだけです。

https://github.com/Joshua-Riek/ubuntu-rockchip/releases

ここから落としたOrange Pi 5用のUbuntu Serverのイメージファイル(ubuntu-22.04.2-preinstalled-server-arm64-orangepi5.img.xz)をMicroSDに転送してrootユーザーで扱える場所に持っていきます(私はいつもSFTPでコピーしてます)

# xz -dc ubuntu-22.04.2-preinstalled-server-arm64-orangepi5.img.xz | dd of=/dev/nvme0n1 bs=4k
1563904+0 records in
1563904+0 records out
6405750784 bytes (6.4 GB, 6.0 GiB) copied, 51.9053 s, 123 MB/s
# sync

これでNVMe SSDから起動すれば初期設定に入れますが、ボード上のSPIを書き換えない限りMicroSD以外から起動できないみたいなのでSPIを書き換えます。

まずは現在のSPIをバックアップ。

# dd if=/dev/mtdblock0 of=/root/mtdblock0.bkup
32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 1.04916 s, 16.0 MB/s

これで/root/mtdblock0.bkupに現在のSPIがバックアップされるので、なにかおかしくなったらなんとかしてSPIを戻します。

Orangepi-config missing · Issue #41 · Joshua-Riek/ubuntu-rockchip · GitHub

このissueの一番下にあるrkspi_loader.zip( https://github.com/Joshua-Riek/ubuntu-orange-pi5/files/10889255/rkspi_loader.zip )をダウンロードして展開すると中に入っているrkspi_loader.imgをやっぱりMicroSDに転送してrootユーザーが扱える場所に持っていきます。この例ではrootユーザーのホームディレクトリに置いています。

# dd if=/root/rkspi_loader.img of=/dev/mtdblock0 conv=notrunc
32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 236.167 s, 71.0 kB/s

これが信じられないくらい遅くて4分かかるので、雑用でもしましょう。書き込みが終了したらOrange Pi 5はMicroSDが刺さっていない場合はNVMe SSDから起動するようになっています。

MicroSDが刺さっている場合はこれまで同様MicroSDから起動するらしいので、今後はMicroSDは不要です。Orange Pi 5の電源を落とします。

# shutdown -h now

MicroSDを抜いて起動したら、再び初期設定を行います。内容は以前Joshua Riek氏のビルドでMicroSDにインストールした時と同じです。sshログインはubuntu / ubuntuでログイン時にパスワード変更をさせられます。

rootユーザーのパスワード設定(su - root)でrootになるので

$ sudo passwd root

作業ユーザーの追加

su -でrootユーザーになってから

# adduser hogehoge

作業ユーザーをsudoグループに追加

# gpasswd --add hogehoge sudo

LAN内のapt-cacher-ngを参照させる

/etc/apt/apt.conf.d/02cacher-ngを以下の内容で作成

Acquire::http::Proxy "http://192.168.1.210:3142/";

aptの初回更新

# apt-get update
# apt-get upgrade

ロケールを日本に設定

$ timedatectl set-timezone Asia/Tokyo
==== AUTHENTICATING FOR org.freedesktop.timedate1.set-timezone ===
Authentication is required to set the system timezone.
Multiple identities can be used for authentication:
 1.  Ubuntu (ubuntu)
 2.  ,,, (hogehoge)
Choose identity to authenticate as (1-2): 2
Password: 
==== AUTHENTICATION COMPLETE ===

ひとまずOrange Pi 5に特有の初期設定についてはこれで終了です。

簡易温度チェック

恐怖の時間がやってきました。SSDを付けた状態のCPU温度チェックです。

CPU温度は以下のコマンドで取得します。

$ echo `cat /sys/class/thermal/thermal_zone0/temp` / 1000 | bc
38

なお、今回の室温は32度です。既にMicroSDの時より室温比で2度高いです。

CPU負荷をかけるコマンドは以下で行います。終了時はCtrl+cで停止します。

$ openssl speed -multi `grep processor /proc/cpuinfo|wc -l`

MicroSD運用の時と同じ時間で計測しました。

負荷時間CPU温度
(室温32度、SSD運用)
CPU温度
(室温31度、MicroSD運用)
15秒56度43度
40秒71度50度
60秒73度54度
90秒70度54度

なかなか如実に熱いです。想像以上だったのでもう一回回してCPU温度ではなくS.M.A.R.Tで表示されるTemperatureを見てみましたがこちらはそれぞれ38度、39度、39度、40度となっていてSSDからの発熱はない(CPU負荷を見てるので理想の結果ではあるんですが)ということになって、そうするとOrange Pi 5は実は基板の裏側から放熱してるところにSSDを挿すと蓋をした状態になってるのかなとか色々考えられます。

また、60秒時点の73度から90秒時点の70度は目に見える下がり方なので、CPUのサーマルスロットリングが始まってるとしたらそれはそれで安心ではあるんですが。やっぱりもうちょっとSoC冷やしたいですね。

スポンサーリンク


  1. NVMe接続のSSDの方がSATA接続のM.2 SSDよりも手順が少ないです。なお今回はNVMe SSDでの手順です。 [return]
  2. ちなみに、Orange Pi 5 Plusの裏面のM.2スロットはPCI Express 3.0の4レーンなので、理論値32Gbps、実効値の上限(128b130b)は31.508Gbpsです。 [return]

comments powered by Disqus