Monitoring disk usage is a critical part of running any
server. There is nothing worse than having a runaway process or malicious user
fill up a filesystem only to find out about it when the boss calls to indicate
she can’t connect to or write to the server. With a little bit of shell
scripting and cron usage, you can have a script run every hour or at any other
interval that will indicate if you need to be concerned about disk space
filling up.

The script itself is very small:

<code>
#!/bin/sh
fs=`mount|egrep '^/dev'|grep -iv cdrom| awk '{print $3}'`
typeset -i thresh="90"
typeset -i warn="95"
for i in $fs
do
    skip=0
    typeset -i used=`df -k $i|tail -1|awk '{print $5}'|cut -d "%" -f 1`
    if [ "$used" -ge "$warn" ]; then
        echo "CRITICAL: filesystem $i is $used% full"
    fi
    if [ "$used" -ge "$thresh" -a "$used" -le "$warn" ]; then
        echo "WARNING: filesystem $i is $used %full"
    fi
done
</code>

The first thing the script does is get the list of mount
points from the mount program and filters out any mounted CD-rom drives. It
also doesn’t take into account any special file systems like /proc or /sys by making sure the mount point device is an actual device (by
making sure the device name starts with /dev).

Next, set your threshold to something sensible, like 90% full.
Adjust this to taste; this just generates a warning. Likewise, you set your critical
warning value to 95%. Notice that the command typeset -i is used to ensure that bash treats these numbers as
integers, which you need for comparing the values obtained from df.

The $used variable gets set on each filesystem with the Use% column output from the df tool. This is compared to your
thresholds.

The script simply outputs the warnings to standard output. The
script can easily be adjusted to have it send an e-mail to someone should one of
the thresholds be breached. To have this executed every 30 minutes via cron,
edit the system crontab to include:

<code>
0,30 * * * * * /usr/local/bin/diskmon.sh
</code>

In this case, all the warnings will be sent via cron to whoever
receives cron’s output mails.

Delivered each Tuesday, TechRepublic’s free Linux NetNote provides tips, articles, and other resources to help you hone your Linux skills. Automatically sign up today!