UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

ディスク容量監視シェルサンプル


ディスク容量監視シェルサンプル


0.改定履歴

  • 1998.07.25 初版
  • 2000.06.08 第4章追加
  • 2000.08.19 第5章追加

1.はじめに

 このドキュメントは,Solaris2.xで,ハードディスクの空き容量を監視するシェルのサンプルを提示する.

2.ハードディスク空き容量監視のサンプル

 ディスクの空き容量を把握するには,dfコマンドを使用して,そのリストを活用する.

ディスクの空き容量監視
#!/bin/sh
UsedSpace=`/usr/bin/df -k /raid5 | grep raid5 | \
        /usr/bin/awk '$6=="/raid5"{print$5}'`
case $UsedSpace in
        85%)   echo RAID5 Capacity is over 85% at `hostname`;;
        100%)  echo RAID5 Capacity is over 100% at `hostname`;;
esac

  • df -k /raid5の結果の,5列目のパラメータを取得し,環境変数UsedSpaceにいれる.
  • case文を使って,その$UsedSpaceをチェックしている.

dfコマンドの出力結果サンプル
root@duo: df -k
ファイルシステム     Kバイト  使用済  使用可 使用率    マウント場所
/dev/dsk/c0t0d0s0     288855   43952  216023    17%    /
/dev/dsk/c0t0d0s6     384871  165645  180746    48%    /usr
/proc                      0       0       0     0%    /proc
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0t0d0s4     173015   13766  141949     9%    /var
/dev/dsk/c0t0d0s7     288855   43952  216023    17%    /export/home
/dev/dsk/c0t0d0s5     336863  152585  150598    51%    /opt
/dev/dsk/c0t0d0s3     316279  239221   45438    85%    /usr/openwin
/dev/md/dsk/d0       7789757 5323000 1687787    76%    /raid5
swap                  617656       8  617648     1%    /tmp

root@duo:

 サンプルのように,df -kでリストすると,5列目は使用率を指している.

3.注意

 このシェルだと,一気に86%になった場合の感知が出来ないので,case文ですべてのパターンを書かなければならないのが難点である. 改善案があれば教えて欲しい.

4.改善案

 書いて載せてみるもんで,なんと改善案がきました.

 作者のBig Islandさん(仮名)さんに許可を頂きましたので,掲載させていただきます.

改善案
こういう風にするのはいかがでしょうか?
df コマンドの出力結果の "%" を Awk を使って削除した値と、比較したい値を比べています。
#!/bin/sh
Awk="/usr/bin/awk"
Df="/usr/bin/df"
Grep="/usr/bin/grep"
LOGPUT="/usr/bin/logger -p user.err -i -t Check_DF"
MAXDIRSPACE="60"
Check_DF () {
	AWKCMD1="${Awk} -F\" \" '\$6 == \"$1\" { print \$5 }'"
	AWKCMD2="${Awk} -F\"%\" '{ print \$1 }'"
	USEDSPACE=`${Df} -k | eval $AWKCMD1 | eval $AWKCMD2`
	if [ "${MAXDIRSPACE}" -lt "${USEDSPACE}" ]
	then
		echo "${1} Capacity is over ${MAXDIRSPACE}% at `hostname` now ${USEDSPACE}%"
		${LOGPUT} "WARNING : ${1} Capacity is over ${MAXDIRSPACE}% at `hostname` now ${USEDSPACE}%"
	fi
}
AWKCMD="${Awk} -F\" \" '\$6 == \"$1\" { print \$6 }'"
DISKS=`${Df} -k | ${Awk} -F" " '{ print $6 }' | ${Grep} /`
for DISK in ${DISKS}
do
	Check_DF "${DISK}"
done
exit 0

5.改善案2

 rocketさんから追加の改善案の提示がありました.
 許可を頂いたので,掲載します.

rocketさんからの改善案
 DISK容量の監視スクリプトがありましたが、改善案として更新されてますが、あれは初心者には理解しづらいのでは?と感じました。
私が初めてメールサーバー管理を任されたときに書いたshellが以下の様なものでした。
全スライスが監視対象でMAX値を超えたスライスの数だけメールが飛んで来てしまいますけど :-)
#!/bin/sh
ADMIN="name@domain.co.jp"
MAXSIZE="85"
for DISKSIZE in `df -k |grep / |awk '{print $5}' |sed 's/%//'`
do
    if [ "$DISKSIZE" -ge "$MAXSIZE" ] ; then
        df -k |mailx -s "Warning Disk Report" $ADMIN
    fi
done

" grep / " の個所は、

egrep 'c0t3d0s1|c0t3d0s5' などにして監視するディスクスライスで絞り込む方が良いかも知れませんね。



広告スペース
Google