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
 | 
						|
 |