The script to perform the partition of local disk for statelite node
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@14348 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
7538f98837
commit
a67a6bb1bf
280
xCAT-server/share/xcat/netboot/add-on/statelite/rc.localdisk
Normal file
280
xCAT-server/share/xcat/netboot/add-on/statelite/rc.localdisk
Normal file
@ -0,0 +1,280 @@
|
||||
#! /bin/sh
|
||||
|
||||
MNTDIR="/sysroot"
|
||||
|
||||
PARTLOG=/tmp/partlog
|
||||
PARTFILE=/tmp/partition
|
||||
SCRIPTFILE=/tmp/partscript
|
||||
|
||||
disk=0
|
||||
localspace=0
|
||||
swapspace=0
|
||||
partnum=0
|
||||
|
||||
isscript=0
|
||||
isformat=0
|
||||
|
||||
# Get the xCAT server from kernel parameter
|
||||
for i in `cat /proc/cmdline`; do
|
||||
KEY=`echo $i | awk -F= '{print $1}'`
|
||||
if [ x"$KEY" = x"XCAT" ]; then
|
||||
XCATSERVER=`echo $i | awk -F= '{print $2}'`
|
||||
elif [ x"$KEY" = x"PARTITION" ]; then
|
||||
DOPART="yes"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ x"$DOPART" != x"yes" ]; then
|
||||
# do nothing
|
||||
echo "local disk: do nothing"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ x$XCATSERVER = x ]; then
|
||||
echo "Error: Cannot find the xCAT server to configure local disk."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
xCATCmd () {
|
||||
# $1 is the xCAT server
|
||||
# $2 is the command
|
||||
arch=`uname -m`
|
||||
if [ x$arch = x"ppc64" ]; then
|
||||
echo "<xcatrequest>\n<command>${2}</command>\n</xcatrequest>" | /usr/sbin/chroot ${MNTDIR} /usr/bin/openssl s_client -quiet -connect ${1} -rand /bin/nice 2>/dev/null
|
||||
else
|
||||
echo "<xcatrequest>\n<command>${2}</command>\n</xcatrequest>" | LD_LIBRARY_PATH=${MNTDIR}/lib64:${MNTDIR}/usr/lib64 ${MNTDIR}/usr/bin/openssl s_client -quiet -connect ${1} -rand /bin/nice 2>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
doconfigure () {
|
||||
# run the configure script
|
||||
if [ $isscript -eq 1 ]; then
|
||||
# run the script
|
||||
chmod +x $SCRIPTFILE
|
||||
$SCRIPTFILE
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ x"$enable" != x"yes" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if [ $disk -eq 1 ]; then
|
||||
if [ x"$enablepart" != x"yes" ]; then
|
||||
return
|
||||
fi
|
||||
if [ ! -r $dev ]; then
|
||||
echo "Error: Cannot find the device $dev"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -r "/sbin/parted" -a ! "/usr/sbin/parted" ]; then
|
||||
echo "Error: Cannot get parted command to do the partitioning for local disk"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# remove all the partitions on the device
|
||||
# the output of parted -l -s -m should like
|
||||
#BYT;
|
||||
##/dev/sda:73.4GB:scsi:512:512:msdos:IBM-ESXS ST373455SS;
|
||||
##1:1049kB:72.3GB:72.3GB:ext4::boot;
|
||||
##2:72.3GB:73.4GB:1073MB:linux-swap(v1)::;
|
||||
|
||||
`parted -lsm > $PARTLOG`
|
||||
getpart=0
|
||||
while read PLINE
|
||||
do
|
||||
msg=`echo $PLINE | grep 'unrecognised disk label'`
|
||||
if [ x"$msg" != x ]; then
|
||||
devname=`echo $PLINE | awk -F' ' '{print $2}' | sed -e "s/://g"`
|
||||
|
||||
if [ x$devname = x"$dev" ]; then
|
||||
#create the label
|
||||
`parted -s $dev mklabel msdos`
|
||||
fi
|
||||
fi
|
||||
done < $PARTLOG
|
||||
|
||||
`parted -lsm > $PARTLOG`
|
||||
|
||||
partinfo=`parted -lsm`
|
||||
# Verbose message
|
||||
echo "Original partition list"
|
||||
echo $partinfo
|
||||
|
||||
getpart=0
|
||||
while read PLINE
|
||||
do
|
||||
name=`echo $PLINE | awk -F: '{print $1}'`
|
||||
if [ x"$name" = x"BYT;" ]; then
|
||||
if [ $getpart -eq 1 ]; then
|
||||
#getpart=0
|
||||
break
|
||||
fi
|
||||
fi
|
||||
if [ x"$name" = x"$dev" ]; then
|
||||
getpart=1
|
||||
localdisksize=`echo $PLINE | awk -F: '{print $2}'`
|
||||
echo "localdisk: $localdisk - $localdisksize"
|
||||
elif [ $getpart -eq 1 -a x$name != "x" -a x$name != x"Error" ]; then
|
||||
if [ x$clear != x ]; then
|
||||
`parted $dev rm $name >/dev/null`
|
||||
echo "Remove the partion $name"
|
||||
sleep 1
|
||||
else
|
||||
partnum=`expr $partnum + 1`
|
||||
fi
|
||||
fi
|
||||
done < $PARTLOG
|
||||
|
||||
if [ $getpart -eq 0 ]; then
|
||||
echo "Error: Cannot get partition information for $dev"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# make the partition
|
||||
parts=`echo $parts | sed -e 's/ //g' | sed -e 's/,/ /g'`
|
||||
endpoint=0
|
||||
for part in $parts
|
||||
do
|
||||
if echo $part | grep '-'; then
|
||||
# should be format 10G-20G
|
||||
start=`echo $part |awk -F- '{print $1}'`
|
||||
end=`echo $part |awk -F- '{print $2}'`
|
||||
echo "Create partition $start - $end"
|
||||
`parted -s $dev mkpart primary $start $end > /dev/null`
|
||||
sleep 1
|
||||
else
|
||||
# should be a number which is the percentage of the total
|
||||
# compute the space depend on the size of disk
|
||||
ldsize=`echo $localdisksize | sed "s/\([0-9\.]*\).*/\1/"`
|
||||
ldunit=`echo $localdisksize | sed "s/[0-9\.]*//" | sed "s/\(.\).*/\1/"`
|
||||
partsize=`echo "$ldsize * $part" | bc`
|
||||
partsize=`echo "$partsize / 100" | bc`
|
||||
start=$endpoint$ldunit
|
||||
endpoint=`expr $endpoint + $partsize`
|
||||
end=$endpoint$ldunit
|
||||
echo "Create partition $start - $end: $fstype"
|
||||
`parted -s $dev mkpart primary $start $end > /dev/null`
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
# create the filesystem
|
||||
if [ x$fstype = x ]; then
|
||||
fstype=ext3
|
||||
fi
|
||||
partnum=`expr $partnum + 1`
|
||||
partdev=$dev$partnum
|
||||
echo "Create filesystem $fstype on $partdev"
|
||||
`mke2fs -q $partdev -t $fstype > /dev/null`
|
||||
sleep 1
|
||||
done
|
||||
elif [ $localspace -eq 1 ]; then
|
||||
if [ x$fstype = x ]; then
|
||||
fstype=ext3
|
||||
fi
|
||||
echo "Mount $dev to /.sllocal with $fstype"
|
||||
`mount -t $fstype $dev $MNTDIR/.sllocal`
|
||||
elif [ $swapspace -eq 1 ]; then
|
||||
echo "Create swap on $dev"
|
||||
`mkswap $dev > /dev/null`
|
||||
echo "Enable swap on $dev"
|
||||
`swapon $dev`
|
||||
fi
|
||||
}
|
||||
|
||||
xCATCmd $XCATSERVER getpartition \
|
||||
| sed -e 's/<[^>]*>//g' \
|
||||
| egrep -v '^ *$' \
|
||||
| egrep -v '^#.*$' \
|
||||
| sed -e 's/^ *//' \
|
||||
> $PARTFILE
|
||||
|
||||
MAX_RETRIES=15
|
||||
RETRY=0
|
||||
while [ ! -s $PARTFILE ]; do
|
||||
# the file is empty, we should retry several times
|
||||
RETRY=$(( $RETRY+1 ))
|
||||
if [ $RETRY -eq $MAX_RETRIES ]; then
|
||||
echo "Error: Cannot get the partition configuration file from xCAT server."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SLI=$(( $RANDOM%50 ))
|
||||
sleep $SLI
|
||||
|
||||
xCATCmd $XCATSERVER getpartition \
|
||||
| sed -e 's/<[^>]*>//g' \
|
||||
| egrep -v '^ *$' \
|
||||
| sed -e 's/^ *//' \
|
||||
> $PARTFILE
|
||||
done
|
||||
|
||||
# Parse the argument from the partition file
|
||||
while read LINE
|
||||
do
|
||||
if [ x$firstline = x ]; then
|
||||
firstline=$LINE
|
||||
# the format of first line should be: type=script|format
|
||||
key=`echo \$firstline |awk -F= '{print \$1}'`
|
||||
if [ x$key != x"type" ]; then
|
||||
echo "Error: Cannot recognize the format of the parition configuration file."
|
||||
exit 1
|
||||
fi
|
||||
value=`echo \$firstline |awk -F= '{print \$2}'`
|
||||
if [ x$value = x"script" ]; then
|
||||
isscript=1
|
||||
elif [ x$value = x"format" ]; then
|
||||
isformat=1
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
if [ $isscript -eq 1 ]; then
|
||||
echo $LINE | sed -e 's/</</g' -e 's/>/>/g' -e 's/&/&/g' -e 's/"/"/g' -e "s/'/'/g" >> $SCRIPTFILE
|
||||
elif [ $isformat -eq 1 ]; then
|
||||
# parse the attributes for the partition configuration
|
||||
if [ x$LINE = x"[disk]" ]; then
|
||||
doconfigure
|
||||
disk=1
|
||||
partnum=0
|
||||
localspace=0
|
||||
swapspace=0
|
||||
fstype=""
|
||||
dev=""
|
||||
clear=""
|
||||
parts=""
|
||||
elif [ x$LINE = x"[localspace]" ]; then
|
||||
doconfigure
|
||||
disk=0
|
||||
localspace=1
|
||||
swapspace=0
|
||||
dev=""
|
||||
fstype=""
|
||||
elif [ x$LINE = x"[swapspace]" ]; then
|
||||
doconfigure
|
||||
disk=0
|
||||
localspace=0
|
||||
swapspace=1
|
||||
dev=""
|
||||
else
|
||||
key=`echo \$LINE |awk -F= '{print \$1}'`
|
||||
value=`echo \$LINE |awk -F= '{print \$2}'`
|
||||
if [ x$key = x"dev" ]; then
|
||||
dev=$value
|
||||
elif [ x$key = x"clear" ]; then
|
||||
clear=$value
|
||||
elif [ x$key = x"parts" ]; then
|
||||
parts=$value
|
||||
elif [ x$key = x"fstype" ]; then
|
||||
fstype=$value
|
||||
elif [ x$key = x"enable" ]; then
|
||||
enable=$value
|
||||
if [ x$enable != x"yes" ]; then
|
||||
exit 1
|
||||
fi
|
||||
elif [ x$key = x"enablepart" ]; then
|
||||
enablepart=$value
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < $PARTFILE
|
||||
doconfigure
|
||||
|
Loading…
Reference in New Issue
Block a user