Rock 5B 開箱後,已經替換 Rock pi 4B 成為我的主力 home server,但還是用 eMMC 作系統碟。看網友們紛紛直上 SSD 秀速度讓我心癢癢,於是開始尋覓適合的 SSD 來升級!

購買 SSD

Rock 5B 僅支援 PCIe Gen3,現在(2023)主流普遍是 PCIe Gen4,插上去反而降速,便宜的大多又是 QLC。

為了提高 C/P 值,我開始尋找 PCIe Gen3 的 SSD,最後找到 Kingston A2000 250G,Gen3 外且是 TLC,蝦皮普遍賣 700~900,俗!

可能是上一代產品的關係,量已不多,最後以 888 入手!

Rock 5B SSD 效能實測與資料搬移

寫入 bootloader

要從 SSD 開機,必須將官方提供的 bootloader 寫入 SPI,文件中提供二種方式

  1. Rock 5B 開機進 linux 下 dd 指令
  2. 用 USB 連接電腦進 Maskrom mode
    1. Linux / Mac 用 rkdeveloptool 工具寫入
    2. Windows 用視窗版的 RKDevTool.exe 寫入

因我已將系統裝到 eMMC 中,以下以法一來實作。

  1. Rock 5B 進入 linux 後,下載官方 bootloader image。版本可能更新,以文件為準
$ wget https://dl.radxa.com/rock5/sw/images/loader/rock-5b/release/rock-5b-spi-image-g49da44e116d.img
  1. 下載空白 image zero.img,在正式寫入 bootloader 前清空 SPI 使用
$ wget https://dl.radxa.com/rock5/sw/images/others/zero.img.gz
  1. dd 清空 SPI,約需等三分鐘
$ sudo dd if=zero.img of=/dev/mtdblock0

32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 189.637 s, 88.5 kB/s
  1. dd 正式寫入 bootloader,也需等三分鐘
$ sudo dd if=rock-5b-spi-image-g49da44e116d.img of=/dev/mtdblock0

32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 188.711 s, 88.9 kB/s
  1. sync 一下,強制所有資料都正確寫入,沒有 cache 在記憶體中
$ sync

這樣就完成了!寫入 bootloader 後還是可以從 eMMC 開機。但當 eMMC、SSD 都存在時,會優先從 eMMC 開機,這點需要注意一下!

搬移 eMMC 的資料至 SSD

因 eMMC 已經設置好系統,直接映像搬移比較省時。如果想要重新寫入系統映像至 SSD ,需要用 SSD 轉 USB 插入電腦,把他當 eMMC 一樣寫入即可,詳細參考文件

搬移 eMMC 資料實作步驟如下:

  1. 製作 eMMC 映像檔,將 eMMC 從 Rock 5B 拔下,透過轉接卡連接電腦(Mac)
  2. 透過 dd 指令製作 img 檔。注意,eMMC 裝置代號因人而異,可先透過 diskutil list 查詢
$ sudo dd if=/dev/rdisk4 of=rock5.img bs=1M
  1. 將映像 rock5.img 放入隨身碟(因檔案超過 4g,需使用 exFAT 格式)
  2. 將 eMMC 和 SSD 裝上 Rock 5B,上電開機,此時 boot 入 eMMC 中的 Debian
Rock 5B SSD 效能實測與資料搬移
  1. 官方的 Debian 尚未內建支援 exFAT,由以下指令自行安裝
$ sudo apt install exfat-fuse exfat-utils
  1. lsblk 確認一下隨身碟裝置代號,假設是 /dev/sda1
  2. 掛載隨身碟到資料夾
$ sudo mkdir /media/usb
$ sudo mount.exfat-fuse /dev/sda1 /media/usb
  1. dd 到 SSD,用 lsblk 確認 SSD 裝置代號,假設是 /dev/nvme0n1
$ sudo dd if=/media/usb/rock5.img of=/dev/nvme0n1 bs=1M

從 SSD 開機並擴展磁區

  1. 斷電後將 eMMC 拔掉,並重新上電開機
  2. 因從 32G eMMC 作映像寫入 250G SSD,需要作分區擴展,否則只能使用 32G 的容量
