1. 程式人生 > >服務器陣列管理工具之perccli和storccli

服務器陣列管理工具之perccli和storccli

arc 丟失 硬盤模式 pan echo solid 就是 color brush

前言:

在工作場景中,不乏遇到在線陣列配置或硬盤模式更改的。為了方便理解,打一個不是很恰當的比方:一臺業務機器除系統盤外全部單盤raid0做數據掛載,在業務運行過程中,有一塊硬盤壞了,我們在線更換硬盤後,因為硬盤模式的問題,此時系統是無法識別硬盤的,對不對,那怎麽辦?重啟機器配置陣列?那如果業務較重要,不能停機呢?這時就是perccli和storccli大展身手的時候了。

其實perccli和storccli就是同一個工具,語法完全一樣,只是命令名字不一樣,適用的品牌不一樣。perccli適用於dell機器,storccli適用於華為、浪潮(其它品牌沒有測試過,不確認)。下面指令以perccli做示例。順便貼個下載鏈接吧。

https://downloads.dell.com/FOLDER03559396M/1/perccli-1.17.10-1.noarch.rpm

https://downloadmirror.intel.com/26820/eng/StorCli.zip


一、常用指令

# ./perccli64 /c0/eall/sall show                    查看物理硬盤信息列表
# ./perccli64 /c0/vall                              查看虛擬磁盤信息列表,即陣列信息
# ./perccli64 /c0 show preservedCache               查看虛擬磁盤丟失信息
# ./perccli64 /c0/fall show all                     查看脫機硬盤信息
# ./perccli64 /c0/v11 delete preservedcache         清除控制器0上的虛擬磁盤11的緩存信息
# ./perccli64  /c0/fall delete                      清除外來硬盤配置信息
# ./perccli64 /c0/fall import [preview ]            導入外來硬盤配置
# ./perccli64 /c0 add vd r0 drives=32:10 wb ra                   編號為32:10的硬盤做raid0
# ./perccli64 /c0 add vd r5 size=all drives=32:01,32:02,32:03    對應編號3塊硬盤做raid5
# ./perccli64 /c0 add vd r1 size=all drives=32:01,32:02          對應編號2塊硬盤做raid1


二、運用示例

1.講其它示例前,我們先把前言部分硬盤更換重做raid0的問題先解決

# 先清除故障硬盤緩存信息
get_miss_vds=`./perccli64 /c0 show preservedcache | awk '/Missing/ {print $1}'`
./perccli64 /c0/fall delete &> /dev/null
if [ -z "$get_miss_vds" ]; then
    echo "No miss virtual disk,pass..."
    exit
else
    for i in $get_miss_vds; do
        ./perccli64 /c0/v$i delete preservedcache
    done
fi
# 判斷物理硬盤模式信息,如果處於UGood模式則創建raid0
ugood_disks=`./perccli64 /c0/eall/sall show | awk '/^[0-9].*UGood/ {print $1}'`
for i in $ugood_disks; do
    ./perccli64 /c0 add vd r0 drives=$i wb ra
done


如上,無論你是壞幾塊盤,只要系統還沒有崩潰,都可運行。如果是多陣列運行,需註意硬盤所屬陣列,如果raid1的系統盤有一塊同時處於故障系列,需等待系統盤陣列同步完成後才可執行上述代碼


2.硬盤模式更改

diskType=`echo $1 | egrep -io 'SSD|HDD|ALL'`
destMode=`echo $1 | egrep -io 'jbod|online'`
jbod_status=`./perccli64 /c0 show jbod | awk '/^JBOD/{print $1}'`
if [ "$1" == "ALL_online" -a "$jbod_status" == "ON" ]; then
    # 關閉jbod模式,所有硬盤自動轉換為UGood模式後,磁盤可用於陣列創建
    ./perccli64 /c0 set jbod=off &> /dev/null
elif [ "$1" != "ALL_online" -a "$jbod_status" == "OFF" ]; then
    # 啟用jbod,適用於hadoop等業務機器數據掛載
    ./perccli64 /c0 set jbod=on &> /dev/null     
fi
# 根據$1定義需轉換的源硬盤類型
if [ "$diskType" == "ALL" -a "$destMode" == "jbod" ]; then
    reMode='^[0-9].*UGood'
elif [ "$diskType" == "HDD" -a "$destMode" == "online" ]; then
    # 所有HDD的JBOD硬盤轉換為UGood模式
    reMode='^[0-9].*JBOD.*HDD'
elif [ "$diskType" == "HDD" -a "$destMode" == "jbod" ]; then
    #所有HDD磁盤轉換為JBOD模式
    reMode='^[0-9].*UGood.*HDD'
elif [ "$diskType" == "SSD" -a "$destMode" == "jbod" ]; then
    # 所有SSD轉為JBOD模式
    reMode='^[0-9].*UGood.*SSD'
elif [ "$diskType" == "SSD" -a "$destMode" == "online" ]; then
    # 所有SSD轉換為UGood模式
    reMode='^[0-9].*JBOD.*SSD'
else
    echo -e "\e[0;31;1m當前腳本不支持此類型硬盤模式轉換\e[0m"
    exit 2
fi
# 開始轉換
./perccli64 /c0/eall/sall show | egrep $reMode | awk -F '[ :]' '{print $1,$1}' | while read EID SLOT; do
    if [ "${destMode}" == "jbod" ]; then
        ./perccli64 /c0/e$EID/s$SLOT set ${destMode} &> /dev/null
    elif [ "${destMode}" == "online" ]; then
        ./perccli64 /c0/e$EID/s$SLOT set good force &> /dev/null
    fi    
    
    # 檢查轉換結果
    diskState=`./perccli64 /c0/eall/sall show | egrep -w "${EID}:${SLOT}" | awk '{print $3}' | sed 's/UGood/online/g' | tr 'A-Z' 'a-z'`
    if [ "$diskState" == "$destMode" ]; then
        echo "$EID:$SLOT state set $destMode success"
    else
        echo -e "\e[0;31;1m$EID:$SLOT set $destMode  failed,please check\e[0m"
        exit
    fi
done


其實這兩個命令更適合的場景是根據業務類型在ks文件中定義陣列,通過pxe下發,物理機系統安裝前即可自動配置陣列了。













服務器陣列管理工具之perccli和storccli