mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	configraid support scripts
This commit is contained in:
		
							
								
								
									
										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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user