︿
Top

1、前言

在文字介面下若能即時查看磁碟陣列及硬碟的狀態對於硬體的管理上將更保有彈性,因此此篇實作便出現了透過 MegaCLI 可以很方便的查看目前 RAID 及 HDD 狀態。






文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 linux-megacli 套件
          步驟2.修改相關設定檔
          步驟3.了解 Dell RAID 相關名詞
          步驟4.開始使用 MegaCli 指令
          步驟5.撰寫 MegaCli Script
          步驟6.MegaCli Script 測試
4、參考





2、實作環境

  • FreeBSD 6.2-RELEASE
  • 主機硬體型號:Dell PowerEdge 1950
  • 硬碟規格:SAS HDD 73 G * 2 (Build RAID1)
  • 磁碟陣列卡型號:Dell RAID Controller PERC 5/i (Raid Card)
  • mfid0: <MFI Logical Disk> on mfi0
  • mfid0: 69376MB (142082048 sectors) RAID volume is optimal
  • linux-megacli-1.01.09_1





3、安裝及設定

步驟1.安裝 linux-megacli 套件

切換至 Ports Tree 路徑安裝 linux-megacli 套件。
cd /usr/ports/sysutils/linux-megacli  //切換到安裝路徑
make install clean                      //安裝並清除暫存檔案




步驟2.修改相關設定檔

因為 Dell 對於此工具的支援是針對 Linux 系列的所以 FreeBSD 要使用此工具會安裝一些 Linux Base 的相關套件,裝完後要修改一些地方 (安裝用程中系統會顯示訊息跟表示有哪些地方需要更改)。

修改 /boot/loader.conf 加入如下內容,已便系統重新開機時能自動載入相關核心。
vi /boot/loader.conf
 mfi_linux_load="YES"     //加入此行

修改 /etc/sysctl.conf 加入如下內容,已便系統重新開機時能自動載入相關 Compat。
vi /etc/sysctl.conf
 compat.linux.osrelease=2.6.12   //加入此行

修改 /etc/fstab 加入如下內容,已便系統重新開機時能自動載入相關檔案系統。
vi /etc/fstab
 linproc  /compat/linux/proc  linprocfs rw 0 0    //加入此行
 linsys   /compat/linux/sys   linsysfs  rw 0 0    //加入此行

修改 /etc/periodic.conf 加入如下內容 (找不到 periodic.conf 的話就複製 /etc/defaults/periodic.conf 來改吧),已便設定發送每日系統訊息時會順便加入 RAID 相關訊息。
vi /etc/periodic.conf
 daily_status_mfi_raid_enable="YES"     //加入此行

以上相關設定都修改完成後,請將系統重新開機而開機完成後可使用指令 kldstat 來查看目前系統所載入的核心。
kldstat             //查看目前系統載入的核心
 Id Refs Address    Size     Name
 1   13 0xc0400000 70794c   kernel
 2    1 0xc0b08000 1fc0     mfi_linux.ko  //載入相關核心
 3    4 0xc0b0a000 1adb8    linux.ko      //載入相關核心
 4    1 0xc0b25000 59f20    acpi.ko
 5    1 0xc6879000 6000     linprocfs.ko  //載入相關核心
 6    1 0xc6880000 3000     linsysfs.ko   //載入相關核心

系統也會載入模擬 Linux Base 相關的檔案系統。
df -h
 Filesystem       Size  Used  Avail Capacity  Mounted on
 /dev/mfid0s1a    496M   58M   398M    13%    /
 devfs            1.0K  1.0K     0B   100%    /dev
 /dev/mfid0s1g     48G   28K    44G     0%    /home
 /dev/mfid0s1e    496M   12K   456M     0%    /tmp
 /dev/mfid0s1f    9.7G  1.3G   7.6G    15%    /usr
 /dev/mfid0s1d    2.9G   22M   2.6G     1%    /var
 linprocfs        4.0K  4.0K     0B   100%    /usr/compat/linux/proc  //載入相關檔案系統
 linsysfs         4.0K  4.0K     0B   100%    /usr/compat/linux/sys   //載入相關檔案系統




步驟3.了解 Dell RAID 相關名詞

在開始使用 MegaCli 之前有些名詞我們必須先了解。

