Related Posts Plugin for WordPress, Blogger...

1、前言

由於 MegaCLI 只能查看 PERC xi 系列的 LSI RAID Controller,而此次採購的伺服器其 LSI RAID Controller 為 SAS 6iR 所以找了一下網路,發現有人寫了工具 Ratz mpt-status 可以在文字模式 (Command Line) 下很方便的查看目前 RAID 及 HDD 狀態。(請尊重 Weithenn 的辛勞!!)

文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.下載 mpt-status 及 kernal source rpm
          步驟2.安裝相依套件
          步驟3.建立安裝 kernel Source rpm 的使用者
          步驟4.安裝 kernel Source rpm
          步驟5.建立 mpt-status rpm 環境
          步驟6.安裝 mpt-status
          步驟7.載入 mptctl 至 kernel
          步驟8.開始使用 mpt-status
4、參考
5、Me FAQ
          Q1.gcc: command not found ?
          Q2.linux/compiler.h: No such file or directory ?
          Q3.warning: group mockbuild does not exist - using root ?
          Q4.redhat-rpm-config is needed by kernel-2.6.18-92.1.22.el5.x86_64?
          Q5.open /dev/mptctl: No such file or directory?

2、實作環境

  • CentOS 5.2 64 bit (Linux 2.6.18-92.el5)
  • Dell PowerEdge 1950
  • Dell RAID Controller SAS 6i/R (SAS1068E)
  • scsi0 : LSISAS1068E
  • SAS HDD 146 G * 2 (Build RAID-1)
  • kernel-2.6.18-92.1.22.el5.src.rpm
  • mpt-status-1.2.0.tar.gz (Source Tarball with spec file)

3、安裝及設定

步驟1.下載 mpt-status 及 kernal source rpm

至 Ratz Web Site 下載 mpt-status-1.2.0.tar.gz。
#wget http://www.drugphish.ch/~ratz/mpt-status/mpt-status-1.2.0.tar.gz
至 CentOS Mirror Site 下載 kernel-2.6.18-92.1.22.el5.src.rpm。
#wget http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.18-92.1.22.el5.src.rpm

步驟2.安裝相依套件

在安裝 kernel Source rpm 及 mpt-status 前我們先檢查系統是不是有安裝等一下會用到的相依性套件,沒有的話就利用 YUM 來安裝,後續的安裝動作才不會中斷。(請尊重 Weithenn 的辛勞!!)
  • gcc:compiler mpt-status 需要用到。
  • rpm-build:因為 mpt-status 沒有提供 rpm 所以我們要自行建立 mpt-status rpm。
  • redhat-rpm-config:kernel Source rpm 相依套件。
  • unifdef:kernel Source rpm 相依套件。
#yum -y install gcc rpm-build redhat-rpm-config unifdef

步驟3.建立安裝 kernel Source rpm 的使用者

建立待會需要用來安裝 kernel Source rpm 的使用者帳號,如下指令為建立 mockbuild 使用者帳號於 /home/user 下。
#adduser -d /home/user/mockbuild mockbuild

步驟4.安裝 kernel Source rpm

利用 rpm 指令來安裝 kernel Source rpm。
#rpm -ivh kernel-2.6.18-92.1.22.el5.src.rpm
 1:kernel                ############################### 100%


步驟5.建立 mpt-status rpm 環境

因為 mpt-status-1.2.0.tar.gz 是 Source Tarball with spec file 所以我們必須利用指令 rpmbuild 來建立 rpm 環境。(請尊重 Weithenn 的辛勞!!)
#rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel-2.6.spec

步驟6.安裝 mpt-status

解壓縮 mpt-status。
#tar zxvf mpt-status-1.2.0.tar.gz
在執行 make 指令以前,我們先修改 mpt-status 的 Makefile,讓 mpt-status 能正確找到 /usr/src/redhat/SPECS/kernel-2.6.spec 中的檔案。
#cd mpt-status-1.2.0
#vi Makefile
 CFLAGS          := -Iincl -Wall -W -O2 \
                        -I${KERNEL_PATH}/include \     //加入此行
                        -I${KERNEL_PATH}/drivers/message/fusion \
                        -I${KERNEL_PATH_B}/drivers/message/fusion \
                        -I${KERNEL_PATH_S}/drivers/message/fusion

執行 make 指令
#make KERNEL_PATH=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
 gcc  -Iincl -Wall -W -O2 -I/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/include -I/usr/src/redhat/BUILD/kernel-2.6.18/ \
 linux-2.6.18.x86_64/drivers/message/fusion -I/lib/modules/`uname -r`/build/drivers/message/fusion -I/lib/modules/`uname -r`/source/ \
 drivers/message/fusion -o mpt-status mpt-status.c

執行 make install 指令
#make install
 install -D -s -o root -g root -m 0500 mpt-status \
                /usr/sbin


步驟7.載入 mptctl 至 kernel

安裝 mpt-status 後會發現並無法使用 (因為此時 kernel 未載入 mptctl),我們可以利用下列指令來讓系統載入 mptctl 至 Kernel 中。
#echo modprobe mptctl >> /etc/rc.modules
#chmod +x /etc/rc.modules
#sync;sync;sync;reboot


步驟8.開始使用 mpt-status

