NAS 自架之旅:架設 TrueNAS on Proxmox

6 min read

在上一篇有提到,我最後買了四顆 16TB 硬碟加上 Dell Precision Tower 3620 主機,但我刷下去之後才發現訂單上面寫不提供宅配,看了一下賣家的地址在中山附近,於是乎開始尋找中山還有哪一家拉麵還沒吃過,準備要搭 Uber 去迎接我人生中的第一台 NAS 了,結果隔了沒幾天,NAS 就宅配到我的公司了,阿,不是說沒有宅配,我都找好拉麵了(摔碗)。

終於要開始來灌系統了,預計是要先灌 Proxmox,再把 TrueNAS 裝在 Proxmox 裡面,最後把硬碟直接 Pass Through 進去就完成了。這樣除了 TrueNAS 之外,我還能在 Proxmox 上面開其他虛擬機,把原本我放在 VPS 跑的東西也搬回來自己的機器上。

安裝 Proxmox

一開始灌 Proxmox 就有很多問題。首先,在 Proxmox 安裝選單中要選擇目標硬碟時,我竟然只看到兩顆 16TB 的硬碟可以選,一般系統應該都會裝在 SSD 上,但我的 SSD 去哪裡了。又重開機進 BIOS 找一下設定,發現在某個設定中 SATA 的選項竟然是 Disabled 的,把他改成 AHCI 就可以了 (如下圖,圖來自 https://www.youtube.com/watch&v=IM9xbnzmDbE)。接下來就順順的裝完 Proxmox 了。

Dell BIOS

安裝 TrueNAS (第一次嘗試)

再來就是要在 Proxmox 上面加一台 TrueNAS 虛擬機。我是看 https://www.youtube.com/watch?v=M3pKprTdNqQ 這個教學,有兩種方式把硬碟 pass through 進去,第一種方式是如果有 controller 的話,可以直接加一個 PCI Device 進去。不行的話,第二種方式是進去 Proxmox 下指令,把硬碟一個個用 qm set 加進去。為了確定我的硬碟是怎麼接在我的主機板上的,我把機殼打開來看,看了半天發現四顆硬碟都接到了一張 RAID Controller (我買二手的主機,是別人組裝的),然後再插在主機板的 PCI 插槽上面。所以我首先嘗試把 RAID Controller 當作 PCI Device 加到虛擬機上,但是他一直噴出 cannot prepare PCI pass-through, IOMMU not present。後來我就放棄了,按照第二種方式把硬碟一個個加上去,接著就順利的把 TrueNAS 給裝好了。

就在一切運作良好,我已經開始 Survey 要裝什麼 APP 的時候,突然,TrueNAS 連不上了,打開 Proxmox 一看,阿,io-error !?!?

Proxmox io-error

安裝 TrueNAS (第二次嘗試)

看到 io-error 的第一反應是「別鬧了喔,我才剛買的欸」,想說不會我的 RAID 5 才設定好幾分鐘,就出現 Error 了吧。於是,我把它重開機,又恢復正常了,但過沒多久,又出現一樣的 io-error,他彷彿噩夢般跟隨著我。進 Proxmox 看了一下系統的 log,是某顆硬碟一直出現 I/O error,但我也不知道是為什麼。

Proxmox io-error log

想了一想,是不是還是得把 RAID Controller 整個 pass through 進去,但是 cannot prepare PCI pass-through, IOMMU not present 這個 error 怎麼辦,後來看了下面幾篇 PCI Passthrough 的文章,才成功設定好。

首先要去編輯 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 的後面加上 iommu=ptintel_iommu=onpci=noaer,然後執行 update-grub。 再來是編輯 /etc/modules,加上下面四行後,執行 update-initramfs -u -k all

vfio_iommu_type1
vfio_pci
vfio_virqfd

然後要確保 controller 沒有被 Proxmox 碰到,而是直接用 vfio-pci 模組。這邊可以參考上面貼的文章。
我前前後後設定了好幾次,最後終於成功,最後一步是設定了 pci=noaer 之後,就好了,noaer 是跟電源管理模組有關,智慧省電的功能之類的,我猜是他在雷,"智慧"的把我的硬碟下線了。另外在 Proxmox 創建 TrueNAS 虛擬機的時候,我選的是 q35 而不是 i440fx,不知道是不是真的有影響,因為我聽說 q35 才有支援 PCIe。
經歷一番波折之後,我總算把 TrueNAS 在 Proxmox 上面穩定的跑起來啦,但缺點是不能用 TrueNAS 的 Virtual Machine,只能在上面的 k8s 開 container。
其實從一開始在想要買 NAS 的時候我是想組 10GbE 的內網,感覺很酷,但我安裝到這裡我心情的變化像是下面這張圖一樣

io-error meme

lsblk: CANT_FIND_sda3_OR_sdap3: not a block device

這邊附上一個 TrueNAS 問題的解決方法,看起來是老問題了

https://www.reddit.com/r/truenas/comments/1794z3n/error_installing_scale_lsblk_cant_find_sda3_or/

TrueNAS fix