制御スクリプトの襲撃

#!は/ usr / binに/ envをbashの

バージョン0.2

kaka

セット-x

輸出LC_ALL = C
の輸出PATH = / binに:/ sbinにします。/ usr / binにします。/ usr / sbinに

用法(){
猫<< EOFの
raid.sh:RAIDの設定ツールの
使用方法:raid.sh [OPTION ...]
-c、クリア襲撃--clear設定
任意のレイド作成する-n、--noneraid不要
-fを、 -すべてのディスクの0手段300ギガバイト、2、RAID10または800ギガバイト、0、RAID10:最初のRAID情報--first
[コンフィグサイズ、NUM、レベル(RAID0は単に各ディスクモードをサポートする)]
-s、 -第2秒RAID情報:2TB、5、RAID5または2TB、0、RAID5 -すべてのディスクが、残りの0手段
-t、第三のRAID情報--third
-oを、記載レイド情報--forth
-iが、第--fifth襲撃の情報
;ライトバック- WB:-w、書き込みモードを--writemode WT -ライト・throught。デフォルトではWBのある
キャッシュモード--cachemode、-a:キャッシュ-キャッシュモードを、ダイレクト-ダイレクトモード。デフォルトでは、キャッシュされています
-r、キャッシュモードを--ramode:NORA -いいえ先読み。RA -先読み。ADRA -適応先読み。デフォルトでは、RAである
コントローラのアダプタNUM --adapter、-adp

ヘルプオプション:
-h、このヘルプメッセージを表示する--help
EOFを
}

[[$#-lt 1]] && &&の使用終了

ARGS = $(getoptの-q -o CNF:S:T:O:I:W:R:-l noneraid、クリア:第三:第二、第一、等:第五:、WRITEMODE :, CACHEMODE:、ramode:、アダプタ:ヘルプ- "$ @")
[[$?-ne 0] &&エコー"不明オプション:$ 1" &&出口1
evalのセット- "$ {ARGS}"

_writemode = "WB"
_cachemode = "キャッシュ"
_ramode = "RA"
_adapter = "A0"

[[$#-gt 0]]しばらく
やる
におけるケース"$ 1"
--clear)| -c
_clr = 1
;;
-n | --noraid)
_noraid = 1
;;
-f | --first)
_first = $ 2
シフト
;;
-s | -第2)
_second = $ 2
シフト
;;
-t | --third)
_third = $ 2
シフト
;;
-o | --forth)
_forth = $ 2
シフト
;;
-i | --fifth)
_fifth = $ 2
シフト
;;
-w | --writemode)
_writemode = $ 2
シフト
;;
-a | --cachemode)
_cachemode = $ 2
シフト
;;
-r | --ramode)
_ramodeは$ = 2
シフトを
;;
-adp | --adapter)
_adapter = $ 2
シフト
;;
-h | --help)
の使用
;;
ESACの
シフトが
行われ

#######################################

すべてのディスクの情報を取得します。

#######################################
MEGACLI =は/ opt /のMegaRAID / MegaCli / MegaCli64
ENCLOSURE = $($ MEGACLI -EncInfo -aALL | AWK '/デバイスID / {$ NFを印刷}' | sedのQ)を
DISKNUM = $($ MEGACLI -EncInfo -aALL | AWK「/物理ドライブの数/ {印刷$ NF} '| sedのQ)

宣言-a disks_cfgsizeの
宣言-aのdisks_unitの
宣言-a disks_esid
のx = 1
((i = 1から; I <= $ DISKNUM; I ++))のために
、DO
E_ID = $MEGACLI -pdlist -aall |grep "Enclosure Device ID" | head -n $i | tail -n 1 | awk '{print $4}'
S_ID = $MEGACLI -pdlist -aall |grep "Slot Number" | head -n $i | tail -n 1 | awk '{print $3}'
disk_cfgsize_raw = $MEGACLI -pdInfo -PhysDrv[$e_id:$s_id] -aALL|grep "Raw Size"|awk '{print $3}'
disk_size_unit =/opt/MegaRAID/MegaCli/MegaCli64 -pdInfo -PhysDrv[$e_id:$s_id] -aALL|grep "Raw Size"|awk '{print $4}'

[ "$disk_size_unit" = "GB" ] && disk_cfgsize=`echo "scale=0; $disk_cfgsize_raw/100*100" | bc`
[ "$disk_size_unit" = "TB" ] && disk_cfgsize=`echo "scale=1; $disk_cfgsize_raw/1" | bc`

disks_cfgsize[$x]=$disk_cfgsize
disks_unit[$x]=$disk_size_unit
disks_esid[$x]=$e_id:$s_id

let x++

行わ
###################################

完了

###################################

parameter_verify(){
ローカルサイズ= $ 1
ローカルNUM = $ 2
ローカルレベル= $ 3

# all can't be null
[ -z "$size" -o -z "$num" -o -z "$level" ] && echo "All parameters cann't be empty." && return 1

# just support raid0(each disk), raid1, raid10, raid5 so far
[ $level != "raid0" -a $level != "raid5" -a $level != "raid10" -a $level != "raid1" -a $level != "raid50" -a $level != "raid60" ] && echo "Just support raid0, raid1, raid10, raid5, raid50, raid60 so far" && return 2

return 0

}

makeraid0(){
エコー"メイクRAID0"
宣言-aディスク
ローカルdisks_txt = echo "$@" | awk -F'ENDDISK' '{print $1}'
ローカルWRITE_MODE = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $1}'
ローカルcache_mode = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $2}'
ローカルra_mode =echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $3}'