重開機後系統應該載入 mptctl 至 kernel 中,因此我們可以開始使用 mpt-status 了。
#mpt-status -n -s
 vol_id:0 OPTIMAL
 phys_id:1 ONLINE
 phys_id:0 ONLINE
 scsi_id:1 100%
 scsi_id:0 100%


4、參考


5、Me FAQ

Q1.gcc: command not found ?

Error Message:
執行 make 指令要產生 mpt-status 編譯 (compiler) 相關檔案時發生如下錯誤訊息。
#cd cd mpt-status-1.2.0
#make
 gcc  -Iincl -Wall -W -O2 -I/usr/src/linux/drivers/message/fusion -I/lib/modules/`uname -r`/build/drivers/message/fusion -I/lib/modules
 /`uname -r`/source/drivers/message/fusion -o mpt-status mpt-status.c /bin/sh:
 gcc: command not found
 make: *** mpt-status Error 127

Ans:
系統沒有安裝 gcc 套件所以無法編譯 (compiler),安裝完 gcc 後便可順利編譯。
#yum -y install gcc

Q2.linux/compiler.h: No such file or directory ?

Error Message:
安裝完 gcc 後似乎可以順利編譯 (compiler) 了,但跑了一下出現如下錯誤訊息。
#make
 gcc  -Iincl -Wall -W -O2 -I/usr/src/linux/drivers/message/fusion -I/lib/modules/`uname -r`/build/drivers/message/fusion -I/lib/modules
 /`uname -r`/source/drivers/message/fusion -o mpt-status mpt-status.c
 In file included from mpt-status.c:38:
 mpt-status.h:6:28: error: linux/compiler.h: No such file or directory
 mpt-status.h:19:26: error: lsi/mpi_type.h: No such file or directory
 ...略
 make: *** mpt-status Error 1

Ans:
因為 mpt-status-1.2.0.tar.gz 是 Source Tarball with spec file 所以我們必須利用指令 rpmbuild 來建立 rpm 環境。
#rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel-2.6.spec
在執行 make 指令以前,我們先修改 mpt-status 的 Makefile,讓 mpt-status 能正確找到 /usr/src/redhat/SPECS/kernel-2.6.spec 中的檔案。
#cd mpt-status-1.2.0
#vi Makefile
 CFLAGS          := -Iincl -Wall -W -O2 \
                        -I${KERNEL_PATH}/include \    //加入此行
                        -I${KERNEL_PATH}/drivers/message/fusion \
                        -I${KERNEL_PATH_B}/drivers/message/fusion \
                        -I${KERNEL_PATH_S}/drivers/message/fusion

執行 make 指令
#make KERNEL_PATH=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
 gcc  -Iincl -Wall -W -O2 -I/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/include -I/usr/src/redhat/BUILD/kernel-2.6.18/ \
 linux-2.6.18.x86_64/drivers/message/fusion -I/lib/modules/`uname -r`/build/drivers/message/fusion -I/lib/modules/`uname -r`/source/ \
 drivers/message/fusion -o mpt-status mpt-status.c


Q3.warning: group mockbuild does not exist - using root ?

Error Message:
無法安裝 kernel source rpm 檔案並出現如下錯誤訊息。
#rpm -ivh kernel-2.6.18-92.1.22.el5.src.rpm
 warning: group mockbuild does not exist - using root

Ans:
建立用來安裝 kernel source rpm 的帳號後便可順利安裝。
#adduser -d /home/user/mockbuild mockbuild
#rpm -ivh kernel-2.6.18-92.1.22.el5.src.rpm
  1:kernel                ############################ 100%


Q4.redhat-rpm-config is needed by kernel-2.6.18-92.1.22.el5.x86_64?

Error Message:
執行 rpmbuild 指令時出現如下錯誤訊息。
#rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel-2.6.spec
 Building target platforms: x86_64
 Building for target x86_64
 error: Failed build dependencies:
        redhat-rpm-config is needed by kernel-2.6.18-92.1.22.el5.x86_64
        unifdef is needed by kernel-2.6.18-92.1.22.el5.x86_64

Ans:
系統需要安裝 kernel source rpm 的相依套件 redhat-rpm-config unifdef,安裝完成後便可順利執行 rpmbuild 指令。
#yum -y install redhat-rpm-config unifdef

Q5.open /dev/mptctl: No such file or directory?

Error Message:
安裝 mpt-status 完成後執行指令出現如下錯誤訊息。
#/usr/sbin/mpt-status
 open /dev/mptctl: No such file or directory
    Try: mknod /dev/mptctl c 10 220
 Make sure mptctl is loaded into the kernel

Ans:
查看後發現 /dev 下並沒有 mptctl 檔案,試了指令 mknod /dev/mptctl c 10 220 後雖然成功建立該檔案不過還是出現如下訊息。
#/usr/sbin/mpt-status
 open /dev/mptctl: No such device
   Are you sure your controller is supported by mptlinux?
 Make sure mptctl is loaded into the kernel

問題的重點在於錯誤訊息的最後一行,也就是 mptctl 並未載入至 kernel 中執行下列指令並重開機後便可順利執行 mpt-status 指令了。
#echo modprobe mptctl >> /etc/rc.modules
#chmod +x /etc/rc.modules
#sync;sync;sync;reboot
文章標籤: ,