Wednesday, January 30, 2013

GlusterFS遇上Drobo的問題

怎麼問題這麼多orz

OK,回顧一下。
Drobo在Linux底下只能用ext3,volume最大8TB。
要用USB連接,而且在CentOS 6下要換成ELREPO的kernel-ml (3.7.x)才能抓到完整容量。
然後GlusterFS "理論上"不挑kernel版本 (後面就知道慘了),可以把空間合併起來。

那遇到的問題是什麼,在上一篇GlusterFS單機惡搞版寫得好像很美好的情形下....

如果你真的去做會發現,掛起來的GluserFS (/data) 可以正常寫入,不管是用cp或是rsync都沒有問題。
但是要去ls看內容的時候... 會當住。orz
這樣要怎麼用啊!

問題出在這裡:(引用來源)
簡單說,kernel 3.3.x版改了ext4中dir.c的HASH函數,因為GlusterFS依靠HASH來處理metadata,所以會掛掉。
到kernel 3.7.x版,ext3也做了類似的修改,所以這下連ext3 + GlusterFS也會有問題了...
這就是下ls會當掉的原因。

好,因為這些限制,所以我們必須要找一個kernel版本可以:
1. 抓到USB上面Drobo的兩個volume,容量必須正確。
2. ext3還沒有改HASH函數。

經過追查,發現kernel 3.4.x可以符合這個條件。所以最後是自己編了一個kernel.org來的3.4.27才解決問題.... 是誰說不挑kernel的啊(翻桌)
CentOS底下編kernel.org核心的方法,可以參考這裡。

1 comment:

Mike Chen said...

理論上在Drobo volume上建loop file,然後把這個loop file掛成不受bug影響的FS (例如XFS)也可以。
但是考慮到... Drobo寫入只有60MB/s,做那麼大的loop file要多久啊!
而且掛這麼多層管理起來很囉唆... 還是編kernel吧...