The script below can be used to check the Disk Group Space Free and also Check Directory sizes for each Disk Group
The script is written by somebody at Pythian but i cannot re-collect the original link to the blog.
eg:
./asmcmd_du.sh
DiskGroup Total_MB Free_MB % Free
——— ——– ——- ——
DATAC1 15962112 11215880 70
DBFS_DG 415296 403740 97
RECOC1 3996000 3460272 86
./asmcmd_du.sh DATAC1
DiskGroup Total_MB Free_MB % Free
——— ——– ——- ——
DATAC1 15962112 10155732 63
DATAC1 subdirectories size
Subdir Used MB Mirror MB
—— ——- ———
CARATST/ 55646 111356
ECCTST/ 174912 349856
—— ——- ———
Total 2799978 5600788
Script Below :
[code language="bash"] #!/bin/bash # Shadab Mohammad -- 2016 # # - If no parameter specified, show a du of each DiskGroup # - If a parameter, print a du of each subdirectory # D=$1 # # Colored thresholds (Red, Yellow, Green) # CRITICAL=90 WARNING=75 # # Set the ASM env # ORACLE_SID=`ps -ef | grep pmon | grep asm | awk '{print $NF}' | sed s'/asm_pmon_//' | egrep "^[+]"` export ORAENV_ASK=NO . oraenv > /dev/null 2>&1 # # A quick list of what is running on the server # ps -ef | grep pmon | grep -v grep | awk '{print $NF}' | sed s'/.*_pmon_//' | egrep "^([+]|[Aa-Zz])" | sort | awk -v H="`hostname -s`" '' | sed s'/, $//' # # Manage parameters # if [[ -z $D ]] then # No directory provided, will check all the DG DG=`asmcmd lsdg | grep -v State | awk '{print $NF}' | sed s'/\///'` SUBDIR="No" # Do not show the subdirectories details if no directory is specified else DG=`echo $D | sed s'/\/.*$//g'` fi # # A header # printf "\n%25s%16s%16s%14s" "DiskGroup" "Total_MB" "Free_MB" "% Free" printf "\n%25s%16s%16s%14s\n" "---------" "--------" "-------" "------" # # Show DG info # for X in ${DG} do asmcmd lsdg ${X} | tail -1 |\ awk -v DG="$X" -v W="$WARNING" -v C="$CRITICAL" '\ BEGIN \ {COLOR_BEGIN = "\033[1;" ; COLOR_END = "\033[m" ; RED = COLOR_BEGIN"31m" ; GREEN = COLOR_BEGIN"32m" ; YELLOW = COLOR_BEGIN"33m" ; COLOR = GREEN ; } { FREE = sprintf("%12d", $8/$7*100) ; if ((100-FREE) > W) {COLOR=YELLOW ;} if ((100-FREE) > C) {COLOR=RED ;} printf("%25s%16s%16s%s\n", DG, $7, $8, COLOR FREE COLOR_END) ; }' done printf "\n" # # Subdirs info # if [ -z ${SUBDIR} ] then (for DIR in `asmcmd ls ${D}` do echo ${DIR} `asmcmd du ${D}/${DIR} | tail -1` done) | awk -v D="$D" ' BEGIN { printf("\n\t\t%40s\n\n", D " subdirectories size") ; printf("%25s%16s%16s\n", "Subdir", "Used MB", "Mirror MB") ; printf("%25s%16s%16s\n", "------", "-------", "---------") ;} { printf("%25s%16s%16s\n", $1, $2, $3) ; use += $2 ; mir += $3 ; } END { printf("\n\n%25s%16s%16s\n", "------", "-------", "---------") ; printf("%25s%16s%16s\n\n", "Total", use, mir) ;} ' fi #************************************************************************# #* E N D O F S O U R C E *# #************************************************************************# [/code]
3 comments
Thanks for the code Shadab.
One thing you need to add here is to assign an initial value for SUBDIR value to satisfy IF CONDITION at the bottom of your code.
Regards,
Hamid
Hi Hamid. As i wrote in my blog this is not my code but from the pythian blog. I just reformatted it a bit.
Yes, I read so but just if someone read it through your post.
Thanks