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

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

Other diffs: Previous Major Revision, Previous Author

Newer page: version 4 Last edited on Saturday, 13 June 2009 12:38:30 by CyberLeo Revert
Older page: version 3 Last edited on Wednesday, 10 December 2008 10:28:41 by CyberLeo Revert
@@ -3,9 +3,9 @@
  
 pretty(){ 
  # Digest a single number into a pretty number 
  num=$1 
- zero=000 
+ zero=0 
  
  tera=$(( $num / 1099511627776 )) 
  num=$(( $num % 1099511627776 )) 
  giga=$(( $num / 1073741824 )) 
@@ -15,17 +15,23 @@
  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 
+ 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 
+ if [ "${two }" = "${zero}" ]  
+ then  
+ num="${one}"  
+ else  
+ num= "$(eval echo \$$one.\$$two)"  
+ fi  
+ printf "${fmt}" ${num} $sign 
 
  
 digest(){ 
  dev="${1}" 

version 4

#!/bin/bash

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

  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"
  if [ "${two}" = "${zero}" ]
  then
    num="${one}"
  else
    num="$(eval echo \$$one.\$$two)"
  fi
  printf "${fmt}" ${num} $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