git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@14408 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			208 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| #set -x
 | |
| #-----------------------------------------------------------------------------
 | |
| #  createFS 
 | |
| #
 | |
| # This script is used to create new FS on xCAT Service Node to hold the nim
 | |
| # resources. Currently it support AIX system, will support Linux later.
 | |
| #
 | |
| # By default, the new FS is created as 5G based on rootvg. But it can be 
 | |
| # customized, the options are compatible with AIX crfs command.
 | |
| #
 | |
| # If we need to create multiple file systems, then we need to call "create_FS" 
 | |
| # multiple times at the bottom of this script, passing it different parameters.
 | |
| #
 | |
| # For example:
 | |
| # FS1 = ("/install", "jfs2", "rootvg","" , "yes", "size=5G");
 | |
| # FS2 = ("/install", "jfs2", "datavg", "hdisk2 hdisk3", "yes", "size=5G frag=512 nbpi=1024");
 | |
| #
 | |
| # create_FS $FS1
 | |
| # create_FS $FS2
 | |
| #
 | |
| #-----------------------------------------------------------------------------
 | |
| 
 | |
| # For AIX system
 | |
| # MountPiont, VfsType, VolumeGroup, harddisks, AutoMount, Attributes 
 | |
| FS1="/install,jfs2,rootvg,,yes,size=5G"
 | |
| #FS2="/install,jfs2,datavg,hdisk2 hdisk3,yes,size=5G frag=512 nbpi=1024"
 | |
| 
 | |
| # To-DO
 | |
| # For Linux system
 | |
| # MountPiont, VfsType, fs-options 
 | |
| 
 | |
| #-----------------------------------------------------------------------------
 | |
| create_FS(){
 | |
| 
 | |
|     fs=$1
 | |
|     os=`uname`
 | |
|     if [[ $os = AIX* ]]; then
 | |
|         echo "To create File System on AIX"
 | |
|         create_FS_AIX $fs
 | |
|     else
 | |
|         echo "To create File System on Linux"
 | |
|         create_FS_Linux $fs
 | |
|     fi
 | |
| }
 | |
| 
 | |
| #----------------------------------------------
 | |
