.\" -*- nroff -*-
.\" Copyright 2006 by Theodore Ts'o.  All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\" 
.TH e2fsck.conf 5 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
e2fsck.conf \- Configuration file for e2fsck
.SH DESCRIPTION
.I e2fsck.conf
is the configuration file for 
.BR e2fsck (8).  
It controls the default behavior of 
.BR e2fsck (8)
while it is checking ext2, ext3, or ext4 filesystems.
.PP
The
.I e2fsck.conf
file uses an INI-style format.  Stanzas, or top-level sections, are 
delimited by square braces: [ ].  Within each section, each line 
defines a relation, which assigns tags to values, or to a subsection,
which contains further relations or subsections.   
.\" Tags can be assigned multiple values
An example of the INI-style format used by this configuration file 
follows below:
.P
	[section1]
.br
		tag1 = value_a
.br
		tag1 = value_b
.br
		tag2 = value_c
.P
	[section 2]
.br
		tag3 = {
.br
			subtag1 = subtag_value_a
.br
			subtag1 = subtag_value_b
.br
			subtag2 = subtag_value_c
.br
		}
.br
		tag1 = value_d
.br
		tag2 = value_e
.br
	}
.P
Comments are delimited by a semicolon (';') or a hash ('#') character 
at the beginning of the comment, and are terminated by the end of 
line character.
.P
Tags and values must be quoted using double quotes if they contain
spaces.  Within a quoted string, the standard backslash interpretations 
apply: "\en" (for the newline character), 
"\et" (for the tab character), "\eb" (for the backspace character), 
and "\e\e" (for the backslash character).
.P
The following stanzas are used in the 
.I e2fsck.conf
file.  They will be described in more detail in future sections of this
document.
.TP 
.I [options]
This stanza contains general configuration parameters for 
.BR e2fsck 's
behavior.
.TP
.I [problems]
This stanza allows the administrator to reconfigure how e2fsck handles
various filesystem inconsistencies.
.TP
.I [scratch_files]
This stanza controls when e2fsck will attempt to use scratch files to
reduce the need for memory.
.SH THE [options] STANZA
The following relations are defined in the 
.I [options]
stanza.
.TP
.I allow_cancellation
If this relation is set to a boolean value of true, then if the user 
interrupts e2fsck using ^C, and the filesystem is not explicitly flagged
as containing errors, e2fsck will exit with an exit status of 0 instead
of 32.  This setting defaults to false.
.TP
.I accept_time_fudge
Unfortunately, due to Windows' unfortunate design decision
to configure the hardware clock to tick localtime, instead
of the more proper and less error-prone UTC time, many
users end up in the situation where the system clock is
incorrectly set at the time when e2fsck is run.
.IP
Historically this was usually due to some distributions
having buggy init scripts and/or installers that didn't
correctly detect this case and take appropriate
countermeasures.  However, it's still possible, despite the
best efforts of init script and installer authors to not be
able to detect this misconfiguration, usually due to a
buggy or misconfigured virtualization manager or the
installer not having access to a network time server
during the installation process.  So by default, we allow
the superblock times to be fudged by up to 24 hours.
This can be disabled by setting
.I accept_time_fudge
to the
boolean value of false.  This setting defaults to true.
.TP
.I broken_system_clock
The
.BR e2fsck (8)
program has some heuristics that assume that the system clock is
correct.  In addition, many system programs make similar assumptions.
For example, the UUID library depends on time not going backwards in
order for it to be able to make its guarantees about issuing universally
unique ID's.  Systems with broken system clocks, are well, broken.
However, broken system clocks, particularly in embedded systems, do
exist.  E2fsck will attempt to use heuristics to determine if the time
can not be trusted; and to skip time-based checks if this is true.  If
this boolean is set to true, then e2fsck will always assume that the
system clock can not be trusted.
.TP
.I buggy_init_scripts
This boolean relation is an alias for
.I accept_time_fudge
for backwards compatibility; it used to
be that the behavior defined by
.I accept_time_fudge
above defaulted to false, and
.I buggy_init_scripts
would enable superblock time field to be wrong by up to 24 hours.  When
we changed the default, we also renamed this boolean relation to
.IR accept_time_fudge.
.TP
.I clear_test_fs_flag
This boolean relation controls whether or not 
.BR e2fsck (8)
will offer to clear
the test_fs flag if the ext4 filesystem is available on the system.  It
defaults to true.
.TP 
.I defer_check_on_battery
This boolean relation controls whether or not the interval between 
filesystem checks (either based on time or number of mounts) should 
be doubled if the system is running on battery.  This setting defaults to 
true.
.TP
.I indexed_dir_slack_percentage
When
.BR e2fsck (8)
repacks a indexed directory, reserve the specified percentage of
empty space in each leaf nodes so that a few new entries can
be added to the directory without splitting leaf nodes, so that
the average fill ratio of directories can be maintained at a
higher, more efficient level.  This relation defaults to 20
percent.
.TP
.I log_dir
If the
.I log_filename
relation contains a relative pathname, then the log file will be placed
in the directory named by the
.I log_dir
relation.
.TP
.I log_dir_fallback
This relation contains an alternate directory that will be used if the
directory specified by
.I log_dir
is not available or is not writeable.
.TP
.I log_dir_wait
If this boolean relation is true, them if the directories specified by
.I log_dir
or
.I log_dir_fallback
are not available or are not yet writeable, e2fsck will save the output
in a memory buffer, and a child process will periodically test to see if
the log directory has become available after the boot sequence has
mounted the requiste filesytem for reading/writing.  This implements the
functionality provided by
.BR logsave (8)
for e2fsck log files.
.TP
.I log_filename
This relation specifies the file name where a copy of e2fsck's output
will be written.   If certain problem reports are suppressed using the
.I max_count_problems
relation, (or on a per-problem basis using the
.I max_count
relation), the full set of problem reports will be written to the log
file.  The filename may contain various percent-expressions (%D, %T, %N,
etc.) which will be expanded so that the file name for the log file can
include things like date, time, device name, and other run-time
parameters.  See the
.B LOGGING
section for more details.
.TP
.I max_count_problems
This relation specifies the maximum number of problem reports of a
particular type will be printed to stdout before further problem reports
of that type are squelched.  This can be useful if the console is slow
(i.e., connected to a serial port) and so a large amount of output could
end up delaying the boot process for a long time (potentially hours).
.TP
.I report_features
If this boolean relation is true, e2fsck will print the file system
features as part of its verbose reporting (i.e., if the
.B -v
option is specified)
.TP
.I report_time
If this boolean relation is true, e2fsck will run as if the options
.B -tt
are always specified.  This will cause e2fsck to print timing statistics
on a pass by pass basis for full file system checks.
.TP
.I report_verbose
If this boolean relation is true, e2fsck will run as if the option
.B -v
is always specified.  This will cause e2fsck to print some additional
information at the end of each full file system check.
.SH THE [problems] STANZA
Each tag in the
.I [problems] 
stanza names a problem code specified with a leading "0x" followed by
six hex digits.   
The value of the tag is a subsection where the relations in that
subsection override the default treatment of that particular problem 
code.
.P
Note that inappropriate settings in this stanza may cause 
.B e2fsck
to behave incorrectly, or even crash.  Most system administrators should
not be making changes to this section without referring to source code.
.P
Within each problem code's subsection, the following tags may be used:
.TP
.I description
This relation allows the message which is printed when this filesystem
inconsistency is detected to be overridden.
.TP
.I preen_ok
This boolean relation overrides the default behavior controlling 
whether this filesystem problem should be automatically fixed when
.B e2fsck
is running in preen mode.
.TP
.I max_count
This integer relation overrides the 
.I max_count_problems
parameter (set in the options section) for this particular problem.
.TP
.I no_ok
This boolean relation overrides the default behavior determining
whether or not the filesystem will be marked as inconsistent if the user
declines to fix the reported problem.
.TP
.I no_default
This boolean relation overrides whether the default answer for this 
problem (or question) should be "no".
.TP 
.I preen_nomessage
This boolean relation overrides the default behavior controlling 
whether or not the description for this filesystem problem should
be suppressed when
.B e2fsck
is running in preen mode.
.TP
.I no_nomsg
This boolean relation overrides the default behavior controlling 
whether or not the description for this filesystem problem should
be suppressed when a problem forced not to be fixed, either because
.B e2fsck
is run with the
.B -n
option or because the
.I force_no
flag has been set for the problem.
.TP
.I force_no
This boolean option, if set to true, forces a problem to never be fixed.
That is, it will be as if the user problem responds 'no' to the question
of 'should this problem be fixed?'.  The
.I force_no
option even overrides the
.B -y
option given on the command-line (just for the specific problem, of course).
.SH THE [scratch_files] STANZA
The following relations are defined in the 
.I [scratch_files]
stanza.
.TP
.I directory
If the directory named by this relation exists and is writeable, then
e2fsck will attempt to use this directory to store scratch files instead
of using in-memory data structures.
.TP
.I numdirs_threshold
If this relation is set, then in-memory data structures be used if the
number of directories in the filesystem are fewer than amount specified.
.TP
.I dirinfo
This relation controls whether or not the scratch file directory is used
instead of an in-memory data structure for directory information.  It
defaults to true.
.TP
.I icount
This relation controls whether or not the scratch file directory is used
instead of an in-memory data structure when tracking inode counts.  It
defaults to true.
.SH LOGGING
E2fsck has the facility to save the information from an e2fsck run in a
directory so that a system administrator can review its output at their
leisure.  This allows information captured during the automatic e2fsck
preen run, as well as a manually started e2fsck run, to be saved for
posterity.  This facility is controlled by the
.IR log_filename ,
.IR log_dir ,
.IR log_dir_fallback ,
and
.I log_dir_wait
relations in the
.I [options]
stanza.
.PP
The filename in
.I log_filename
may contain the following percent-expressions that will be expanded as
follows.
.TP
.B %d
The current day of the month
.TP
.B %D
The current date; this is a equivalent of
.B %Y%m%d
.TP
.B %h
The hostname of the system.
.TP
.B %H
The current hour in 24-hour format (00..23)
.TP
.B %m
The current month as a two-digit number (01..12)
.TP
.B %M
The current minute (00..59)
.TP
.B %N
The name of the block device containing the file system, with any
directory pathname stripped off.
.TP
.B %p
The pid of the e2fsck process
.TP
.B %s
The current time expressed as the number of seconds since 1970-01-01
00:00:00 UTC
.TP
.B %S
The current second (00..59)
.TP
.B %T
The current time; this is equivalent of
.B %H%M%S
.TP
.B %u
The name of the user running e2fsck.
.TP
.B %U
This percent expression does not expand to anything, but it signals that
any following date or time expressions should be expressed in UTC time
instead of the local timzeone.
.TP
.B %y
The last two digits of the current year (00..99)
.TP
.B %Y
The current year (i.e., 2012).
.SH EXAMPLES
The following recipe will prevent e2fsck from aborting during the boot
process when a filesystem contains orphaned files.  (Of course, this is
not always a good idea, since critical files that are needed for the
security of the system could potentially end up in lost+found, and
starting the system without first having a system administrator check
things out may be dangerous.)
.P
.br
	[problems]
.br
		0x040002 = {
.br
			preen_ok = true
.br
			description = "@u @i %i.  "
.br
		}
.P
The following recipe will cause an e2fsck logfile to be written to the
directory /var/log/e2fsck, with a filename that contains the device
name, the hostname of the system, the date, and time: e.g.,
"e2fsck-sda3.server.INFO.20120314-112142".  If the directory containing
/var/log is located on the root file system
which is initially mounted read-only, then the output will be saved in
memory and written out once the root file system has been remounted
read/write.   To avoid too much detail from being written to the serial
console (which could potentially slow down the boot sequence), only print
no more than 16 instances of each type of file system corruption.
.P
.br
	[options]
.br
		max_count_problems = 16
.br
		log_dir = /var/log/e2fsck
.br
		log_filename = e2fsck-%N.%h.INFO.%D-%T
.br
		log_dir_wait = true
.P
.SH FILES
.TP
.I /etc/e2fsck.conf
The configuration file for 
.BR e2fsck (8).
.SH SEE ALSO
.BR e2fsck (8)
