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