Share your knowledge at the LQ Wiki.
Go Back > Linux Answers > Hardware
User Name


By djgerbavore at 2004-08-17 08:28
If you're maintaining a lot of server's with multiple hard-drives you'll need to know how to manage and watch your harddrives. You know it's getting full or needs cleaning before it's too late and your users can't complete their work because they're out of disk-space. Nothing is worse than franticly trying to reclaim disk-space because you ran out of it. This guide will hopefully aide you in a time-savinf manner.

First of all: check the usage of your hard-drive(s)!

$>df -h
Filesystem                Size      Used     Avail Use% Mounted on
/dev/hda3                 4.4G      3.4G      764M  82% /
/dev/hda1                  14G      4.5G      9.3G  33% /mnt/win32
As you can see my hda3 is at 82%. With the help of scripts you can have this task done at given times, and get an e-mail notification if the percentage of used disk-space reaches a certain threshold.

First we will make a basic bash script that will report if any paritions are over 80%.

df | egrep "(100%|[89][0-9]%)"
The egrep statement will match any usage between 80% and 100%.

Now let's do this as a timed event:
Type crontab -e to start an empty file where you can add all your cron jobs. (for more info type man 5 crontab)

Now to make a basic cron job that will run everyday at 10p.m..

0 22 * * * df | egrep "(100%|[89][0-9]%)"
The first number, 0, indicates the minute, the second, 22, is the hour that your job is supposed to run at. The next three *'s are day of month, the month, and day of week respectively.

Finally to have this cron job email you if any of your partition's are filled 80% or more you just add the mail command, like so:

0 22 * * * df | egrep "(100%|[89][0-9]%)" | mail -s "Warning..."
The -s is for subject and will be replaced by your email address.

Let me know what you think about this guide. If you like it, or if it wasn't useful. Any feedback is greatly encouraged. Thanks

by Tinkster on Fri, 2004-08-20 20:30
Hope you don't mind my editing too much
I corrected a few flaws in your cron explanation
and changed grep to egrep and made it match
100 as well.


by ddstyles on Sun, 2004-08-29 15:03
just a note on the first part of the cron entry:
the * means: run every possible time for this field.

i.e. 5 22 * * * means minute 5, hour 22, and then every day of the month, every month, and every day of the week.
If you added 5 22 15 * * the cron would only run on the 15th day of the month.


by Tinkster on Sun, 2004-08-29 20:24
But then his tutorial isn't on cron, it's on automated
disk-space monitoring...


by circlecreek on Mon, 2004-08-30 03:15
I've been to a demo of a very impressive Monitoring solution by MetaMind in Basel. It's very efficient since even when everything fails, agents (they call metamon) continue to trace why this happened and will fill logs as soon as back online...

Worth a check at:

by Tinkster on Mon, 2004-08-30 03:30
Wonder where that logs to when both hdd's and a
network-connections are gone

Btw, the homepage is atrocious.

by JZL240I-U on Thu, 2004-09-02 06:54
Nice as a whole. Being me and thus being lazy, I'd want to know in the mail which drive was how full without having to run the job again on my screen.

My first idea was to "tee" the second pipe and by that means insert the egrep-results into the mail. Could this be done by variables as well and how would they get their values assigned and introduced into the mail?

by Tinkster on Thu, 2004-09-02 21:28
Nichts leichter als das :}
[Nothing more easy than that :}]

0 22 * * * full=`df | egrep "(100%|[89][09]%)"` && mail -s "Warning, $full is filling up."


by JZL240I-U on Fri, 2004-09-03 02:06
Guten Morgen
[good morning ... ahm, should rather be good night in NZ]

Whoa, we are on the economic trip here .
Thank you for the solution.

Wirsing? Grütze an die Kiwis!

by Tinkster on Fri, 2004-09-03 02:17
I take it you liked my solution?

One is glad to be of service ...


Und Danke fuer die Gruetze ;}

by Kristijan on Tue, 2005-04-12 01:22
I sort have made my own rendition of this script. I only have it monitoring one volume though.

USAGE=`df | grep $FS | awk '{ print $4 }' | sed "s/%//"`

if [ $USAGE -gt $PERCENT ]
                echo $FS Filesystem on $HOSTNAME has reached "$PERCENT"% capacity | mail -s $HOSTNAME
Seems to do the job



All times are GMT -5. The time now is 06:53 AM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration