簡介
上一次買工控機已經是2021年,在京東花了699人民幣買了一台J1900回來當路由器。買回來之後安裝OpenWRT也跑得蠻順暢的,不曾有過當機的狀況。但俗話說需求會自己長出來,自從開始折騰NAS之後,發現了一些缺點:
- 封閉式系統在硬體或軟體損毀時,要想救資料的難度比較高,通常是要再買同品牌的機器,或是去借機器。
- arm架構的docker image有時候官方沒有build,要自己build或找社群build的版本。
- 備份設計有缺陷,硬碟都在同一台NAS上,應該至少有一份在其他地方。
- 網路安全設計的不夠嚴謹,對外服務跟家用網路在同一個LAN上,拿到一台機器就可以再攻擊其他機器。
基於這些毛病開始說服自己治療換換病。基本的構想是把對外服務都架在DMZ網段上,用DMZ和家用網路隔離。可以用cloudflare tunnel的服務擺在同一台實體主機(backend server)。需要開port forwarding的服務擺在同一台實體主機(cdn server),實體主機內部用vm+docker做進一步的限制。
backend server預期是做all ssd+RAID5。跑jellyfin、kavita等服務。
cdn server預期是以HDD為主,不做RAID(秉持著資料噴掉就算了的原則),可以的話會放1-2片SSD做快取加速。跑transmission和任何檔案分享服務。
研究了好幾種方案:
- argon eon pi nas Pi 4 Model B,走USB3連接硬碟。最多2x3.5方案+2x2.5方案。主要還是太貴了,成本大約6000台幣。擔心效能太差放棄。
- SATA HAT方案 在Pi版上面蓋一個SATA擴充版,可以連接4-5顆SATA。但機殼的部分就要自己想辦法。整體成本估計要5000台幣。
- QNAS mini用N100開發板的6x2.5吋方案。主要麻煩的地方是機殼,3D列印代工加上要買一些額外的線材回來DIY。另外如果用PLA列印的話貌似沒有很耐熱。主板4000+機殼等DIY材料成本大約6000台幣。
- ODROID H3Intel N5105的開發板。原廠的機殼看起來是壓克力板材要自己組裝,有2x2.5吋或2x3.5吋的樣式。如果用m.2轉SATA擴充版的話就要自己處理機殼了。主板成本5000+機殼500(壓克力)-1500(3D列印)。
- 自組NAS機殼(迎廣MS04、寶藏盒、半人馬座、御夫座、喬思伯 N2)。共通特點是很好看、台灣都沒賣、由於重量問題運費比較貴。加上ITX主板整機成本大約10000-12000台幣。
- N100工控機 加上轉接版可以插5條m.2 SSD。成本不到5000台幣。
到這邊我也開始考慮用USB3外接陣列盒的方式,不但有獨立供電可以更加穩定,選擇也比較多。4bay的陣列盒大約3000元新台幣。
- DeskMini J4205:成本大約4500台幣,但這價格我都可以買到N100了…
- 國內的迷你主機:最便宜是MSI CUBI的N100,定價4999台幣。
- 天钡发布 R1 迷你主机,搭载英特尔N100 內建兩個3.5吋、一個m.2可以做快取、有USB3可以再外接陣列盒,成本不到5000台幣,就決定是它了。
參考了下列文章,最後我決定買暢網N100先鋒版當backend server。而cdn server買天鋇R1試試,留待下期開箱。
開箱篇
大部分網路上看到都是N100的開箱,但淘寶店N305也到貨了,想說要買就一次攻頂,直接選擇了N305準系統,沒想到竟然和N100有點差異。
從淘寶購買直郵送過來,大概五天。本體+轉接版將近1900人民幣、運費94.5人民幣,總計成本將近一萬台幣(準系統不含RAM+SSD)。
配件盒只裝了一個USB外接風扇。外盒裝本體,長這樣:
裡面的配件有兩條SATA線、變壓器、一堆螺絲,電源線是台灣適用的:
SATA供電同樣取自主機板,而且是特規的,只能用他附的這種線來連接。
如果要裝SATA的話,就要裸露一顆2.5吋在外面,暫時先不裝…
隨便買了五條1T的貨來上機用,每條1111元,目前的2T-4T以性價比來說沒有特別划算,還是等資料有那麼多再上2T。
因為PCIE通道不夠,這台nvme最多只能跑在gen 3x1,也就是將近1GB/s,所以效能不用買太好。
SD卡拿來裝OS開機用,這樣也可以讓ssd就單純是資料,有需要搬家的時候比較方便。
記憶體一般人應該插8/16G就夠了,但我有插好插滿強迫症所以買32G。
背面IO跟N100版一樣
但是正面IO變多了!原本N100版是沒有USB3.0介面的。
這樣就多了接10G網路卡或外接硬碟陣列盒的擴充性。
MicroSD卡就一樣是2.0的速度,這在後續裝機就需要一點耐心了。
主機板也跟N100有點不一樣,而且還沒有說明書,只能自己猜用途。另外有一個SATA插槽,這部分貌似在N100是沒有的。WiFi網路卡的位置已經變成轉接版,可以插一條m.2 PCIE SSD (gen3 x4)。
裝好之後疊疊樂,把轉接版鎖回去。
最後把一轉四的轉接版裝回去。廠家除了螺絲還附了四個絕緣墊片。
安裝篇
架構選擇
試了幾個系統都不滿意:
- unraid: 溫度稍微高就開始噴警告,加上snapshot管理功能好像很廢
- TrueNAS Scale: 想拿個root權限執行apt好像犯什麼大錯,鎖東鎖西的,可自訂性太低。
- openmediavault: 怎麼裝個docker這麼難。snapshot管理也沒有自動化UI,只能自己寫cron。
最後還是選pve,然後在VM裡面架設服務。
- NAS架在VM裡面,nvme要用PCI直通的方式掛載進去使用。
- 其他VM的硬碟使用iscsi從NAS裡面分享出來掛載。
- container需要的volume從NAS裡面用NFS分享,掛載在vm上以後用container bind mount進去。
另外選擇pve的原因也跟下一節的問題有關。
莫名其妙觸發關機
這台機器硬體不知道有什麼bug,會偶而觸發關機。看log是收到了關機按鍵的指令。大致如下:
-- Boot c4d8e459c3fb4448836ff2b8ce8db210 --
Nov 04 14:35:49 pve-n305 systemd[1]: Starting systemd-logind.service - User Login Management...
Nov 04 14:35:49 pve-n305 systemd-logind[847]: New seat seat0.
Nov 04 14:35:49 pve-n305 systemd-logind[847]: Watching system buttons on /dev/input/event2 (Power Button)
Nov 04 14:35:49 pve-n305 systemd-logind[847]: Watching system buttons on /dev/input/event1 (Power Button)
Nov 04 14:35:49 pve-n305 systemd-logind[847]: Watching system buttons on /dev/input/event0 (Sleep Button)
Nov 04 14:35:49 pve-n305 systemd[1]: Started systemd-logind.service - User Login Management.
Nov 04 14:36:49 pve-n305 systemd-logind[847]: New session 1 of user root.
Nov 04 14:36:52 pve-n305 systemd-logind[847]: Session 1 logged out. Waiting for processes to exit.
Nov 04 14:36:52 pve-n305 systemd-logind[847]: Removed session 1.
Nov 04 14:37:07 pve-n305 systemd-logind[847]: New session 3 of user root.
Nov 04 14:39:32 pve-n305 systemd-logind[847]: Session 3 logged out. Waiting for processes to exit.
Nov 04 14:39:32 pve-n305 systemd-logind[847]: Removed session 3.
Nov 04 15:24:57 pve-n305 systemd-logind[847]: New session 6 of user root.
Nov 04 15:24:58 pve-n305 systemd-logind[847]: Session 6 logged out. Waiting for processes to exit.
Nov 04 15:24:58 pve-n305 systemd-logind[847]: Removed session 6.
Nov 04 17:16:01 pve-n305 systemd-logind[847]: Power key pressed short.
Nov 04 17:16:01 pve-n305 systemd-logind[847]: Powering off...
Nov 04 17:16:01 pve-n305 systemd-logind[847]: System is powering down.
Nov 04 17:16:01 pve-n305 systemd-logind[847]: Power key pressed short.
Nov 04 17:16:01 pve-n305 systemd-logind[847]: Power key pressed short.
Nov 04 17:16:01 pve-n305 systemd[1]: Stopping systemd-logind.service - User Login Management...
Nov 04 17:16:01 pve-n305 systemd[1]: systemd-logind.service: Deactivated successfully.
Nov 04 17:16:01 pve-n305 systemd[1]: Stopped systemd-logind.service - User Login Management.
-- Boot 1a0d773d5e9c4e37bf11d78d13801435 --
誰沒事會一秒按三次關機鍵…,不管裝什麼系統都會遇到,只是pve比較方便查log。workaround的解法是從作業系統把它忽略。
修改 /etc/systemd/logind.conf
把這兩行註解拿掉,然後改成以下的值
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff
最後執行 systemctl restart systemd-logind
內顯sr-iov+直通
正常情況下如果把內顯直通給VM使用,等於把內顯控制權交出去,主機的畫面就看不到了,因此我們要用sr-iov讓內顯可以生出多個虛擬內顯,再搭配直通把虛擬內顯傳給vm使用,vm內部就可以使用內顯做硬解。
按照這邊的教學進行。我實測kernel 6.2編譯目前會失敗,因此退版到6.1。
apt update
apt search pve-kernel # 檢查有沒有6.1的版本號
apt install pve-kernel-6.1
proxmox-boot-tool kernel list
proxmox-boot-tool kernel pin 6.1.10-1-pve # 按照剛才list出來的6.1版本
重新啟動以後就可以執行一般的dkms編譯流程
虛擬機dkms
ubuntu的版本好像沒有設定這兩條,debian 11.7的kernel 6.5我看是有,所以可以跳過kernel重新編譯的步驟。
CONFIG_INTEL_MEI_PXP=m
CONFIG_DRM_I915_PXP=y
使用gre查看
grep I915_PXP /boot/config-6.5.0-3-amd64
都一樣的話可以直接走dkms編譯流程。但原本教學裡面會同時有stable和testing的源,我要把/etc/apt/source.list.d/stable.list移除才能正常執行,不然會出現很多版本衝突錯誤。
nvme SSD 直通
做完上面的內顯sr-iov + 直通以後,這邊應該不用再重新做一次,但如果只想設定nvme直通的話以下是步驟:
修改 /etc/default/grub
新增intel_iommu=on iommu=pt
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
執行 `update-grub
修改 `/etc/modules
新增
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
最後NAS vm的device應該如下,是選擇PCI Device而不是Hard Disk。這樣NAS才能看到是SMART資訊。
如果不確定要選哪條PCI的話,先執行lspci
看看在哪條通道上。