在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 入手!
寫入 bootloader
要從 SSD 開機,必須將官方提供的 bootloader 寫入 SPI,文件中提供二種方式
- Rock 5B 開機進 linux 下 dd 指令
- 用 USB 連接電腦進 Maskrom mode
- Linux / Mac 用 rkdeveloptool 工具寫入
- Windows 用視窗版的 RKDevTool.exe 寫入
因我已將系統裝到 eMMC 中,以下以法一來實作。
- Rock 5B 進入 linux 後,下載官方 bootloader image。版本可能更新,以文件為準
$ wget https://dl.radxa.com/rock5/sw/images/loader/rock-5b/release/rock-5b-spi-image-g49da44e116d.img
- 下載空白 image
zero.img
,在正式寫入 bootloader 前清空 SPI 使用
$ wget https://dl.radxa.com/rock5/sw/images/others/zero.img.gz
- 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
- 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
sync
一下,強制所有資料都正確寫入,沒有 cache 在記憶體中
$ sync
這樣就完成了!寫入 bootloader 後還是可以從 eMMC 開機。但當 eMMC、SSD 都存在時,會優先從 eMMC 開機,這點需要注意一下!
搬移 eMMC 的資料至 SSD
因 eMMC 已經設置好系統,直接映像搬移比較省時。如果想要重新寫入系統映像至 SSD ,需要用 SSD 轉 USB 插入電腦,把他當 eMMC 一樣寫入即可,詳細參考文件。
搬移 eMMC 資料實作步驟如下:
- 製作 eMMC 映像檔,將 eMMC 從 Rock 5B 拔下,透過轉接卡連接電腦(Mac)
- 透過
dd
指令製作 img 檔。注意,eMMC 裝置代號因人而異,可先透過diskutil list
查詢
$ sudo dd if=/dev/rdisk4 of=rock5.img bs=1M
- 將映像
rock5.img
放入隨身碟(因檔案超過 4g,需使用 exFAT 格式) - 將 eMMC 和 SSD 裝上 Rock 5B,上電開機,此時 boot 入 eMMC 中的 Debian
- 官方的 Debian 尚未內建支援 exFAT,由以下指令自行安裝
$ sudo apt install exfat-fuse exfat-utils
- 用
lsblk
確認一下隨身碟裝置代號,假設是/dev/sda1
- 掛載隨身碟到資料夾
$ sudo mkdir /media/usb
$ sudo mount.exfat-fuse /dev/sda1 /media/usb
dd
到 SSD,用lsblk
確認 SSD 裝置代號,假設是/dev/nvme0n1
$ sudo dd if=/media/usb/rock5.img of=/dev/nvme0n1 bs=1M
從 SSD 開機並擴展磁區
- 斷電後將 eMMC 拔掉,並重新上電開機
- 因從 32G eMMC 作映像寫入 250G SSD,需要作分區擴展,否則只能使用 32G 的容量
- 此問題在 EC2 上直接用內建
growpart
+resize2fs
就能搞定,我們也用一樣的解決方案比較簡易。因一般 linux 沒有內建,需要先安裝
$ sudo apt install cloud-guest-utils
lsblk
一下,確認我們要調的系統分區是nvme0n1p2
第 2 分區
- 用
growpart
先讓分區長大(注意:是/dev/nvme0n1
)
$ sudo growpart /dev/nvme0n1 2
- 最後用
resize2fs
調整檔案系統(注意:是/dev/nvme0n1p2
)
$ sudo resize2fs /dev/nvme0n1p2
- 確認一下是否成功
$ df -h
測試效能
系統搬家完畢,立刻跑一下測試,看看效果如何!
參考此篇文章使用 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/s | Sequential READ | Sequential WRITE | Random 4K read QD1 | Mixed random 4K read and write QD1 with sync |
rock 5b nvme kingston A2000 250G | 1942 | 1032 | 41.4 | R / W = 2.868 / 2.852 |
Rock 5B eMMC | 322 | 190 | 11.3 | R / W = 1.441 / 1.44 |
Rock pi 4B eMMC | 164 | 91.5 | 19.8 | R / W = 3.744 / 3.727 |
Oracle VM | 51.1 | 52 | 7.769 | R / 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 時 SoC 待機溫度約莫 40 多,裝了 SSD 後兩者紛紛飆到 50 多快 60,室溫還是在 20 度附近!這樣夏天怎麼辦?趕緊多挖幾個散熱孔,最後降到 45、46
# 查 SoC 溫度
$ sensors
# 查 SSD 溫度與資訊
$ sudo nvme smart-log /dev/nvme0n1
覺得溫度還是有點高,於是上網隨便買了個 49 元便宜 SSD 散熱片給他裝上去,SSD 從 46 降到 40,SoC 從 45.3 小降至 43.5,土砲的效果還不錯!
這次的 Rock 5B 便宜 SSD 加裝效果蠻滿意的,能以 1000 塊有找的價格裝 250G PCIe Gen3 SSD 真是俗勾大碗,完全適合 便宜的小平台!
延伸閱讀
Rock 5B RK3588 開箱測試!
Rock 5 安裝系統的各種方法
Rock 5B RK3588 終於開放預購!$79 美金起!