ディスク容量監視シェルサンプル
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をチェックしている.
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さんから追加の改善案の提示がありました.
許可を頂いたので,掲載します.
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' などにして監視するディスクスライスで絞り込む方が良いかも知れませんね。 |