Linux防健忘日誌No.80-Ubuntu 12.04.4 安裝MegaCli新的方式

好一陣子沒打技術文…其實之前有微軟的活動,因此大部分都跑去點部落發表技術文章了:

http://www.dotblogs.com.tw/thkaw/Default.aspx

 

最近活動結束,我才慢慢開始回來maintan opensource的東西XD

 

第一個要搞的就是手邊的UBUNTU SERVER兼NAS有點凌亂,而且之前知道裝在上面的megacli一時之間掛點不能操作(莫名其妙死翹翹我也覺得很神奇…)

 

但又懶得下樓查線路,所以還是先把megacli修好,用軟體看一下array config在整理會比較保險一些

 

可是在下達MegaCli64 -adpcount的時候總是無法抓到Raid卡…sudo -i換到root去操作也是一樣結果

之前沒有用力解決這件事情,就放著好一陣子

 

 

今天終於找到幾個解法,有分為上一篇:http://thkaw.pixnet.net/blog/post/96742997

安裝方式的解,也有現成的deb安裝包解,但我兩個都有實作確定可以用,後來我個人還是用deb安裝包解,比較簡單而且快速

 

但兩個方式是達到一樣的操作目的,所以大可依照自己的喜好操作

 

首先先講第一種解,參考上一篇 http://thkaw.pixnet.net/blog/post/96742997 安裝方式安裝妥當

撰寫本文時Linux的MegaCli版本號碼為8.07.14 Dec 16,2013

 

 

之後你會發現下達任何MegaCli的指令是不會有任何結果

一律返回Exit Code: 0x00

 

這個返回碼定義是操作正確的,但為何沒有內容呢…原來是因為連raid卡都沒有被Megacli偵測到…

 

但這要怎麼解呢?

 

這個問題出在MegaCli居然不認得3.x.x以上等級的kernel導致執行階段是對應到沒有handle的程式碼…但也沒有try catch所以就變成空白結果

 

幸好俄國人有解法,寫了一個簡單的程式碼讓uname假裝給megacli偵測為2.x.x核心的板號這樣才會運行megacli該運行的code

如果你俄文很好可以參考:http://www1.opennet.ru/tips/2667_linux_kernel_version_ld_preload.shtml

 

寫了一個:

#define _GNU_SOURCE
#include <unistd.h>
#include <sys/utsname.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <string.h>

int uname(struct utsname *buf)
{
int ret = syscall(SYS_uname, buf);
strcpy(buf->release, “2.6.40”);
return ret;
}

 

非常短的c code,但還算相當好懂

 

接著其實就是給這個c程式編譯後再執行megacli的期間,騙megacli說執行uname的時候不是跟系統直接要(因為會要到3.x.x版本),而是跟這上面騙她的版本給

就可以正常執行,那麼作法也很簡單…(我發現我廢話又打太多了)

 

1.在自己家目錄底下makdir fakeuname,並且進入該目錄

 

2.下載fakeuname.c原始碼

wget http://supportex.net/files/fakeuname/fakeuname.c

 

3.編譯目的碼

gcc -Wall -fPIC -c fakeuname.c

 

4.編譯執行碼

gcc -Wall -shared -o libfakeuname.so fakeuname.o

 

5.複製並且變動編譯完成的執行碼到megacli所在位置

sudo install -m 644 libfakeuname.so /opt/MegaRAID/MegaCli/

 

6.切換成root(一定要…一般user無法用

sudo -i

 

7.切到megacli的目錄底下

cd /opt/MegaRAID/MegaCli/

 

8.引導剛剛做好的fakeuame.so跟著megacli執行…

LD_PRELOAD=./libfakeuname.so ./MegaCli64 -adpCount

 

沒意外的話就會抓到裝置了…

但這樣操作會變成相當麻煩,前面必須帶著LD_PRELOAD=./libfakeuname.so一長串

 

不過還是能用alias的方式解掉,但就覺得有點不完美,不過基本上這樣是比較原廠的作法不假他人之手。

 

=========================================================

那麼第二種假他人之手也就是直接用deb安裝的方式更簡單而且不需要其他手續

透過加入hwraid網站所製作的deb達到快速安裝的功效,完全跟上面手動安裝方式完全一樣的東西

不過自動幫你繫結了許多的alias跟一些bug上面的修正,以及她會提供最新版的megacli安裝

 

1.切換到root之後把hwraid的repo站台加入apt源(因為echo不再sudo操作範圍內…)

echo ‘deb http://hwraid.le-vert.net/ubuntu precise main’ > /etc/apt/sources.list.d/raid.list

 

2.抓repo key

wget -O – http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add –

 

3.更新apt

apt-get update

 

4.安裝megacli

apt-get install megacli

 

這樣就搞定了,啥軟連結應連結通通不用作喔!!

直接打megacli -adpcount來確定安裝成功!

 

另外套件安裝的megacli參數完全一樣,只有前面指令名稱有點不一樣而已~

 

但需要注意的是無論第一種或者第二種方式都必須要用root權限執行喔,否則完全不會有任何結果

 

相當方便!

 

以上!

 

 

 

thx for:

http://askubuntu.com/questions/112455/megaraid-sas-raid-controller

http://www1.opennet.ru/tips/2667_linux_kernel_version_ld_preload.shtml

http://sysadmin.te.ua/linux/monitoring-systems/smart-under-lsi-2108-kontroller.html

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料