mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-21 19:22:05 +00:00
configraid support scripts
This commit is contained in:
parent
3b3e1ac93a
commit
837552f31a
283
xCAT-genesis-scripts/bin/configraid
Executable file
283
xCAT-genesis-scripts/bin/configraid
Executable file
@ -0,0 +1,283 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This script is used to configure raid.
|
||||
#
|
||||
#
|
||||
##############################################
|
||||
# source raidutils
|
||||
##############################################
|
||||
# prepare tmp log file for configraid
|
||||
touch="touch"
|
||||
timestamp=`date +"%Y%m%d%H%M%S"`
|
||||
log_file="/tmp/configraid.log.$timestamp"
|
||||
$touch $log_file
|
||||
|
||||
str_dir_name=`dirname $0`
|
||||
. $str_dir_name/raidutils $log_file
|
||||
|
||||
|
||||
###################################################################################
|
||||
#
|
||||
# Usage
|
||||
#
|
||||
#################################################################################
|
||||
function usagesc {
|
||||
echo 'Usage: configraid delete_raid=[all|"<raid_array_list>"|null] '
|
||||
echo ' stripe_size=[16|64|256] '
|
||||
echo ' create_raid="rl!<raidlevel>|[pci_id#<num>|pci_slot_name#<pci_slot_name>|disk_names#<sg0>#..#<sgn>]|disk_num#<number>" ... '
|
||||
echo ' 1. delete_raid: '
|
||||
echo ' List raid arrays which should be removed. If its value is all, all raid arrays detected should be deleted.'
|
||||
echo ' If its value is a list of raid array names, these raid arrays will be deleted. Raid array names should be seperated by "#".'
|
||||
echo ' If its value is null, no raid array will be deleted.'
|
||||
echo ' If there is no delete_raid, the default value is null.'
|
||||
echo ' The format is : delete_raid = [all|"<array1>#...#<arrayn>"|null]'
|
||||
echo ' For example:'
|
||||
echo ' delete_raid="sda#sdd" '
|
||||
echo ' '
|
||||
echo ' 2. stripe_size: '
|
||||
echo ' Currently supported stripe sizes in kb include 16, 64, and 256.'
|
||||
echo ' If stripe size is not specified, it will default to the recommended stripe size for the selected RAID level.'
|
||||
echo ' For example:'
|
||||
echo ' stripe_size=256 '
|
||||
echo ' '
|
||||
echo ' 3. create_raid: '
|
||||
echo ' To create a raid array, add a line begginning with create_raid.'
|
||||
echo ' The format is : '
|
||||
echo ' create_raid="rl#[0,10,5,6]|[PCI_ID#<num>|PCI_SLOT_name#<pci_slot_name>]|disk_num#<number of disks for one raid>"'
|
||||
echo ' rl means RAID level, RAID level can be any supported RAID level for the given adapter, such as 0, 10, 5, 6;'
|
||||
echo ' rl is a must for every create_raid. '
|
||||
echo ' pci_id is PCI vender and device ID; refer to http://pci-ids.ucw.cz/read/PC/1014/034a;'
|
||||
echo ' disk_num is the number of disk this RAID will contain, default value is all unused disks in its pci slot; '
|
||||
echo ' pci_slot_name is the specified PCI location. If specify pci_slot_name, this raid will be created using disks from this pci_slot;'
|
||||
echo ' disk_names is a list of advanced format disk names. If specify disk_names, this raid will be created using these disks;'
|
||||
echo ' Example 1, create 2 raid0 arrays, one is using 3 disks, the other is using 2 disks, the disks PCI_ID is 1014:034a:'
|
||||
echo ' create_raid="rl#0|pci_id#1014:034a|disk_num#1 create_raid="rl#0|pci_id#1014:034a|disk_num#2'
|
||||
echo ' Example 2, pci_slot_name is 0001:08:00.0, create raid10 array, using 2 disks '
|
||||
echo ' create_raid="rl#10|pci_slot_name#0001:08:00.0|disk_num#2"'
|
||||
echo ' Example 3, create 1 raid0 array using advanced format disk sg1'
|
||||
echo ' create_raid="rl#0|disk_names#sg1|disk_num#1"'
|
||||
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# handle each create raid
|
||||
#
|
||||
# input format: stripe_size=16 create_raid=rl#1|pci_id#1014:034a|disk_num#1
|
||||
#
|
||||
###############################################################################
|
||||
function handle_each_create_raid {
|
||||
|
||||
local create_raid_list=$1
|
||||
local striple_pair=$2
|
||||
|
||||
# cut striple_size from striple_pair
|
||||
# if striple_size is null, it will default to the recommended stripe size
|
||||
local striple_size=""
|
||||
if [ x$striple_pair != x ]; then
|
||||
striple_size=`echo $striple_pair | $awk -F= '{print $2}'`
|
||||
else
|
||||
striple_size="default"
|
||||
fi
|
||||
|
||||
# cut create_raid_list into raid_level pci_id|pci_slot_name|disk_names disk_num
|
||||
local create_raid_value=""
|
||||
local raidlevel=""
|
||||
local disknum=""
|
||||
local pciid=""
|
||||
local pcislot_name=""
|
||||
local disk_names=""
|
||||
|
||||
create_raid_value=`echo $create_raid_list| $awk -F= '{print $2}' \
|
||||
| $sed -e 's/|/ /g'`
|
||||
# make sure create_raid_value is not null
|
||||
firstpara=`echo $create_raid_value|awk '{print $1}'`
|
||||
if [ x$firstpara != x ]; then
|
||||
for item in $create_raid_value
|
||||
do
|
||||
key=`echo $item | $awk -F# '{print $1}'`
|
||||
vla=`echo $item | $awk -F# '{if($1=="disk_names"){$1="";print $0} else { print $2}}' \
|
||||
| $sed -e 's/^\s*//g' -e 's/ /#/g'`
|
||||
case $key in
|
||||
rl )
|
||||
raidlevel=$vla
|
||||
;;
|
||||
pci_id )
|
||||
pciid=$vla
|
||||
;;
|
||||
pci_slot_name )
|
||||
pcislot_name=$vla
|
||||
;;
|
||||
disk_num )
|
||||
disknum=$vla
|
||||
;;
|
||||
disk_names )
|
||||
disk_names="$vla"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if [ x$raidlevel == x ]; then
|
||||
log_error "Can not create RAID for $create_raid_list. There is no raid level enter."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# if disk_num is null, will pick up all the disks
|
||||
if [ x$disknum == x ]; then
|
||||
disknum=all
|
||||
fi
|
||||
|
||||
|
||||
log_info "handle create raid: $create_raid_value"
|
||||
|
||||
local pcilocs=""
|
||||
local slocs_grps=""
|
||||
|
||||
# If there is disk_names, using them
|
||||
if [ x$disk_names != x ]; then
|
||||
handle_create_raid_array "$striple_size" "$raidlevel" "$disknum" "null" "$disk_names"
|
||||
else
|
||||
# If there is pci_slot_name, use it.
|
||||
# If there is no pci_slot_name, there is pci_id, use pci_id.
|
||||
if [ x$pciid != x -a x$pcislot_name == x ]; then
|
||||
pcilocs=`get_pciloc_by_id $pciid`
|
||||
elif [ x$pcislot_name != x ]; then
|
||||
pcilocs=$pcislot_name
|
||||
else
|
||||
log_error "pci_id or pci_slot_name or pci_disk_names can not be empty."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -n "$pcilocs" ]; then
|
||||
handle_create_raid_array "$striple_size" "$raidlevel" "$disknum" "$pcilocs" "null"
|
||||
else
|
||||
log_error "PCI adapter $pcilocs does not exists!" >&2
|
||||
return 1
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# main section to handle delete raid
|
||||
#
|
||||
# input format : delete_raid=[all|dev1#dev2...|null]
|
||||
#
|
||||
##############################################################################
|
||||
function handle_delete_raid {
|
||||
local input=$*
|
||||
local raid_arrays=""
|
||||
local valid_arrays=""
|
||||
|
||||
del_value=`echo "$input"|awk -F= '{print $2}'`
|
||||
# if delete_raid=all
|
||||
if [ "x$del_value" == "xall" -o "x$del_value" == "xALL" ]; then
|
||||
|
||||
raid_arrays=`get_all_raid_arrays`
|
||||
|
||||
# if delete_raid=null or nothing
|
||||
elif [ "x$del_value" == "xnull" -o "x$del_value" == "x" ]; then
|
||||
|
||||
log_info "There is no need to delete RAID arrays."
|
||||
return 1
|
||||
# if delete_raid=devlist
|
||||
else
|
||||
# delete # between raid names
|
||||
raid_arrays=`echo ${del_value}|sed 's/#/ /g'`
|
||||
fi
|
||||
|
||||
for r_a in $raid_arrays
|
||||
do
|
||||
res=`is_array $r_a`
|
||||
if [ $res -eq 0 ]; then
|
||||
if [ "x$valid_arrays" != "x" ]; then
|
||||
valid_arrays=$valid_arrays" "$r_a
|
||||
else
|
||||
valid_arrays=$r_a
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [ "x$valid_arrays" != "x" ]; then
|
||||
# delete raid arrays
|
||||
delete_ipr_array enforce=1 tryCnt=360 tryInt=60 -- $valid_arrays
|
||||
else
|
||||
log_info "There is no valid raid arrays."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#############################################################################################
|
||||
#
|
||||
# Main section :
|
||||
# delete raid
|
||||
# create raid
|
||||
#
|
||||
############################################################################################
|
||||
|
||||
input=$*
|
||||
|
||||
# If input parameter number is less than 1, print usage
|
||||
if [ $# -lt 1 ]; then
|
||||
usagesc
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If "-h|--help", print usage
|
||||
if [ "x$input" == "x--help" -o "x$input" == "x-h" ]; then
|
||||
usagesc
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# clear up delete_raid stripe_size and create_raid
|
||||
del_raid_valid=""
|
||||
cre_raid_list=""
|
||||
stripe_pair=""
|
||||
for args in "$@"
|
||||
do
|
||||
del_raid=`echo "$args" | grep "^delete_raid="`
|
||||
cre_raid=`echo "$args" | grep "^create_raid="`
|
||||
str_size=`echo "$args" | grep "^stripe_size="`
|
||||
|
||||
if [ x$del_raid != x ]; then
|
||||
del_raid_valid=$del_raid
|
||||
fi
|
||||
|
||||
if [ x$str_size != x ]; then
|
||||
stripe_pair=$str_size
|
||||
fi
|
||||
|
||||
# This is for the first create_raid
|
||||
if [ x$cre_raid_list == x -a x$cre_raid != x ]; then
|
||||
|
||||
cre_raid_list=$cre_raid
|
||||
|
||||
# if there are many create_raid
|
||||
elif [ x$cre_raid_list != x -a x$cre_raid != x ]; then
|
||||
|
||||
cre_raid_list=$cre_raid_list" "$cre_raid
|
||||
fi
|
||||
done
|
||||
|
||||
# main process for deleting raid
|
||||
if [ x$del_raid_valid != x ]; then
|
||||
handle_delete_raid "$del_raid_valid"
|
||||
fi
|
||||
|
||||
# main process for creating raid
|
||||
create_r1=`echo $cre_raid_list|awk '{print $1}'`
|
||||
if [ "x${create_r1}" != "x" ]; then
|
||||
|
||||
for cr in $cre_raid_list
|
||||
do
|
||||
# handle every create_raid
|
||||
handle_each_create_raid $cr $stripe_pair $lable_num
|
||||
done
|
||||
else
|
||||
log_info "Can not create RAID. There is no create_raid."
|
||||
fi
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
# - Added slash in front of "var" in the NICSTOBRINGUP dhclient section.
|
||||
# Bug reported by Jeff Lang <jrlang@uwyo.edu>. Thanks, Jeff!
|
||||
#
|
||||
|
||||
modprobe acpi_cpufreq 2>/dev/null # on some machines this fails
|
||||
modprobe cpufreq_ondemand
|
||||
if ls /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor &>/dev/null; then
|
||||
@ -240,10 +239,13 @@ if [ "$destiny" != "discover" ]; then #we aren't discoverying, we probably can a
|
||||
/bin/getcert $XCATMASTER:$XCATPORT
|
||||
fi
|
||||
while :; do
|
||||
if [ -z "$destiny" ]; then
|
||||
destiny=`getdestiny $XCATMASTER:$XCATPORT`
|
||||
|
||||
grepconfigraid=`echo $destiny|grep "configraid"`
|
||||
if [ -z "$destiny" -o -n "$grepconfigraid" ]; then
|
||||
destiny=`getdestiny $XCATMASTER:$XCATPORT`
|
||||
fi
|
||||
destparameter=`echo $destiny|awk -F= '{print $2}'`
|
||||
|
||||
destparameter=`echo $destiny|cut -d '=' -f 2-`
|
||||
destiny=`echo $destiny|awk -F= '{print $1}'`
|
||||
dest=`echo $destiny|awk '{print $1}'` #could probably use bash but oh well
|
||||
if [ "$dest" = "discover" ]; then #skip a query to xCAT when /proc/cmdline will do
|
||||
@ -259,7 +261,7 @@ while :; do
|
||||
elif [ "$dest" = runcmd ]; then
|
||||
destiny=`/bin/nextdestiny $XCATMASTER:$XCATPORT`
|
||||
dest=`echo $destiny|awk -F= '{print $1}'`
|
||||
$destparameter
|
||||
$destparameter
|
||||
elif [ "$dest" = runimage ]; then
|
||||
destiny=`/bin/nextdestiny $XCATMASTER:$XCATPORT`
|
||||
dest=`echo $destiny|awk -F= '{print $1}'`
|
||||
@ -324,3 +326,4 @@ while :; do
|
||||
|
||||
fi
|
||||
done
|
||||
set +x
|
||||
|
@ -49,3 +49,88 @@ function cmd_show_arrays {
|
||||
echo "$lines"
|
||||
}
|
||||
|
||||
###################################################################
|
||||
#
|
||||
# dev is raid array or not
|
||||
# input : dev
|
||||
# return : 1 ----- not raid array
|
||||
# 0 ----- raid array
|
||||
#
|
||||
###################################################################
|
||||
function is_array {
|
||||
local lines=""
|
||||
local dev=$*
|
||||
lines=`$iprconfig -c show-details $dev | grep -sq "RAID Level"`
|
||||
echo "$?"
|
||||
}
|
||||
|
||||
########################################
|
||||
#
|
||||
# iprconfig -c alt-status <dev>
|
||||
#
|
||||
########################################
|
||||
function cmd_alt_status {
|
||||
local lines=""
|
||||
local dev=$*
|
||||
lines=`$iprconfig -c alt-status $dev`
|
||||
echo "$lines"
|
||||
}
|
||||
|
||||
########################################
|
||||
#
|
||||
# iprconfig -c show-status <dev>
|
||||
#
|
||||
########################################
|
||||
function cmd_show_status {
|
||||
local lines=""
|
||||
local dev=$*
|
||||
lines=`$iprconfig -c status $dev`
|
||||
echo "$lines"
|
||||
}
|
||||
|
||||
########################################
|
||||
#
|
||||
# iprconfig -c show-alt-config
|
||||
#
|
||||
########################################
|
||||
function cmd_show_alt_config {
|
||||
local lines=""
|
||||
local dev=$*
|
||||
lines=`$iprconfig -c show-alt-config`
|
||||
echo "$lines"
|
||||
}
|
||||
|
||||
########################################
|
||||
#
|
||||
# iprconfig -c query-raid-delete <ioa>
|
||||
#
|
||||
########################################
|
||||
function cmd_query_raid_delete {
|
||||
local lines=""
|
||||
local ioa=$*
|
||||
lines=`$iprconfig -c query-raid-delete $ioa`
|
||||
echo "$lines"
|
||||
}
|
||||
|
||||
########################################
|
||||
#
|
||||
# iprconfig -c raid-delete <array>
|
||||
#
|
||||
########################################
|
||||
function cmd__raid_delete {
|
||||
local lines=""
|
||||
local array=$*
|
||||
lines=`$iprconfig -c raid-delete "$array"`
|
||||
}
|
||||
|
||||
##################################################################
|
||||
#
|
||||
# iprconfig -c raid-create $iprconfig_args $member_sgs
|
||||
#
|
||||
###################################################################
|
||||
function cmd_raid_create {
|
||||
local iprconfig_args=$1
|
||||
local member_sgs=$2
|
||||
lines=`$iprconfig -c raid-create $iprconfig_args $member_sgs`
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -81,6 +81,7 @@ touch /etc/xcat/genesis-scripts-updated
|
||||
%{rpminstallroot}/bin/raidcmd
|
||||
%{rpminstallroot}/bin/raidutils
|
||||
%{rpminstallroot}/bin/diskdiscover
|
||||
%{rpminstallroot}/bin/configraid
|
||||
%{rpminstallroot}/bin/dodiscovery
|
||||
%{rpminstallroot}/bin/dosysclone
|
||||
%{rpminstallroot}/bin/doxcat
|
||||
|
Loading…
x
Reference in New Issue
Block a user