最近終於完成了第一組 NAS(Network Attached Storage)系統的設置。過去,我一直使用 Google Drive 作為主要資料儲存方式,後來移到 Seagate One Touch HDD 外接硬碟,但經常因為操作不慎而覆寫資料,外加對其穩定性不夠信任,一直讓我很想轉移到 NAS,然而預算總是很吃緊(窮),最近終於下定決心,就當作一次性消費給他買下去,畢竟這種東西肯定是越早買越好,不然對雲端服務的依賴性只會越來越強。

選擇與規劃

在規劃階段考慮了幾個方案。群暉那樣專用 NAS 主機雖然方便,開箱即可使用,但因為更喜歡自己動手組裝並安裝作業系統1的過程。因此,最後選擇了 CM3588 NAS SDK 的解決方案 2,是 ARM based 的 RK3588 SoC(四核 Cortex-A76 + 四核 Cortex-A55 架構),並配備 4 條 M.2 插槽,足夠以 RAID5 的配置充分利用硬碟容量同時確保一定的容錯能力。

散熱與效能表現

使用過程中,散熱是需要注意的問題, 可能影響硬碟壽命。雖然待機時 CPU 的使用率保持在 10% 以下,但偶爾散熱片會達到 48.1°C,M.2 SSD 平時保持室溫,工作時溫度會升至 38°C。因此主動冷卻可能是必要的,但機殼只可以在 CPU 散熱片加的風扇,但是插上了卻不會轉動: 還特地跑附近電料行請他們幫忙測試,目前懷疑是 PWM 控制少了,看這個 kernel patch 應該有對應的驅動要打開?… 先留個坑,好險 FriendlyElec 的軟體支援做得相當不錯,要自己編譯 kernel 有提供 v6.1 的原始碼及指令

後來在 dts 中搜尋 “fan” 找到一些資訊:

dtc -I fs /proc/device-tree -O dts -o cm3588.dts
pwm-fan {  
  rockchip,hold-time-ms = <0x7d0>;  
  cooling-levels = <0x00 0x23 0x40 0x64 0x96 0xff>;  
  rockchip,temp-trips = <0xc350 0x01 0xd6d8 0x02 0xea60 0x03 0xfde8 0x04 0x11170 0x05>;  
  compatible = "pwm-fan";  
  status = "okay";  
  phandle = <0x49c>;  
  pwms = <0x1cc 0x00 0xc350 0x00>;  
  #cooling-cells = <0x02>;  
  fan-supply = <0x72>;  
};

其中 rockchip,temp-trips 代表攝氏 50 到 70 度對應的 PWM 冷卻狀態3, 所以 CPU 溫度不夠高是不會運轉的, 可能可以重編 DTS,比如說 35 度就開始旋轉,之後有空再玩吧, 板子上有 debug UART 應該是可以進到 U-Boot 的。

成本與效益的權衡

整套系統的採購清單約 13,000 新台幣:

購買平台物件價格
FriendlyElecCM3588 PlusUS$179
RK3588 SoM (16GB RAM - 64GB eMMC)US$125
NAS KitUS$35
12V 4A Universal Power AdapterUS$10
Shipping feeUS$9
PChome4條 MSI SPATIUM M371 1TB NVMe M.2 SSD (NT$1590/條)NT$6,360
AliexpressMetal Aluminum CaseNT$860
Case + FanNT$583
Shipping feeNT$277
Total: NT$13,120

雖然體積小是優勢,但相比商用 NAS,其實在 C/P 值上並不算高。乙太網口的傳輸速度 2.5Gbps 是瓶頸,但目前對我的需求已經足夠。以 4 條 SSD 組成 RAID5 配置後,實際容量約 3TB。與雲端儲存相比,這套系統需要 2.5 年才能回收成本。不過,如果未來再添購一台 NAS,屆時可以將這組系統轉為備份空間。

結語

過程還是比較有成就感,雖然成本不低,但對於熱愛動手組裝與探索技術細節的人來說或許值得。

Footnotes

  1. 作業系統是 OpenMediaVault, 是 Debian-based 的系統,可以支援 Software RAID

  2. 其他候選的平台有同一個 SoC 的 Radxa ROCK 5 ITX, x86 的 N100 的NVMe 擴展板 或著是 RISC-V based 的 Milk-V Jupiter 加上這種 SATA 擴展板,但附近的二手電腦買不到足夠這麼多 SATA 電供的機殼,只好放棄…

  3. Rockchip 的下游 kernel 中的 device-tree binding