| create_FS_AIX(){
 | |
| 
 | |
|     aixfs=$1
 | |
| 
 | |
|     # parse input
 | |
|     IFS=','
 | |
|     set $aixfs
 | |
| 
 | |
|     mp=$1
 | |
|     vfs=$2
 | |
|     vg=$3
 | |
|     hd=$4
 | |
|     mnt=$5
 | |
|     attrs=$6
 | |
|     
 | |
|     unset IFS
 | |
| 
 | |
|     echo "MountPiont: $mp, VfsType: $vfs, VolumeGroup: $vg, harddisks: $hd, AutoMount: $mnt, Attributes: $attrs"
 | |
| 
 | |
|     # First, check if mp is already FS
 | |
|     old_mp=`df -m $mp |tail -1|awk '{print $7}' 2>/dev/null`
 | |
| 
 | |
|     if [ "$old_mp" != "" ] && [ $old_mp = $mp ]; then
 | |
|         echo "$mp is already a file system, will not create it."
 | |
|         exit 0
 | |
|     fi
 | |
| 
 | |
|     if [ "$vg" != "" ]; then
 | |
| 
 | |
|         # check if vg exists
 | |
|         result=`lsvg |grep $vg`
 | |
|         if [ $? -eq 0 ]; then
 | |
|             # vg exists
 | |
|             # check if "harddisks" is provided
 | |
|             if [ "$hd" != "" ]; then
 | |
|                 # harddisk provided
 | |
|                 # check if hardisk is the same with current ones
 | |
|                 old_hd=`lsvg -p $vg|grep 'hd'|awk '{print $1}'|tr "\n" " "`
 | |
|                 
 | |
|                 if [ "$old_hd" = "$hd" ]; then
 | |
|                     # use the existed vg
 | |
|                     tocr_fs=1
 | |
|                 else
 | |
|                     # extendvg
 | |
|                     result=`extendvg $vg $hd`
 | |
|                     if [ $? -eq 0 ]; then
 | |
|                         # to create fs
 | |
|                         tocr_fs=1
 | |
|                     else
 | |
|                         echo "Can not extend VG $vg with hard disk $hd"
 | |
|                         exit 1
 | |
|                     fi
 | |
|                 fi
 | |
|             else
 | |
|                 # use the provided vg
 | |
|                 tocr_fs=1
 | |
|             fi
 | |
|         else
 | |
|             # not exist
 | |
|             # check if "harddisks" is provided
 | |
|             if [ "$hd" != "" ]; then
 | |
|                 # harddisk provided
 | |
|                 # create VG first, then FS
 | |
|                 tocr_vg=1
 | |
|                 tocr_fs=1
 | |
|             else
 | |
|                 # no vg, no hd, give error msg and exit
 | |
|                 echo "No harddisks provided, can not create VG and FS."
 | |
|                 exit 1
 | |
|             fi
 | |
|         fi
 | |
|     else
 | |
|         echo "use rootvg to create FS $mp"
 | |
|         $vg="rootvg"
 | |
|     fi
 | |
| 
 | |
|     # create VG if needed
 | |
|     if [ "$tocr_vg" = "1" ]; then
 | |
|         result=`mkvg -y $vg $hd`
 | |
|         if [ $? -ne 0 ]; then
 | |
|             echo "Can not make VG $vg using harddisk $hd."
 | |
|             exit 1
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     # create FS if needed
 | |
|     if [ "$tocr_fs" = "1" ]; then
 | |
|         # if /install exists, then back up first
 | |
|         result=`ls $mp 2>/dev/null`
 | |
|         if [ $? -eq 0 ]; then
 | |
|             # exist
 | |
|             # do backup first
 | |
|             tmp_mp="/install_createFS"
 | |
|             echo "Running command: mv $mp $tmp_mp"
 | |
|             result=`mv $mp $tmp_mp`
 | |
|             if [ $? -ne 0 ]; then
 | |
|                 echo "Can not back up $mp to $tmp_mp"
 | |
|                 exit 1
 | |
|             fi
 | |
|             echo "Back up $mp to $tmp_mp"
 | |
|             bakup=1
 | |
|         fi
 | |
|         
 | |
|         # create fs
 | |
|         cmd="crfs"
 | |
|         if [ "$vfs" != "" ]; then
 | |
|             cmd="$cmd -v $vfs"
 | |
|         fi
 | |
| 
 | |
|         if [ "$vg" != "" ]; then
 | |
|             cmd="$cmd -g $vg"
 | |
|         fi
 | |
| 
 | |
|         if [ "$mp" != "" ]; then
 | |
|             cmd="$cmd -m $mp"
 | |
|         fi
 | |
| 
 | |
|         if [ "$mnt" != "" ]; then
 | |
|             cmd="$cmd -A $mnt"
 | |
|         fi
 | |
| 
 | |
|         if [ "$attrs" != "" ]; then
 | |
|             cmd="$cmd -a $attrs"
 | |
|         fi
 | |
|         
 | |
|         echo "Running command: $cmd"
 | |
|         result=`$cmd`
 | |
|         if [ $? -ne 0 ]; then
 | |
|             echo "Can not create file system $mp"
 | |
|             exit 1
 | |
|         fi
 | |
| 
 | |
|         result=`mount $mp`
 | |
|         if [ $? -ne 0 ]; then
 | |
|             echo "Can not mount file system $mp"
 | |
|             exit 1
 | |
|         fi
 | |
|         
 | |
|         # restore /install to FS
 | |
|         if [ "$bakup" = "1" ]; then
 | |
|             echo "Restore $tmp_mp to new FS $mp"
 | |
|             
 | |
|             result=`cd $tmp_mp;find . -print | cpio -pdlvu $mp`
 | |
|             if [ $? -ne 0 ]; then
 | |
|                 echo "Can not restore $tmp_install to file system $mp"
 | |
|                 exit 1
 | |
|             fi
 | |
| 
 | |
|             result=`rm -rf $tmp_mp`
 | |
|             if [ $? -ne 0 ]; then
 | |
|                 echo "Can not remove $tmp_mp"
 | |
|                 exit 1
 | |
|             fi
 | |
|         fi    
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # main
 | |
| create_FS $FS1
 | |
| 
 |