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
很抱歉,必須登入網站才能發佈留言。