AIX JFS2 autoresize

computersarefun put in a request for AIX to auto-grow/shrink filesystems.
Ref: https://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=114789

This seems more like a monitoring thing than an operating system thing.
Also, handling this as a thin LUN is probably better where possible.
Here is an example script.

Potential improvements:

  • Notifications on exceptions
  • Config file to track different settings per filesystem
  • Also check iused / ifree to handle tiny-files
  • Run as a daemon vs from cron.
  • Explicit lists of filesystems, or include/exclude lists
  1. !/bin/ksh
  2. Run this from cron every minute to automatically resize JFS2 filesystems
  3. Incorrect limits could cause size flapping for small filesystems.
  4. We skip things we cannot reduce.

MINFREEPCT=10
MAXFREEPCT=70
MINPPFREE=10

LVLIST=`mount | grep jfs2 | grep /dev/ | awk ‘{print $1;}’ | cut -f 3 -d /`
for lv in $LVLIST ; do

  df -gv 2>/dev/null | grep $lv | read device size used free pct iused ifree ipct mountpoint || continue
  FREEPCT=$(( $used * 100 / $size ))
  VG=`lslv $lv 2>/dev/null | grep "VOLUME GROUP:" | awk '{print $6;}'`
  PPSIZE=`lsvg $VG 2>/dev/null | grep 'PP SIZE' | awk '{print $6;}'`
  [[ $PPSIZE -gt 0 ]] || continue
  #
  if [[ $FREEPCT -lt $MINFREEPCT ]] ; then
     FREEPPS=`lsvg $VG | grep FREE | awk '{print $6;}'`
     [[ $FREEPPS -gt $MINFREEPPS ]] && chfs -a size=+1 $mountpoint
     continue
  fi
  #
  [[ $FREEPCT -gt $MAXFREEPCT ]] && chfs -a size=-$PPSIZE $mountpoint
  #

done