local i=1;
for disk in `echo $disks_txt` ; do disks[$i]=$disk; let i=i+1; done

local write="WB"
local cache="Cached"
local ramode="RA"
[ "$write_mode" = "WT" ] && write="WT"
[ "$cache_mode" = "Direct" ] && cache="Direct"
[ "$ra_mode" = "NORA" ] && ramode="NORA"
[ "$ra_mode" = "ADRA" ] && ramode="ADRA"

for((i=1;i<=${#disks[@]};i++))
do
    [ ! -z "${disks[$i]}" ] && $MEGACLI -CfgLdAdd -r0 [${disks[$i]}] $write $cache $ramode -$adapter || return 1
    disks[$i]=""
done

}

makeraid50(){
エコー"メイクRAID50"
宣言-aディスク
ローカルdisks_txt = echo "$@" | awk -F'ENDDISK' '{print $1}'
ローカルWRITE_MODE = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $1}'
ローカルcache_mode = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $2}'
ローカルra_mode =echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $3}'

local i=1;
for disk in `echo $disks_txt` ; do disks[$i]=$disk; let i=i+1; done

local write="WB"
local cache="Cached"
local ramode="RA"
[ "$write_mode" = "WT" ] && write="WT"
[ "$cache_mode" = "Direct" ] && cache="Direct"
[ "$ra_mode" = "NORA" ] && ramode="NORA"
[ "$ra_mode" = "ADRA" ] && ramode="ADRA"

disknum=${#disks[@]}
[ $disknum -lt 6 ] && echo "Disk num cann't be less then 6." && return 2

let raid0_num=disknum/2
let raid1_begin=raid0_num+1
_parameter=$(
echo -n "-Array0["
for((i=1;i<=$raid0_num;i++))
do
    echo -n ${disks[$i]},
done | sed 's/,$//'
echo -n "] "
echo -n "-Array1["
for((i=$raid1_begin;i<=$disknum;i++))
do
    echo -n ${disks[$i]},
done | sed 's/,$//'
echo -n "]"
)
$MEGACLI -CfgSpanAdd -r50 $_parameter $write $cache $ramode -a0

}

makeraid10(){
エコー"メイクRAID10"
宣言-aディスク
ローカルdisks_txt = echo "$@" | awk -F'ENDDISK' '{print $1}'
ローカルWRITE_MODE = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $1}'
ローカルcache_mode = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $2}'
ローカルra_mode =echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $3}'

local i=1;
for disk in `echo $disks_txt` ; do disks[$i]=$disk; let i=i+1; done

local write="WB"
local cache="Cached"
local ramode="RA"
[ "$write_mode" = "WT" ] && write="WT"
[ "$cache_mode" = "Direct" ] && cache="Direct"
[ "$ra_mode" = "NORA" ] && ramode="NORA"
[ "$ra_mode" = "ADRA" ] && ramode="ADRA"

disknum=${#disks[@]}
let disknum=disknum/2
_parameter=$(
for((i=1;i<=$disknum;i++))
do
    echo -n "-Array${i}[${disks[((i*2-1))]},${disks[((i*2))]}]"
done)
$MEGACLI -CfgSpanAdd -r10 $_parameter $write $cache $ramode -a0

}

makeraid5(){
エコー"メイクRAID5"
宣言-aディスク
ローカルdisks_txt = echo "$@" | awk -F'ENDDISK' '{print $1}'
ローカルWRITE_MODE = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $1}'
ローカルcache_mode = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $2}'
ローカルra_mode =echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $3}'

local i=1;
for disk in `echo $disks_txt` ; do disks[$i]=$disk; let i=i+1; done

local write="WB"
local cache="Cached"
local ramode="RA"
[ "$write_mode" = "WT" ] && write="WT"
[ "$cache_mode" = "Direct" ] && cache="Direct"
[ "$ra_mode" = "NORA" ] && ramode="NORA"
[ "$ra_mode" = "ADRA" ] && ramode="ADRA"