Virtual Drive (VD):虛擬硬碟,多顆硬碟組合起來的虛擬硬碟,簡單說就是 RAID。
  • VD State Optimal:RAID 目前狀態為正常 (最優)。
  • VD State Degraded:RAID 目前狀態為不正常 (退化、降級)。

Physical Drive (PD):實體硬碟,簡單說就是主機上有幾顆硬碟。
  • PD State Online:實體硬碟目前狀態為正常。
  • PD State Fail、Unconfigured:實體硬碟目前狀態為不正常 (失敗、未設定)。
  • PD State Rebuild:實體硬碟目前狀態為重建中。

以下表格為當主機硬碟正常時、發生損壞時其 VD 及 PD 的狀態:



步驟4.開始使用 MegaCli 指令

查看 RAID 狀態指令。
megacli -cfgdsply -aALL     //查看 Raid Card 型號、Disk 相關資訊
megacli -AdpAllInfo -aALL   //關於 Raid Card 功能詳細內容




步驟5.撰寫 MegaCli Script

因為 MegaCli 指令執行後會出來非常詳細的資訊,不過我最主要是想看 VD 及 PD 的狀態而以,所以就寫個簡單的 Shell Script 只抓我要看的資訊(有需要就參考看看吧)。
vi ~/check_perc5i.sh
 #!/bin/sh
 #$Id: check_perc5i.sh, v0.1 2007/12/17 weithenn Exp $
 #Check RAID Card PERC 5/i VD and PD State
 HOSTNAME=`/bin/hostname`
 CARD=`/usr/local/sbin/megacli -AdpAllInfo -aALL |grep "Product Name" | cut -d ':' -f2`
 VDSTATE1=`/usr/local/sbin/megacli -cfgdsply -aALL | grep "State"`
 VDSTATE2=`/usr/local/sbin/megacli -AdpAllInfo -aALL | grep "Degraded"`
 VDSTATE3=`/usr/local/sbin/megacli -AdpAllInfo -aALL | grep "  Offline"`
 PDSTATE1=`/usr/local/sbin/megacli -cfgdsply -aALL | grep "Online" | wc -l | sed 's/       //'`
 PDSTATE2=`/usr/local/sbin/megacli -AdpAllInfo -aALL | grep "Critical Disks"`
 PDSTATE3=`/usr/local/sbin/megacli -AdpAllInfo -aALL | grep "Failed Disks"`
 echo "##### Host Informationi #####"
 echo "Host              : $HOSTNAME"
 echo "Raid Card         :$CARD"
 echo ""
 echo "##### Virtual Disk State #####"
 echo "Virtual Disk $VDSTATE1"
 echo "$VDSTATE2"
 echo "$VDSTATE3"
 echo ""
 echo "##### Physical Disk State #####"
 echo "Physical Online   : $PDSTATE1"
 echo "$PDSTATE2"
 echo "$PDSTATE3"




步驟6.MegaCli Script 測試

上面的 Shell Script 當 RAID 正常時 執行結果如下,可看到 VD 狀態為 Optimal,而 PD 狀態為 Online Disk 有 2 顆。
 ##### Host Informationi #####
 Host                : dellbsd.weithenn.org
 Raid Card           : PERC 5/i Integrated
 ##### Virtual Disk State #####
 Virtual Disk State  : Optimal
   Degraded          : 0
   Offline           : 0
 ##### Physical Disk State #####
 Physical Online     : 2
   Critical Disks    : 0
   Failed Disks      : 0


一顆硬碟拔掉時 (模擬硬碟損壞) 訊息如下,可看到 VD 狀態由 Optimal 變成 Degraded,而 VD Disk 有 1 顆為 Degraded。
 ##### Host Informationi #####
 Host                : dellbsd.weithenn.org
 Raid Card           : PERC 5/i Integrated
 ##### Virtual Disk State #####
 Virtual Disk State  : Degraded
   Degraded          : 1
   Offline           : 0
 ##### Physical Disk State #####
 Online Disk         : 2
 Rebuild Disk        : 0
   Critical Disks    : 0
   Failed Disks      : 0


