Note: You are viewing an old version of this page. View the current version.

Differences between version 3 and previous revision of KnowledgeBase/Scripts/diskstats.sh.

Other diffs: Previous Major Revision, Previous Author

Newer page: version 3 Last edited on Wednesday, 10 December 2008 10:28:41 by CyberLeo Revert
Older page: version 2 Last edited on Sunday, 16 November 2008 2:44:10 by CyberLeo Revert
@@ -1,27 +1,6 @@
 <verbatim> 
 #!/bin/bash 
-  
-sda_r=0  
-sda_w=0  
-sda_r_old=0  
-sda_w_old=0  
-sdb_r=0  
-sdb_w=0  
-sdb_r_old=0  
-sdb_w_old=0  
-sdc_r=0  
-sdc_w=0  
-sdc_r_old=0  
-sdc_w_old=0  
-sdd_r=0  
-sdd_w=0  
-sdd_r_old=0  
-sdd_w_old=0  
-md0_r=0  
-md0_w=0  
-md0_r_old=0  
-md0_w_old=0  
  
 pretty(){ 
  # Digest a single number into a pretty number 
  num=$1 
@@ -42,53 +21,37 @@
  [ $mega -gt 0 ] && one=mega && two=kilo && sign=MB 
  [ $giga -gt 0 ] && one=giga && two=mega && sign=GB 
  [ $tera -gt 0 ] && one=tera && two=giga && sign=TB 
  
- printf "%0.2f %s\n" $(eval echo \$$one.\$$two) $sign 
+ fmt= "%0.2f%s\n"  
+ [ "${sign}" = "B" ] && fmt="%0d%s\n"  
+ printf "${fmt} " $(eval echo \$$one.\$$two) $sign  
+}  
+  
+digest(){  
+ dev="${1}"  
+ if [ ! -d "/sys/block/${dev}" ]  
+ then  
+ return 1  
+ fi  
+ eval $(printf 'old_r=$old_r_%s old_w=$old_w_%s' "${dev}" "${dev}")  
+ [ -z "${old_r}" ] && old_r=0  
+ [ -z "${old_w}" ] && old_w=0  
+ eval $(awk '{print "cur_r=" $3 " cur_w=" $7}' /sys/block/${dev}/stat)  
+ dif_r=$(( (${cur_r} - ${old_r}) * 512 ))  
+ dif_w=$(( (${cur_w} - ${old_w}) * 512 ))  
+ eval $(printf "old_r_%s=%u old_w_%s=%u" "${dev}" "${cur_r}" "${dev}" "${cur_w}")  
+ printf "%s: R: %s W: %s \033[K\n" "${dev}" "$(pretty ${dif_r})" "$(pretty ${dif_w})"  
 
  
 while true 
 do 
- # Get new values  
- eval $(awk '{print "sda_r=" $3 " sda_w=" $7}' /sys/block/sda/stat)  
- eval $(awk '{print "sdb_r=" $3 " sdb_w=" $7}' /sys/block/sdb/stat)  
- eval $(awk '{print "sdc_r= " $3 " sdc_w=" $7}' /sys/block/sdc/stat)  
- eval $(awk '{print "sdd_r= " $3 " sdd_w=" $7}' /sys/block/sdd/stat)  
- eval $(awk ' {print "md0_r=" $3 " md0_w=" $7 }' /sys/block/md0/stat)  
-  
-  
- # Compute diffs  
- sda_r_diff=$(( ($sda_r - $sda_r_old) * 512))  
- sda_w_diff=$(( ($sda_w - $sda_w_old) * 512))  
- sdb_r_diff=$(( ($sdb_r - $sdb_r_old) * 512))  
- sdb_w_diff=$(( ($sdb_w - $sdb_w_old) * 512))  
- sdc_r_diff=$(( ($sdc_r - $sdc_r_old) * 512))  
- sdc_w_diff=$(( ($sdc_w - $sdc_w_old) * 512))  
- sdd_r_diff=$(( ($sdd_r - $sdd_r_old) * 512))  
- sdd_w_diff=$(( ($sdd_w - $sdd_w_old) * 512))  
- md0_r_diff=$(( ($md0_r - $md0_r_old) * 512))  
- md0_w_diff=$(( ($md0_w - $md0_w_old) * 512))  
-  
- # Print the display  
- printf "\033[0;0H"  
- printf "sda: %12s %12s \033[K\n" "$(pretty $sda_r_diff)" "$(pretty $sda_w_diff )"  
- printf "sdb: %12s %12s \033[K\n" "$(pretty $sdb_r_diff)" "$(pretty $sdb_w_diff)"  
- printf "sdc: %12s %12s \033[K\n " "$(pretty $sdc_r_diff)" "$(pretty $sdc_w_diff)"  
- printf "sdd: %12s %12s \033[K\n" "$(pretty $sdd_r_diff)" "$(pretty $sdd_w_diff)"  
- printf "md0: %12s %12s \033[K\n" "$(pretty $md0_r_diff)" "$(pretty $md0_w_diff)"  
-  
- # Save values  
- sda_r_old=$sda_r  
- sda_w_old=$sda_w  
- sdb_r_old=$sdb_r  
- sdb_w_old=$sdb_w  
- sdc_r_old=$sdc_r  
- sdc_w_old=$sdc_w  
- sdd_r_old=$sdd_r  
- sdd_w_old=$sdd_w  
- md0_r_old=$md0_r  
- md0_w_old=$md0_w  
-  
- # Sleep until the next cycle  
+ printf "\033[0;0H" # Cursor to upper left  
+ for I in /sys/block/sd?  
+ do  
+ digest "$(basename "${I }")"  
+ done  
+ printf "\033[0J " # Clear the rest of the page  
  sleep 1 
 done 
+  
 </verbatim> 

version 3

#!/bin/bash

pretty(){
  # Digest a single number into a pretty number
  num=$1
  zero=000

  tera=$(( $num / 1099511627776 ))
  num=$(( $num % 1099511627776 ))
  giga=$(( $num / 1073741824 ))
  num=$(( $num % 1073741824 ))
  mega=$(( $num / 1048576 ))
  num=$(( $num % 1048576 ))
  kilo=$(( $num / 1024 ))
  num=$(( $num % 1024 ))
  byte=${num:-0}

  one=byte && two=zero && sign=B
  [ $kilo -gt 0 ] && one=kilo && two=byte && sign=kB
  [ $mega -gt 0 ] && one=mega && two=kilo && sign=MB
  [ $giga -gt 0 ] && one=giga && two=mega && sign=GB
  [ $tera -gt 0 ] && one=tera && two=giga && sign=TB

  fmt="%0.2f%s\n"
  [ "${sign}" = "B" ] && fmt="%0d%s\n"
  printf "${fmt}" $(eval echo \$$one.\$$two) $sign
}

digest(){
  dev="${1}"
  if [ ! -d "/sys/block/${dev}" ]
  then
    return 1
  fi
  eval $(printf 'old_r=$old_r_%s old_w=$old_w_%s' "${dev}" "${dev}")
  [ -z "${old_r}" ] && old_r=0
  [ -z "${old_w}" ] && old_w=0
  eval $(awk '{print "cur_r=" $3 " cur_w=" $7}' /sys/block/${dev}/stat)
  dif_r=$(( (${cur_r} - ${old_r}) * 512 ))
  dif_w=$(( (${cur_w} - ${old_w}) * 512 ))
  eval $(printf "old_r_%s=%u old_w_%s=%u" "${dev}" "${cur_r}" "${dev}" "${cur_w}")
  printf "%s: R: %s W: %s \033[K\n" "${dev}" "$(pretty ${dif_r})" "$(pretty ${dif_w})"
}

while true
do
  printf "\033[0;0H" # Cursor to upper left
  for I in /sys/block/sd?
  do
    digest "$(basename "${I}")"
  done
  printf "\033[0J" # Clear the rest of the page
  sleep 1
done