Zfsize
From pressy's brainbackup
root@server:~# ./zfsize.sh -h small script to find the biggest files on ZFS Usage: ./zfsize.sh -z <ZFS> [-o tempdir] [-c count] root@server:~# ./zfsize.sh -z rpool/downloads -c 2 ZFS = rpool/downloads Mountpoint = /downloads TempDir = /tmp This may take a while ... /downloads/sol-10-u11-ga-sparc-dvd.iso 2207.50 MB /downloads/sol-11_1-repo-full.iso 2896.00 MB root@server:~# #!/usr/bin/bash #set -x ################################################### # # zfsize v0.1 # # ZFS file sizes # # small script to find the biggest files on ZFS # # 16.09.2016, written by Martin Presslaber # ################################################### help () { print "small script to find the biggest files on ZFS" print "Usage:" print "\t\t$0 -z <ZFS> [-o tempdir] [-c count]" } ########## preTESTS ############# OS=`uname -s` RELEASE=`uname -r` VERS=`uname -v` ZONE=`zonename` if [[ $OS != SunOS ]] then print "This script will only work on Solaris" exit 1 fi [[ $ZONE == global ]] || print "This script will only work in the global zone" [[ $VERS == 1[1-9].[1-9] ]] && SOLARIS=new if [ ${RELEASE#*.} -gt 10 ] ; then ID=$(/usr/bin/whoami) else ID=$(/usr/ucb/whoami) fi if [ $ID != "root" ]; then echo "$ID, you must be root to run this program." exit 1 fi if [ $# -lt 1 ] then help && exit 1 fi #[[ $1 != "-[az]" ]] && help && exit 1 ########## Options ########### TEMPDIR="/tmp" while getopts "z:o:c:h" args do case $args in z) ZFS=$OPTARG ZFSlist=`zfs list $ZFS 2>/dev/null | nawk -v ZFS=$ZFS '$1~ZFS {print $0}'` [[ $ZFSlist == "" ]] && print "$ZFS does not seem to be a ZFS" && exit 1 ZFSmountpoint=`zfs list $ZFS 2>/dev/null | nawk -v ZFS=$ZFS '$1~ZFS {print $NF}'` ;; o) TEMPDIR=$OPTARG [[ -d $TEMPDIR ]] || print "$TEMPDIR does not exist!" && exit 1 ;; c) COUNT="-$OPTARG" ;; h|*) help && exit 1 ;; esac done shift $(($OPTIND -1)) ######### Let's go ######### print "ZFS = $ZFS" print "Mountpoint = $ZFSmountpoint" print "TempDir = $TEMPDIR" print "This may take a while ... " zdb -dddd $ZFS |\ nawk -v MP=$ZFSmountpoint 'BEGIN { printf("FILE\tSIZE\n"); } $0 ~/ZFS plain file$/ { interested = 1; } interested && $1 == "path" { printf(MP"%s", $2); } interested && $1 == "size" { printf("\t%.2f MB\n", $2/1024/1024); } interested && $1 == "Object" { interested = 0; }' > $TEMPDIR/zfsize.tmp sort -nk 2,2 $TEMPDIR/zfsize.tmp > $TEMPDIR/zfsize-sorted.tmp tail $COUNT $TEMPDIR/zfsize-sorted.tmp # clean up rm $TEMPDIR/zfsize.tmp rm $TEMPDIR/zfsize-sorted.tmp ##################### EOF #####################