HP-UX Tips
Jump to navigation
Jump to search
A volte può essere complicato modificare la grandezza di un filesystem, utilizzando le funzioni Online JFS. Questo semplice script può semplificare la gestione.
resize.sh
#!/usr/bin/ksh
# resize.sh
# comando per modificare la grandezza di un filesystem
# by Emilio Gargiulo, 26/08/2001
# Aggiunto check iniziale 20/01/2004
#set -x
get_fssizek()
{
bdf $1 | awk '/\/dev\// { print $2 } ' | read FSSIZEK
if [ "$FSSIZEK" = "" ]
then
bdf $1 | awk '/'$(echo $1 | sed -e 's/\//\\\//g' )'/ { print $1 } ' | read FSSIZEK
fi
echo $FSSIZEK
}
###########################################################################
### MAIN ### MAIN ### MAIN ### MAIN ### MAIN ### MAIN ### MAIN ### MAIN ###
###########################################################################
MOUNT=$1
NEWSIZE=$2
if [ "$MOUNT" = "" ]
then
echo "$0: Uso del comando: $0 mount_point <new_size (in Mb)> "
return 255
else
bdf $MOUNT | awk '/\/dev\// { print $1 } ' | read DEV
get_fssizek $MOUNT | read FSSIZEK
FSSIZE=$(( $FSSIZEK / 1024 ))
VG=$( lvdisplay $DEV | awk '/VG Name/ { print $3 } ' )
PESIZE=$( vgdisplay $VG | awk '/PE Size/ { print $4 } ' )
LVSIZE=$( lvdisplay $DEV | awk '/LV Size/ { print $4 } ' )
LVSIZEPE=$( lvdisplay $DEV | awk '/Current LE/ { print $3 } ' )
LVSIZEK=$(( $LVSIZE * 1024 ))
echo ''
echo dev=$DEV vg=$VG pesize=$PESIZE
echo fssize\(Kb\)=$FSSIZEK fssize\(Mb\)=$FSSIZE
echo lvsize\(Kb\)=$LVSIZEK lvsize\(Mb\)=$LVSIZE
echo lvsize\(PE\)=$LVSIZEPE
if [ "$NEWSIZE" = "" ]
then
echo ''
df -g $MOUNT
else
NEWSIZEPE=$(( $NEWSIZE / $PESIZE ))
# per eseguire un troncamento dei decimali
NEWSIZEK=$(( $NEWSIZEPE * $PESIZE * 1024 ))
echo ''
echo newsizepe=$NEWSIZEPE newsize=$(( $NEWSIZEPE * $PESIZE ))
if [ $LVSIZEPE -le $NEWSIZEPE ]
then
lvextend -l $NEWSIZEPE $DEV
RC=$?
if [ $RC -ne 0 ]
then
echo "$0: Errore in lvextend $DEV"
exit $RC
fi
LVSIZEPE=$( lvdisplay $DEV | awk '/Current LE/ { print $3 } ' )
if [ $LVSIZEPE -eq $NEWSIZEPE ]
then
fsadm -F vxfs -b $NEWSIZEK $MOUNT
RC=$?
if [ $RC -ne 0 ]
then
echo "$0: Errore in fsadm $DEV"
exit $RC
fi
else
echo "$0: Errore LVSIZEPE != NEWSIZEPE"
exit 254
fi
else
fsadm -F vxfs -b $NEWSIZEK $MOUNT
RC=$?
if [ $RC -ne 0 ]
then
echo "$0: Errore in fsadm $MOUNT"
exit $RC
fi
get_fssizek $MOUNT | read ACTSIZEK
if [ $NEWSIZEK -eq $ACTSIZEK ]
then
lvreduce -f -l $NEWSIZEPE $DEV
RC=$?
if [ $RC -ne 0 ]
then
echo "$0: Errore in lvreduce $DEV"
exit $RC
fi
else
echo "$0: Errore NEWSIZEK != ACTSIZEK"
exit 253
fi
fi
fi
fi