Proxmox搭建NAS雖可行,但存儲問題需謹慎!
最近我經常使用Proxmox,在我的兩臺機器上部署各種不同的系統和容器,以便將一些更重要的系統從我的主服務器遷移出來。然而,我的兩臺Proxmox機器中的一臺是綠聯DXP4800 Plus NAS,它同時也是我的OPNsense機器。因此,雖然它在這個用途上運行得很好,但我一直在尋找一種方法來利用它內部仍然存在的12TB存儲空間。我已經使用這些硬盤安裝了< a href="#">HexOS< /a>(基於TrueNAS),雖然不是很輕鬆,但它可以工作。< /p>
在典型的設置中,你會在你選擇的設備上安裝你的NAS操作系統,它會像往常一樣識別硬盤並將它們格式化爲RAID陣列以供正常使用。在Proxmox中,情況有點不同。一切都是虛擬化的,這意味着你< em>可以< /em>爲你的系統創建虛擬硬盤,但你真的不應該這麼做,而且有更好的方法。< /p>
在Proxmox上有兩種直通硬盤驅動器的方法,第一種非常簡單,第二種雖然同樣簡單但有點麻煩。我們先來看較好的選項,即將整個SATA控制器直通給TrueNAS。這會給予它完全的控制權,意味着所有使用該控制器的驅動器都將交給TrueNAS。就我而言,我想在TrueNAS中使用所有的SATA驅動器,但你可能有一些插在SATA端口上的驅動器想要在Proxmox中使用。如果是這種情況,那麼你將無法使用這個選項,應該跳到逐個磁盤的方法。
首先且最重要的是,我們需要檢查幾件事。第一件事是要確保已啓用輸入 - 輸出內存管理單元(IOMMU),第二件事是要查找你的PCI設備的標識符。你要使用的命令如下:
pvesh get /nodes//hardware/pci --pci - class - blacklist ""
然而,如果沒有立刻發現什麼(有用的信息),先不要停止。我就是在這裡出了差錯,以爲自己無法進行“理想的”硬盤直通(HDD passthrough)。接下來這個命令是我在Proxmox社區論壇上偶然發現的,它幫助我識別了我的SATA控制器。
lspci - nnk
這讓我得到了一個實際的名稱,以及我可以直通給虛擬機(VM)的PCI設備的截斷ID。
從這裡開始就簡單了。進入你的虛擬機,打開硬件(Hardware),點擊添加(Add),然後選擇PCI設備(PCI device)。選擇原始設備(Raw device)並選擇要直通的SATA控制器的ID。在這一步要非常小心。如果你的SATA控制器也控制着啓動設備,那麼你的Proxmox環境可能無法啓動,因爲這種直通會將硬件設備的完全控制權交給虛擬機。我在Proxmox中無法再訪問我的SATA設備了,因爲虛擬機被賦予了對它們的 獨佔 訪問權。如果你使用主機總線適配器(HBA),你應該將它而不是SATA控制器進行直通。
現在,TrueNAS可以看到並控制這些硬盤,運行智能檢測(SMART)測試,並且可以像對待完全原生的硬盤一樣對待它們……因爲,嗯,它們就是(原生硬盤)。這種直通直接將SATA控制器連接到虛擬機,這也是Proxmox無法再使用它的原因。沒有虛擬適配器,而且從TrueNAS的角度來看,在裸機上運行它沒有任何區別。
你們也別學我。要是能選擇簡單的硬件直通,就先這麼做。把我的ZFS存儲池從最初的磁盤級直通遷移到像這樣的原生解決方案,簡直是一場噩夢。這需要用zpool手動導入ZFS存儲池,用zfs命令修改掛載點,還要禁用一個因系統明顯變化而啓用的只讀標誌。我在TrueNAS shell裡花了好多時間來解決這個問題。
還有一種方法是把單個磁盤直通到Proxmox虛擬機,不過,前面也說了,這種方法有缺點。ZFS想要直接控制硬件,但是用這種方法不行。而且在Proxmox和虛擬機之間仍然有一個虛擬化層在運行,即便虛擬機基本上完全控制着硬件。
說到設置磁盤級直通,在Proxmox的用戶界面(UI)裡,沒有像對其他設備那樣簡單的直通硬盤的方法。你得用命令行,還得通過硬盤的ID來識別它們。這樣就能在軟件裡穩定地引用它們,而不是通過掛載點。掛載點可能每次重啓都會變,但ID不會。任何設備的直通都是這樣。比如說,要在我的Home Assistant OS虛擬機上直通我的Zigbee加密狗,我也得識別我的USB設備的ID然後直通這個ID,而不是直通USB端口本身。這就意味着如果把USB設備移到另一個端口,這個設備仍然能被直通。
首先,我們得列出我們的驅動器然後找到它們。我們可以在Proxmox shell裡用下面這個命令來做這件事。我上面的圖片顯示的是在虛擬機裡運行這個命令的情況,因爲我已經直通了我的硬盤,但你們要確保是在Proxmox主機的shell裡運行,而不是在虛擬機裡。
ls /dev/disk/by - id/
這會按照ID列出你所有的驅動器,這個ID和發現它們的順序是分開的,並且以sda、sdb、sdc等形式表示。理論上來說,你現在的sda在下一次啓動的時候可能就變成sdc了,這就是爲什麼用ID比用特定的文件系統引用更安全。要確保爲想要傳遞給虛擬機的正確的驅動器使用正確的ID,並且暫時把它們保存在外部。
接下來,我們需要運行命令,將我們的驅動器手動添加爲SCSI驅動器。這將創建一個在主機和虛擬機(VM)之間運行的虛擬適配器,但仍然給予虛擬機幾乎完全的訪問權限。如前所述,它不會有硬件級別的訪問權限,所以SMART測試之類的功能將無法運行,但大多數功能應該可以。ZFS確實需要對驅動器的完全訪問權限才能發揮最佳性能,但許多用戶已經以這種方式在其驅動器使用虛擬適配器的情況下毫無問題地使用了TrueNAS。
要添加驅動器,我們需要在關閉虛擬機之後運行以下命令。這些命令假設scsi0是虛擬引導驅動器。在Proxmox主機中,虛擬機編號也可以在名稱旁邊找到。
qm set -scsi1 /dev/disk/by -id/qm set -scsi2 /dev/disk/by -id/qm set -scsi3 /dev/disk/by -id/qm set -scsi4 /dev/disk/by -id/
這告訴Proxmox使用對四個SCSI驅動器的引用來啓動虛擬機,並且這些SCSI驅動器可以掛載到那些特定的ID上。如果您有超過四個驅動器,可以相應地增加SCSI編號。如果您的驅動器較少,只需添加您需要的數量即可。
就是這樣!現在,當您啓動虛擬機時,它將檢測到您的驅動器,並且能夠發現諸如可用存儲和已用存儲等屬性。如果您不能讓虛擬機直接訪問實際的控制器,那麼單獨傳遞磁盤肯定不是最佳方法,但在緊急情況下它是可行的。如果可以的話,我強烈建議改爲傳遞HBA或SATA控制器。
話雖如此,這些選項中的任何一個都使您能夠在NAS環境中使用您的硬盤驅動器。您可以獲得Proxmox靈活性的所有好處,同時仍然能夠託管NAS。就我而言,因爲我的綠聯(Ugreen)NAS也是我的OPNsense路由器和防火牆,所以我實際上有大量的存儲連接到我的路由器,而路由器被設計爲始終保持開啓狀態。
可以使用Proxmox來構建網絡附屬存儲(NAS),但僅在出於特定原因需要使用Proxmox時才這樣做。TrueNAS有自己的虛擬化功能,所以如果你只是想運行基本的虛擬機,在裸機上使用TrueNAS可能是更好的選擇。否則,你可以正確地直通你的驅動器,這或多或少會與裸機安裝相同。