_parameter=$(
for((i=1;i<=${#disks[@]};i++))
do
    echo -n ${disks[$i]},
done | sed 's/,$//')
$MEGACLI -CfgLdAdd -r5 [$_parameter] $write $cache $ramode -a0

}

makeraid1(){
エコー"メイクRAID1"
宣言-aディスク
ローカルdisks_txt = echo "$@" | awk -F'ENDDISK' '{print $1}'
ローカルWRITE_MODE = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $1}'
ローカルcache_mode = echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $2}'
ローカルra_mode =echo "$@" | awk -F'ENDDISK' '{print $2}' | awk '{print $3}'

local i=1;
for disk in `echo $disks_txt` ; do disks[$i]=$disk; let i=i+1; done

local write="WB"
local cache="Cached"
local ramode="RA"
[ "$write_mode" = "WT" ] && write="WT"
[ "$cache_mode" = "Direct" ] && cache="Direct"
[ "$ra_mode" = "NORA" ] && ramode="NORA"
[ "$ra_mode" = "ADRA" ] && ramode="ADRA"

_parameter=$(
for((i=1;i<=${#disks[@]};i++))
do
    echo -n ${disks[$i]},
done | sed 's/,$//')
$MEGACLI -CfgLdAdd -r1 [$_parameter] $write $cache $ramode -a0

}

clearcfg(){
エコー"クリア"
$ MEGACLI -CfgClr -aALL

すべてのディスクの良いを作ります

for((i=1;i<=${#disks_cfgsize[@]};i++)); do
    [ "${disks_esid[$i]}" != "" ] && $MEGACLI -PDMakeGood -PhysDrv[${disks_esid[$i]}] -force -a0 1>/dev/null 2>/dev/null
done
sleep 2s

}

diskinit(){
$ MEGACLI -LDinit -start -L0 -A0
}

[1 -eq [ "$ _clr"]] && clearcfg

[[$ _noraid -eq 1]] &&エコー "いずれかの襲撃を作成する必要はありませんが。" &&終了0

create_raid(){
局所サイズ= echo $1 | awk -F',' '{print $1}'
ローカルNUM = echo $1 | awk -F',' '{print $2}'
ローカルレベル=echo $1 | awk -F',' '{print $3}'

# verify the paramters
parameter_verify "$size" "$num" "$level" || exit 1

# When num is zero, all disks to be one raid and exit
if [ $num -eq 0 ] ; then
    echo "All disks will be one raid group."

    declare -a disks_esid_notnull
    for((i=1;i<=${#disks_cfgsize[@]};i++)); do
        [ "${disks_esid[$i]}" != "" ] && disks_esid_notnull[$x]=${disks_esid[$i]} && disks_esid[$i]=""  && let x++
    done

    make${level} ${disks_esid_notnull[@]} "ENDDISK" "$_writemode" "$_cachemode" "$_ramode"
    if [ $? -ne 0 ] ;then echo "Make $level failed"; exit 1; fi

    diskinit
    exit 0
else
    echo "Create $level($num disks with size $size)"

    # find the disks with the specified config size
    declare -a raid_disks
    x=1
    for((i=1;i<=${#disks_cfgsize[@]};i++)); do
        [ ${disks_cfgsize[$i]}${disks_unit[$i]} = "$size" ] && [ "${disks_esid[$i]}" != "" ] && raid_disks[$x]=${disks_esid[$i]} && disks_esid[$i]=""  && let x++
        [ $x -gt $num ] && break
    done

    [ ${#raid_disks[@]} -ne $num ] && echo "No enought disks with config size $size to create the RAID." && exit 1

    make${level} ${raid_disks[@]} "ENDDISK" "$_writemode" "$_cachemode" "$_ramode"
    if [ $? -ne 0 ] ;then echo "Make $level failed"; exit 2; fi
fi

}

もし[-n "$ _first"]; その後、
"_first $" create_raid
Fiの

もし[-n "$ _second"]; その後、
"$ _second" create_raid
Fiを提供して

[-n "$ _third"]の場合; その後、
create_raid "$ _third"
Fiの

[-n "$ _forth"]の場合; その後、
"$ _forth" create_raid
Fiを提供して

[-n "$ _fifth"]の場合; その後、
"$ _fifth" create_raid
Fiを提供して

もし[ $MEGACLI -pdlist -aall |grep Adapter |wc -l-eq 2]
次に、
NUM = $MEGACLI -pdlist -aall |grep "Enclosure Device ID"|wc -l
ID = $MEGACLI -pdlist -aall |grep "Enclosure Device ID" |awk '{print $4}'|sed -n 1p
ID_2 = $MEGACLI -pdlist -aall |grep "Enclosure Device ID" |awk '{print $4}'|sed -n "$num"p
disk_num = $MEGACLI -pdlist -aall |grep "Enclosure Device ID" |awk '{print $4}'|wc -l
disk_bnum = $MEGACLI -pdlist -aall |grep -w "Coerced Size" |grep -v "Non"|wc -l
disk_b = $MEGACLI -pdlist -aall |grep -w "Coerced Size" |grep -v "Non"|sed -n "$disk_bnum"p|awk '{print $3}'
create_raid $ disk_b $ disk_num RAID0
Fiの
diskinit
出口0

おすすめ

転載: blog.51cto.com/12768454/2479156