#!/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 exit $?