Rock 5B SSD 效能實測與資料搬移
  1. 此問題在 EC2 上直接用內建 growpart + resize2fs 就能搞定,我們也用一樣的解決方案比較簡易。因一般 linux 沒有內建,需要先安裝
$ sudo apt install cloud-guest-utils 
  1. lsblk 一下,確認我們要調的系統分區是 nvme0n1p2 第 2 分區
Rock 5B SSD 效能實測與資料搬移
  1. growpart 先讓分區長大(注意:是 /dev/nvme0n1
$ sudo growpart /dev/nvme0n1 2
Rock 5B SSD 效能實測與資料搬移
  1. 最後用 resize2fs 調整檔案系統(注意:是 /dev/nvme0n1p2
$ sudo resize2fs /dev/nvme0n1p2
Rock 5B SSD 效能實測與資料搬移
  1. 確認一下是否成功
$ df -h
Rock 5B SSD 效能實測與資料搬移

測試效能

系統搬家完畢,立刻跑一下測試,看看效果如何!

參考此篇文章使用 fio 進行測試,測項如下:

  • Sequential READ speed with big blocks QD32  (this should be near the number you see in the specifications for your drive):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Sequential WRITE speed with big blocks QD32  (this should be near the number you see in the specifications for your drive):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Random 4K read QD1  (this is the number that really matters for real world performance unless you know better for sure):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Mixed random 4K read and write QD1 with sync  (this is worst case performance you should ever expect from your drive, usually less than 1% of the numbers listed in the spec sheet):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

結果如下:

MB/sSequential READSequential WRITERandom 4K read QD1Mixed random 4K read and write QD1 with sync
rock 5b nvme kingston A2000 250G1942103241.4R / W = 2.868 / 2.852
Rock 5B eMMC32219011.3R / W = 1.441 / 1.44
Rock pi 4B eMMC16491.519.8R / W = 3.744 / 3.727
Oracle VM51.1527.769R / W = 2.081 / 2.084

同時還拉了 Rock pi 4B 和 Oracle VM 來參一腳,看起來 sequential 屌打 eMMC 啊!另外同一顆 eMMC 在 Rock 5B 循序表現也比 Rock pi 4B 好兩倍,看起來在 4B 時 SoC 餵不飽 eMMC

測了一下部落格 wordpress 頁面的 Waiting for server response,關掉 Cloudflare cache,原本 eMMC 大約要 1 ~ 1.5 秒,現在平均能降到 0.8 ~ 1 秒!改進幅度不錯!

其中 800 毫秒的延遲還包含跨國傳輸(免費版 Cloudflare 台灣沒有 CDN,資料要先過美國 server 再回來)

Rock 5B SSD 效能實測與資料搬移

加裝散熱片

我的 Rock 5B 使用被動散熱,上面簡單蓋一個挖透氣孔的紙盒防塵,尚未裝 SSD 時 SoC 待機溫度約莫 40 多,裝了 SSD 後兩者紛紛飆到 50 多快 60,室溫還是在 20 度附近!這樣夏天怎麼辦?趕緊多挖幾個散熱孔,最後降到 45、46

# 查 SoC 溫度
$ sensors

# 查 SSD 溫度與資訊
$ sudo nvme smart-log /dev/nvme0n1
Rock 5B SSD 效能實測與資料搬移

覺得溫度還是有點高,於是上網隨便買了個 49 元便宜 SSD 散熱片給他裝上去,SSD 從 46 降到 40,SoC 從 45.3 小降至 43.5,土砲的效果還不錯!

Rock 5B SSD 效能實測與資料搬移
Rock 5B SSD 效能實測與資料搬移

這次的 Rock 5B 便宜 SSD 加裝效果蠻滿意的,能以 1000 塊有找的價格裝 250G PCIe Gen3 SSD 真是俗勾大碗,完全適合 便宜的小平台!

延伸閱讀

Rock 5B RK3588 開箱測試!
Rock 5 安裝系統的各種方法
Rock 5B RK3588 終於開放預購!$79 美金起!

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。