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