UNRAID進階避坑指南(篇一):硬碟控制器和網絡卡直通
玩底層虛擬系統,硬體直通是基操。簡單來說,直通給虛擬機器的硬體就像虛擬機器系統直接安裝到物理機上一樣。UNRAID系統一個強大的地方就在於直通非常方便。
哎不是網上講UNRAID直通的教程文章影片已經很多了麼,為啥還要講直通呢?這是因為老魚在折騰UNRAID的直通時,踩過幾個大坑,與其說是進階避坑指南,不如說是踩坑血淚史!所以你們一定要看完這篇文章再去折騰UNRAID的硬體直通。
老魚用的是當年的妖板華擎J4205-ITX安裝UNRAID。說它是妖板並不是想讚美它有多麼高的價效比,完全是因為這塊板子有夠坑的。最大的坑就在於說的是4 SATA3支援,但有兩個SATA介面是 ASMedia ASM1061晶片轉的,還有一巨坑就是IOMMU的BUG,老魚後面再慢慢講到這些坑有多大。
老魚原來是用這塊板子裝的群暉,所以資料基本都被鎖死在群暉系統裡了,為了無痛遷移到UNRAID系統,直通硬碟肯定是最佳解決方案,但我們這一系列的文章既然叫UNRAID進階避坑指南,那肯定不會只是講簡單的硬碟直通,這一回咱們一步到位直通硬碟控制器和網絡卡,將硬碟讀寫效率直接拉滿。
最終,老魚在華擎J4205上安裝上了UNRAID系統,裝了一個群暉虛擬機器,將硬碟控制器和網絡卡直通給了群暉虛擬機器,透過群暉的SMB、NFS服務和iSCSI服務使用群暉裡的大容量硬碟空間和資料,讓群暉安安靜靜的做一個數據倉庫。
這麼做帶來的好處就是,將資料和檔案完全交給群暉管理,什麼下載啊,docker啊,虛擬機器啊完全從群暉裡剝離出來放在UNRAID上折騰,再也不用擔心折騰影響到資料安全,而且UNRAID擁有更高的底層虛擬效率和更少的宿主系統消耗,是玩虛擬機器和docker的首選。這裡不得不再提一下油管eSir大佬做的各底層虛擬平臺的測試,毫無疑問要玩底層虛擬的話,首選PVE、ESXi或者UNRAID。
老魚這塊板子只配了8G記憶體,原來裝群暉的時候要獨佔8G記憶體,現在只用為群暉虛擬機器分配1G記憶體,群暉依然跑得很穩,平時記憶體佔用率基本不超過50%。還有一個更意外的收穫就是,原來物理機裝群暉系統,千兆內網的寫入速度只有90M/s左右,現在居然可以穩定寫入保持在110M/s,跑滿千兆,老魚分析這和我更換了資料硬碟的硬碟控制器有關,後面會講到。
硬體直通原理UNRAID的直通原理非常簡單粗暴,簡單來說,就是遮蔽硬體UNRAID不能使用,就可以直通給虛擬機器使用。
為了實現完美的直通,首先要確認的是你的硬體是否支援IOMMU。IOMMU簡單來說就是將虛擬記憶體地址對映為物理記憶體地址,讓實體裝置可以在虛擬的記憶體環境中工作。對於Intel晶片來說,就是必須要支援VT-D技術。怎麼確認是否支援這些技術呢?首先是CPU引數,比如老魚用的這塊J4205板子,CPU是J4205,它是支援VT-D技術的,再來看看UNRAID系統,點選右上角的資訊圖示,
如果是顯示支援硬體虛擬化和IOMMU的話,就表明是支援硬體直通的,如果沒有就不要瞎折騰了。
直通硬體改造敲黑板!這是很多同學按照硬碟直通教程去做但始終直通不了,或者即便直通成功,但群暉SMB共享讀寫沒有速度,直接卡死的根本原因,也只有這一點做正確的了,才能保證虛擬機器的群暉硬碟讀寫速率跟物理機一樣,甚至更快!
剛才已經講了華擎J4205-ITX這塊板子妖就妖在有兩個SATA口是ASMedia ASM1061晶片轉出來的,如果你的主機板SATA口有一部分是用晶片轉的,就需要格外注意了!
仔細觀察主機板上的SATA介面編號,4個SATA口編號分別是sata1,sata2,sata-a1,sata-a2。從名字上就可以看出,透過ASMedia ASM1061晶片轉出的兩個SATA口編號是sata-a1,sata-a2。
劃重點!如果要直通硬碟控制器給群暉
重點一:要直通給群暉的硬碟一定要接在原生的SATA口上,要不然就會出現群暉SMB共享讀寫沒有速度或者直接卡死的問題。
重點二:要直通的硬碟要接在同一塊硬碟控制器上,比如你要直通兩塊硬碟給群暉,要都接在原生的SATA口上,不要一塊接在原生SATA口,一塊接在轉出來的SATA口,不然只能直通兩個硬碟控制器給虛擬機器,UNRAID就沒得硬碟控制器可用了。
有同學會問,為啥要一定要把原生的SATA控制器直通給群暉?這就是折騰的血淚史了,經過老魚多次試驗(掉坑)發現,在華擎J4205-ITX這塊板子上,原生SATA控制器的讀寫速度比ASMedia ASM1061晶片轉出來SATA介面更快!這就是之前而為啥說可能直通硬碟控制器後的讀寫速度比物理機還要快的原因,老魚的兩塊主力資料硬碟原來在物理機上就鬼使神差的接到了ASMedia ASM1061晶片轉出來的SATA口,寫入速度鎖死在了90M/s上不去。
直通非原生SATA介面另一個詭異的問題就在於,SMB共享直接卡死,或者只有幾KB的速度,但是登入DSM直接下載檔案速度卻又很快。老魚在網上搜了下,出現這種問題的案例數還不少,但都找不到確切原因,老魚也嘗試過修改SMB協議版本,修改SMB配置引數等等,都沒有用,最後換成原生SATA口,速度直接起飛。
當然這可能只是ASMedia ASM1061這塊晶片的個別相容性問題,也不排除其它主機板接原生SATA介面反而速度更慢的情況,這裡老魚提出一個思路,如果出現莫名其妙的相容性問題,請嘗試更換直通給虛擬機器的SATA控制器
硬碟直通VS硬碟控制器直通我們先說一下原理以及兩種方式的區別在哪兒。
我們已經知道要實現直通的大前提是CPU支援虛擬化技術,以及在UNRAID系統中遮蔽這個硬體裝置。任何作業系統讀寫硬碟資料都要藉助硬碟控制器,也就是我們前面說的SATA控制器來幫忙。SATA控制器是一個翻譯和中轉,把系統的讀寫指令翻譯給硬碟執行,把寫入和讀取的資料做中轉。
硬碟直通直通硬碟的本質呢,相當於是UNRAID系統實際控制著硬碟資源,但UNRAID不用這塊硬碟,將它掛載到虛擬機器裡。如果要直通某塊硬碟,那就不能把硬碟新增到UNRAID的硬碟序列當中,
直接硬碟的好處是因為是宿主系統UNRAID管理硬碟資源,很穩定,基本不會出現SMB共享速度為0的這種情況,而且不用管硬碟是接到哪個SATA控制器上的,不用動硬體,可以跨硬碟控制器直通硬碟,使用靈活;
直通硬碟的壞處嘛,因為UNRAID管理硬碟,那肯定是有一定的資源消耗的,讀寫速度應該是沒有直通硬碟控制器來得快,而且UNRAID系統資源不足時,有可能影響到硬碟讀寫速率,而且因為本質是掛載硬碟給虛擬機器,可能影響某些高階的硬碟管理功能,比如休眠,S·M·A·R·T等。
硬碟控制器直通直通硬碟控制器的本質相當於是虛擬機器直接驅動硬碟控制器,跟物理機上安裝一樣。
直通硬碟控制器的好處是不依賴宿主系統,讀寫效率理論上應該是最高的,而且接到直通的硬碟控制器上的所有硬碟都會直通進虛擬機器。因為虛擬機器直接驅動硬碟控制器,可以實現如硬碟休眠這樣的高階管理功能;
直通硬碟控制器的壞處就是要調整硬體。要直通的硬碟必須接到同一硬碟控制器上,有可能你直通的硬碟控制器有相容性問題,那就整個翻車,讀寫任何一塊硬碟都會很慢或者卡死,你得再換一個硬碟控制器。
所以,到底用哪種直通方案呢,得看個人需求。喜歡折騰,有效能潔癖的上硬碟控制器直通;喜歡穩的上硬碟直通。
硬碟直通已經有很多教程講過了,大家可以搜搜阿文菌和司波圖大佬的相關教程。老魚接下來分享一下硬碟控制器的直通方法。
修復IOMMU BUGJ3455/J4205都有IOMMU分組的BUG。簡單來說這個BUG讓原本應該分開的硬體IOMMU分組綁到一起了,比如網絡卡和硬碟控制器分到同一個IOMMU分組了,就不能單獨直通硬碟控制器或者單獨直通網絡卡。
老魚為J4205這塊板子添加了一張Intel 82576 雙口網絡卡,打算用來直通給群暉使用,在Tools->SysDevs中檢視IOMMU分組,當時的分組情況就像這樣
可以看到原生的SATA控制器分在了4組,而板載的螃蟹網絡卡、ASMedia的SATA控制器、Intel 82576網絡卡全部擠在了5組。那這就很難辦了,要直通就只能把上面所有裝置全部直通,一旦這樣做了,就會出現一個隱藏巨坑,UNRAID系統就沒有網絡卡可用了!連不上UNRAID系統!(別問我怎麼知道的),大家要注意一下。
要修復這個BUG,就得打個補丁(補丁是藍冰血魄製作,unRAID•RSG部落格群•NAS群 江蘇-biu 協助測試,感謝大佬,找不到補丁可以留意發)。打補丁就兩步:
在settings->vm Manager ->PCIe ACS override:開啟 Downstream,重啟後在MAIN->FLASH->Uraid OS配置中看到pcie_acs_override=downstream就開啟成功了將補丁檔案覆蓋到UNRAID啟動隨身碟根目錄,重啟UNRAID就可以了打了補丁之後,可以看到IOMMU分組就正常多了
網絡卡和SATA控制器已經分開了,但是Intel 82576的IOMMU分組雖然正常了,但ID還是同一個,因為遮蔽硬體是透過ID來配置的,所以Intel 82576這張雙口網絡卡只能要麼直通給虛擬機器用要麼留給UNRAID。不過好在直通後,可以分給不同的虛擬機器使用。
如果只選擇一個網絡卡,要注意連線網線的那個口是不是直通給群暉虛擬機器了,要不然群暉裡沒有網路介面。老魚是兩個網絡卡都給了群暉,但只有一個口接了網線,群暉下面就能看到兩個網路介面,但只有一個生效。
網絡卡直通的好處是在大量網路資料交換的時候可以明顯減少CPU的運算量,由網絡卡自己完成資料交換。缺點呢就是直通後要為這個網絡卡連線網線,像老魚的裝置就連線了兩根網線,一根給UNRAID,一根給群暉,稍微有點麻煩。
開啟硬碟控制器直通老魚兩塊大容量硬碟原來是一直用在群暉系統中儲存資料的,而原生SATA控制器剛好就兩個SATA口,所以老魚的硬碟直通方案就是把原生的SATA控制器直通給群暉(說了這麼多,就是覺得直通SATA控制器要比直通硬碟讀寫速度更快)。我們先按上面的講的把IOMMU的分組BUG修復,然後在Tools->SysDevs找到要直通的原生SATA控制器和Intel 82576網絡卡的硬體ID,在我的裝置上分別就是8086:10c9和8086:5ae3
進入MAIN->FLASH->Uraid OS編輯配置
備份一下原來的配置,因為是文字配置,直接複製到Notepad++裡儲存就可以了修改配置如下(注意替換成你的直通硬體ID),儲存重啟,直通就完成了。kernel /bzimageappend vfio-pci.ids=8086:10c9,8086:5ae3 pcie_acs_override=downstream initrd=/bzroot注意硬體ID不能寫錯!如果要直通網絡卡,要確認直通了之後還有別的網絡卡給UNRAID使用,要不然會進不了系統,比如我把Intel 82576網絡卡直通給虛擬機器使用,把板載的螃蟹網絡卡留給UNRAID使用,需要提前連線一根網線到螃蟹網絡卡的網口上才能進入系統
重啟UNRAID之後,進入虛擬機器的配置頁面,在其它PCI裝置當中已經可以看到直通後的SATA控制器和網絡卡
確保要直通給虛擬機器的硬碟已經接到原生的SATA口上,勾選SATA控制器和網絡卡,開啟高階檢視,在XML配置檔案中刪除系統自動配置的虛擬網絡卡(interface之間的部分,包含interface)儲存,就可以完美的實現虛擬機器群暉直通硬碟控制器和網絡卡了。進入群暉系統,硬碟和網絡卡一切正常,就跟物理上安裝的一樣。
小結UNRAID上的硬體直通操作起來是非常簡單的,只要明白了直通的原理。
老魚有一個折騰心得分享給大家,在折騰的時候不要直接按著教程就開始操作,首先你要完全看完教程,要嘗試理解其中的原理是什麼,只有明白了原理,折騰起來就會得心應手。
在UNRAID上直通硬碟控制器和網絡卡給群暉,最終效果我還是非常滿意的,壓縮了群暉系統的資源佔用,讓群暉專職資料儲存分享,騰出更多資源可以折騰其它的虛擬機器或者docker,而且保障了資料的安全,不至於全體翻車。