Freenas客製化與安裝經驗

因為之前的研華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"

不過想說這台主機有4G的記憶體,就貪心的把上面兩個1024M參數調成3096M, 結果就開不起來了吐舌頭.
只好乖乖的調回1G的大小.
然後又找到這篇文章
http://harryd71.blogspot.com/2008/10/tuning-freenas-zfs.html
裡面除了ZFS tuning之外,還有TCP/IP參數的Tuning如下,從System -> Advanced -> sysctl.conf的地方去修改:
(附註,大部分TCP/IP的參數是Freebsd 7.0以上才有,所以也要Freenas 0.7才能設,0.6xx就不行了)
# ups spinup time for drive recognition
hw.ata.to=15
# System tuning – Original -> 2097152
kern.ipc.maxsockbuf=16777216
# System tuning
kern.ipc.nmbclusters=32768
# System tuning
kern.ipc.somaxconn=8192
# System tuning
kern.maxfiles=65536
# System tuning
kern.maxfilesperproc=32768
# System tuning
net.inet.tcp.delayed_ack=0
# System tuning
net.inet.tcp.inflight.enable=0
# System tuning
net.inet.tcp.path_mtu_discovery=0
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.recvbuf_auto=1
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.recvbuf_inc=16384
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.recvbuf_max=16777216
# System tuning
net.inet.tcp.recvspace=65536
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.rfc1323=1
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.sendbuf_auto=1
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.sendbuf_inc =8192
# System tuning
net.inet.tcp.sendspace=65536
# System tuning
net.inet.udp.maxdgram=57344
# System tuning
net.inet.udp.recvspace=65536
# System tuning
net.local.stream.recvspace=65536
# System tuning
net.local.stream.sendspace=65536
# http://acs.lbl.gov/TCP-tuning/FreeBSD.html
net.inet.tcp.sendbuf_max=16777216
以及Freenas 裡System->Advanced裡面Tuning選項也都照作打開.

然後自己再來試著調整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

把Samba的Send Buffer Size調成65536的結果

接著打開Freenas Advanced->tuning參數

接著打開Advanced tuning參數之後的結果

接著繼續設定ZFS kernel參數

接著繼續設定ZFS kernel參數的結果

再接著調TCPIP參數

再接著調TCPIP的結果

最後再把Samba Receive Buffer Size調成32768的結果

最後再把Samba Receive Buffer Size調成32768的結果

以上就是粗魯的客置化安裝過程與不精準的Tuning結果,有甚麼錯誤還請多多指教,我會更正的,謝謝收看.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *