以 MptStatus 指令查看 SAS 6iR RAID Controller 運作狀態

1、前言

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




文章目錄

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 來安裝,後續的安裝動作才不會中斷。
  • 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 環境。
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