因為之前的研華Nas開始出現一些狀況,也到了該汰舊換新的時候了.
由於預算也有限,看到Freenas簡單好用,又可以自己調整各種service的設定,所以採用DIY的方式買台主機安裝Freenas來作為新的Nas.
Nas都是使用網路存取資料,所以看在有四個giga ethernet的份上,挑了張 Gigabyte EP45-DQ6 的主機板.沒想到這才是麻煩的開始.因為這張主機板的網路卡用的是Realtek RTL8111C, 在Freenas 0.69 (Freebsd 6.4)上不支援,而FreeNas 0.7 32bit不支援這台主機的4G記憶體, 官網上傳說的FreeNas 0.7 x64版也找不到可以下載的地方,只好走上Freenas的客製化之路.
因為Lab裡只有Linux跟Windows的機器,沒有Freebsd,第一步就是找一台PC,開始安裝Freebsd 7.因為不想花太多時間安裝,所以是透過燒錄的Bsd光碟作Minimum安裝. 不過上次使用Freebsd已經是n年前的事,光碟安裝完就開始找些教學,先把Freebsd設定好.
http://plog.longwin.com.tw/my_note-unix/2007/07/16/freebsd_initial_env_build_2007
透過上述這個網頁,可以把Bsd的Ports設定好,並且把Bsd更新完畢.由於Lab裡Linux都是用Gentoo.而Gentoo的Portage正是源自Bsd 的Ports,所以有了教學大致上還能把Bsd更新好.Gentoo跟Bsd比較起來,Bsd的Ports效率果然比較好,不過還是覺得用慣的Gentoo Portage比較適合更懶的人XD.
Bsd Ports都弄完之後,開始Checkout Freenas的source code,準備進行客製化Freenas的動作.當然也是要找一些參考的資料,參考的網頁如下.
http://chicwks.blogspot.com/2007/02/freenas.html
從這個網頁,可以讓你順利的把Freenas的source checkout下來,開始進行make的動作.不過也許是因為Freenas current是0.7或是那台FreeBSD採minimum安裝,Make不出能用的Freenas iso.所以除了照這個網頁把BSD的幾個套件如SVN,BASH,libxm2安裝起來之外,也參照了source裡面的README把cdrtools,portupgrade都裝起來.並按照README的動作一步步執行,但是結果還是Make不出來.
所以只好開始自行摸索,首先盯著Make過程的畫面,發現執行Make.sh時,一些步驟的錯誤不會log,並且會跳過去繼續執行之後的Script,讓我以為一切順利,但是其實一塌糊塗. 注意到這個問題之後,每個步驟執行完就得要把畫面Scroll回去確認真的沒有錯誤訊息.
這樣做之後,第一個發現的是Kernel Make失敗.根據錯誤訊息應該是Freenas 裡Kernel Patch造成的,找了一下是
[ ] aac Adaptec Raid Controller driver
這個Patch會造成Kernel Make有問題.所以就把Kernel source砍掉,重新checkout kernel source,並且跳過這個kernel patch, 然後再度Make kernel.另外如果要修改Kernel的功能的話也可以直接進./svn/build/kernel-config 去修改Kernel make的Option設定.我是很偷懶的幾乎把Kernel的選項全開了. Make kernel有問題的選項再逐一關掉.
再來就是Build world,我記得這邊沒有遇到什麼問題.
再下一步是Build ports,這個步驟需要先Build ports再Install Ports. 這邊的問題可就多了,由於當初Bsd我是選擇minimum安裝,所以Freenas用到的Ports有些根本就沒裝,所以在安裝過程中會有不少東西被跳過沒安裝進去.之後做出來的ISO檔就會缺東缺西不能用.
所以乾脆就在Build ports的畫面,看Freenas有哪些Ports要Build,然後就把Freebsd的那些套件全部都裝起來.安裝過程中,那些套件也有Option要設定.由於我不確定Freenas會用到哪些Option與哪些dependency的套件,所以都是把Debug之外的安裝Option全開,安裝了所有有dependency的套件,直到把Freenas要用到的套件都在Freebsd上裝好,然後才繼續進行Freenas的Build ports跟Install Ports.但是,這也造就了一個超肥的Freenas ,因為把套件的所有功能跟支援都全打開了,打包了不少有的沒的到Freenas的ISO裡.
不過,這樣的Freenas會肥到超過make.sh裡設定的ISO大小,所以必須要修改make.sh內設定的Freenas ISO大小,不然ISO檔會作不出來. 我是直接把mask.sh裡FREENAS_MFSROOT_SIZE改成160,而實際做出的ISO則有95MB大小XD,因為想說安裝系統的SSD有8G,ISO稍微大一點應該也還好:p.
經過如此粗魯的Freenas ISO 客製化過程,終於可以用來Boot這張主機板並且充分的使用上面的4G記憶體.記得還要把BIOS的AHCI關掉,安裝用的光碟機如果是SATA光碟機也都要改成compatiable傳統IDE光碟機,這樣才能正常開機且安裝.只是因為ISO檔案有點大,光碟開機的時間會變長.不過總算是都裝好也可以使用.
接下來,既然辛辛苦苦的裝好x64 Freenas 0.7, 0.7的新功能就是當然ZFS,所以硬碟當然就先格式化成ZFS.接著要把性能壓榨出來.就開始找文章尋求最佳化調整之道.
首先依照
http://wiki.freebsd.org/ZFSTuningGuide
這篇文章開始Tuning系統. 首先調的是ZFS的kernel部分,也就將下面的三個參數加到/boot/loader.conf
-
vm.kmem_size_max="1024M"
-
vm.kmem_size="1024M"
-
vfs.zfs.arc_max="100M"
然後自己再來試著調整Samba Setting裡的Send/Receive Buffer Size大小,分別試了8192,16384,32768,65536這幾個值,發現32768好像是比較快又穩定的速度,平均有250Mbps,所以最後就決定用這個數字啦.
另外在測試過程中發現Advanced的Power Daemon打開之後,Samba的速度就非常慢,只剩下10Mbp左右,所以只好放棄節能省碳的想法. 而這台4 core q6600 CPU, 4G ram, 4 port gigabit網路, P45主機板的Nas就先這樣上線試用啦.
最後附上一些調整過程的抓圖.是透過Samba丟一個4G大小的檔案到Nas上看Freenas Status下Traffic graph的結果.
下圖是還沒開始調整時的寫入速度.
接著把Samba的Receive/Send Buffer Size調成65536
接著打開Freenas Advanced->tuning參數
接著繼續設定ZFS kernel參數
再接著調TCPIP參數
最後再把Samba Receive Buffer Size調成32768的結果
以上就是粗魯的客置化安裝過程與不精準的Tuning結果,有甚麼錯誤還請多多指教,我會更正的,謝謝收看.