Scroll to navigation

FS-CHECK(8) User Contributed Perl Documentation FS-CHECK(8)

NAME

fs-check - size report daemon/program

SYNOPSIS

fs-check [options...] [directory]

Checks the disk usage locally for filling or full filesystems.

DESCRIPTION

fs-check checks the disk usage locally as reported by the command for filling or full filesystems. It determines what filesystems to check what threshold to use for an alert, and what to do based on a user-customizable configuration file.

The program records it's process id in the file If it receives a -HUP signal the configuration file is reread.

OPTIONS

Give rudimentary help and exit
show a CVS version string and exit
give debugging output. The higher the number, the more the output. Default is no debug information (0).
In order to get filesystem size information the program "df" is run and it output has to be in a format that this program recognizes. When this package was configured we look for a suitably compatible df program. However you can override this default or specify the df program explicitly with this option.

The default is

   /bin/df -t jfs -t ext2 -t ext3 -t ntfs -t reiserfs -t vfat --local
    
When a threshold has been exceeded a report is usually mailed out. The Perl module Mail::Send can be used. However another possibility is an external program. The default program here is Mail.
Normally the program runs a disk check and then sleeps a bit. However if the -1 or --once option is used, the program is run once.
When fs-check start as a daemon it write its process id in a file.

Normally you shouldn't have to set this or worry about it. The default is /var/run/fs-check.pid

When this program is run as a daemon (e.g. the --once option is not in effect) the period to wait in seconds between is set by this parameter.
When a one of the thresholds for a filesystem is exceeded, a program or script is executed. The maximum time used in executing that program can be set by "--timeout".

CONFIGURATION FILE FORMAT

A configuration file for fs-check specifies:

1.
what filesystems are checked/excluded. Included filesystems are specified with OWNER and excluded filesystems are specified with EXCLUDE or EXCLUDE_PAT with optionally a DEFAULT prefix.
2.
at what point to start to complain. A threshold is specified with LIMIT for filesystem space or ILIMIT for inode space with optionally a DEFAULT prefix.
3.
who to send mail when there is trouble. A mail contact is specified with OWNER with possibly a DEFAULT prefix.
4.
what program to run when there is trouble. A program to run is specified with ACTION with optionally a DEFAULT prefix.
5.
the shortest interval between which we send notifications. This is specified via MIN_INTERVAL with optionally a DEFAULT prefix.

Lines with # in column 1 or blank lines are ignored. Actually, any line that doesn't match a valid line is ignored.

So what isn't ignored? Lines that begin in column 1 with EXCLUDE, EXCLUDE_PAT, OWNER, LIMIT, ACTION, or DEFAULT. Below we give the format of each of these directives.

Case is not significant

amount full is either the percentage of the disk full or the number of bytes that need to be available. The way we distinguish the first case from the second is to add a K, KB, M, MB, G, or GB at the end. An optional % can be used to specify percent for more clarity, although if just a number is used it is taken as a percentage.

For example "default 90" and "DEFAULT 90%" are the same thing and mean that mail should be sent out on any disk that is 90% or more full unless otherwise specified by a more specific LIMIT, ILIMIT or OWNER (with amount) line.

In contrast, 4096KB, 4096k, or 4MB means that 4 megabytes must be available on the disk. You may want to use this form for say the root partition.

If there are many lines which refer to the same disk, or change the default (which can be done in a couple ways), the last one sticks.

SAMPLE CONFIGURATION FILE

  # This is who gets mail when something's wrong and no further specification
  default owner  rocky 95%

  # This is the program to run when no other program is specified...
  default action /usr/local/bin/fs-report

  # Limit at which to complain about i-nodes...
  default ilimit 99%

  # Don't sent out notifications if they occur less than 30 minutes
  # (1800 seconds) from the last notification
  default min_interval 1800

  # The limits for the directory which holds /tmp should not be
  # too close to the maximum limit. The file system checker stores its
  # temporary data there. So if this is too full, we won't get a useful
  # report back.
  #limit   /      70%
  #limit   /var   90%
  #limit   /usr 95%
  #limit   /src   90%
  limit    /home        90%
  action  /var /usr/local/bin/fs-report --nocore

  # Don't check any filesystem starting /cdrom...
  exclude_pat ^/mnt/cdrom
  exclude_pat ^/cdrom

  # Filesystems not listed, e.g /home, would be checked as they come
  # under the default. If you want a disk exclude them, create/uncomment
  # an exclude line such as the one below.
  exclude /mnt/floppy
  exclude /mnt/msfloppy
  exclude /mnt/cdrom
  exclude /mnt/cdrom2
  exclude /mnt/dvd

SECURITY CONSIDERATIONS

Any daemon such as this one which is sufficiently flexible is a security risk. The configuration file allows arbitrary commands to be run. In particular if this daemon is run as root and the configuration file is not protected so that it can't be modified, a bad person could have their programs run as root.

There's nothing inherent in fs-check, that requires one to run this daemon as root.

So as with all daemons, one needs to take usual security precautions that a careful sysadmin/maintainer of a computer would. If you can run any daemon as an unprivileged user (or with no privileges), do it! If not, set the permissions on the configuration file and the directory it lives in. Commands that need to be run as root you can run via sudo. On Solaris, I often run process accounting which tracks all commands run. Tripwire may be useful to track changed configuration files.

TROUBLESHOOTING

To debug a configuration file the following options are useful:

   fs-check --norun -1 --debug 2 *configuration-file*

For even more information and control try running the above under the Perl debugger, e.g.

  perl -d fs-check --norun -1 --debug *configuration-file*

SEE ALSO

My log rotation program <http://recycle-logs.sourceforge.net> and file removal/archival program <http://rm-old-files.sourceforge.net> might assist in maintenance the filesystem so it doesn't fill up.

BUGS

Has a number of Unixisms and non-generalities:

* assumes Unix file separator path "/"
* assumes spaces delimit filenames (no embedded blanks)
* GNU find -ls output format (the number of fields which may have changed over the years).
* Stores temporary files in /tmp and assumes there's space for whatever we need to do in that
* That our mount-pount to filename conversion (/ => -- will not get confused with a valid mount point. For example one could have a mount point called /usr--local which we'll confuse with /usr/local.

Please volunteer to fix any of these.

AUTHOR

The current version is maintained (or not) by "rocky@cpan.org".

COPYRIGHT

  Copyright (C) 2004, 2005, 2005, 2006 Rocky Bernstein, email: rocky@cpan.org.
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with GNU Make; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.

$Id: fs-check.in.in,v 1.27 2006/02/27 08:22:56 rockyb Exp $

2007-03-30 perl v5.8.8