服務器陣列管理工具之perccli和storccli
阿新 • • 發佈:2018-01-20
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