一顆硬碟拔掉時 (模擬硬碟損壞) 時 /var/log/message 訊息 (console 端也會顯示)。
 Dec 17 14:42:31 kernel: mfi0: - PD 00(e1/s0) event: Removed: PD 00(e1/s0)
 Dec 17 14:42:31 kernel: mfi0: - Type 29: Removed: PD 00(e1/s0) Info: enclPd=08, scsiType=0, portMap=01
 Dec 17 14:42:31 kernel: mfi0: - VD 00/0 state prior 3 new 2: State change on VD 00/0 from OPTIMAL(3) to DEGRADED(2)
 Dec 17 14:42:31 kernel: mfi0: - VD 00/0 event: VD 00/0 is now DEGRADED
 Dec 17 14:42:31 kernel: mfi0: - PD 00(e1/s0) state prior 24 new 17: State change on PD 00(e1/s0) from ONLINE(18) to FAILED(11)
 Dec 17 14:42:31 kernel: mfi0: - PD 00(e1/s0) state prior 17 new 1: State change on PD 00(e1/s0) from FAILED(11) to UNCONFIGURED_BAD(1)


插入新 HDD 進行 Rebuild 時 VD 狀態會由 Degraded 變回 Optimal,以下狀態為正在 Rebuild 中 2 顆 HDD (1 顆正常,1 顆重建中)。
 ##### Host Informationi #####
 Host                 : dellbsd.weithenn.org
 Raid Card            : PERC 5/i Integrated
 ##### Virtual Disk State #####
 Virtual Disk State: Degraded
   Degraded           : 1
   Offline            : 0
 ##### Physical Disk State #####
 Physical Online      : 1
 Physical Rebuild     : 1
   Critical Disks     : 0
   Failed Disks       : 0


插入新 HDD 進行 Rebuild 時 系統預設會 Auto Rebuild (console 端也會顯示),顯示進度跟時間也很準 progress 99% seconds 992s 此次實作的主機 Rebuild 大約花費 16 分 32 秒在加上前後作業時間所以整個 Rebuild 大約 17 分內完成,以下為 Rebuild 時 /var/log/message 訊息:
 Dec 17 14:49:51 kernel: mfi0: - PD 00(e1/s0) event: Inserted: PD 00(e1/s0)
 Dec 17 14:49:51 kernel: mfi0: - Type 29: Inserted: PD 00(e1/s0) Info: enclPd=08, scsiType=0, portMap=01
 Dec 17 14:49:51 kernel: mfi0: - PD 00(e1/s0) state prior 1 new 0: State change on PD 00(e1/s0) from UNCONFIGURED_BAD(1) to UNCONFIGURED_GOOD(0)
 Dec 17 14:49:51 kernel: mfi0: - PD 00(e1/s0) state prior 0 new 16: State change on PD 00(e1/s0) from UNCONFIGURED_GOOD(0) to OFFLINE(10)
 Dec 17 14:49:51 kernel: mfi0: - PD 00(e1/s0) event: Rebuild automatically started on PD 00(e1/s0)
 Dec 17 14:49:51 kernel: mfi0: - PD 00(e1/s0) state prior 16 new 20: State change on PD 00(e1/s0) from OFFLINE(10) to REBUILD(14)
 Dec 17 14:50:07 kernel: mfi0: - PD 00(e1/s0) progress 1% seconds 16s: Rebuild progress on PD 00(e1/s0) is 1.88%(16s)
 Dec 17 14:50:23 kernel: mfi0: - PD 00(e1/s0) progress 3% seconds 32s: Rebuild progress on PD 00(e1/s0) is 3.74%(32s)
 ....略
 Dec 17 15:06:24 kernel: mfi0: - PD 00(e1/s0) progress 99% seconds 992s: Rebuild progress on PD 00(e1/s0) is 99.62%(992s)
 Dec 17 15:06:29 kernel: mfi0: - PD 00(e1/s0) event: Rebuild complete on PD 00(e1/s0)
 Dec 17 15:06:29 kernel: mfi0: - VD 00/0 state prior 2 new 3: State change on VD 00/0 from DEGRADED(2) to OPTIMAL(3)
 Dec 17 15:06:29 kernel: mfi0: - VD 00/0 event: VD 00/0 is now OPTIMAL
 Dec 17 15:06:29 kernel: mfi0: - PD 00(e1/s0) state prior 20 new 24: State change on PD 00(e1/s0) from REBUILD(14) to ONLINE(18)




4、參考

文章標籤: