Change mke2fs to use /etc/mke2fs.conf as a configuration file

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
bitmap-optimize
Theodore Ts'o 2006-03-23 22:00:01 -05:00
parent 204ae371ad
commit 9dc6ad1ecb
13 changed files with 460 additions and 182 deletions

View File

@ -1,3 +1,7 @@
2006-03-23 Theodore Ts'o <tytso@mit.edu>
* MCONFIG.in (mandir): Define $(man5dir)
2005-10-26 Theodore Ts'o <tytso@mit.edu>
* MCONFIG.in, configure.in: Use BUILD_CCFLAGS and BUILD_LDFLAGS

View File

@ -24,6 +24,7 @@ includedir = @includedir@
mandir = @mandir@
man1dir = $(mandir)/man1
man3dir = $(mandir)/man3
man5dir = $(mandir)/man5
man8dir = $(mandir)/man8
infodir = @infodir@
datadir = @datadir@

View File

@ -1,3 +1,9 @@
2006-03-23 Theodore Ts'o <tytso@mit.edu>
* feature.c (e2p_edit_feature): If the pseudo-feature "none" or
"clear" is specified, then zero out all of the feature
masks.
2005-12-10 Theodore Ts'o <tytso@mit.edu>
* Makefile.in: Add a dependency to make sure that the

View File

@ -158,15 +158,24 @@ int e2p_edit_feature(const char *str, __u32 *compat_array, __u32 *ok_array)
if (!buf)
return 1;
strcpy(buf, str);
cp = buf;
while (cp && *cp) {
for (cp = buf; cp && *cp; cp = next ? next+1 : 0) {
neg = 0;
cp = skip_over_blanks(cp);
next = skip_over_word(cp);
if (*next == 0)
next = 0;
else
*next = 0;
if ((strcasecmp(cp, "none") == 0) ||
(strcasecmp(cp, "clear") == 0)) {
compat_array[0] = 0;
compat_array[1] = 0;
compat_array[2] = 0;
continue;
}
switch (*cp) {
case '-':
case '^':
@ -183,7 +192,6 @@ int e2p_edit_feature(const char *str, __u32 *compat_array, __u32 *ok_array)
compat_array[compat_type] &= ~mask;
else
compat_array[compat_type] |= mask;
cp = next ? next+1 : 0;
}
return 0;
}

View File

@ -1,3 +1,26 @@
2006-03-23 Theodore Ts'o <tytso@mit.edu>
* mke2fs.conf, mke2fs.conf.5.in: New configuration file which when
installed, provides mke2fs's old behaviour. It makes it
easier for distributions to change which filesystem
options are the default.
* mke2fs.8.in: Update man page to document how the filesystem
features are now set.
* mke2fs.c: Radically rework how the filesystem features are set
when creating filesystems. Use the profile library to
read in a configuration file from /etc/mke2fs.conf.
* util.c (figure_journal_size): If the journal size is 0, assume
the journal size is unspecified and figure out the
approriate journal size instead of bombing out with an
error message.
* Makefile.in: Build and install the mke2fs.conf(5) man page. Add
profile.o from the e2fsck directory to mke2fs executable.
Install the configuration file /etc/mke2fs.conf.
2006-03-18 Theodore Ts'o <tytso@mit.edu>
* dumpe2fs.c, e2image.c, findsuper.c, mke2fs.c: Change printf

View File

@ -20,6 +20,7 @@ USPROGS= mklost+found filefrag
SMANPAGES= tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
e2label.8 findfs.8 blkid.8 $(E2IMAGE_MAN) \
logsave.8 filefrag.8 @FSCK_MAN@
FMANPAGES= mke2fs.conf.5
UPROGS= chattr lsattr uuidgen
UMANPAGES= chattr.1 lsattr.1 uuidgen.1
@ -28,7 +29,7 @@ LPROGS= @E2INITRD_PROG@
TUNE2FS_OBJS= tune2fs.o util.o
MKLPF_OBJS= mklost+found.o
MKE2FS_OBJS= mke2fs.o util.o
MKE2FS_OBJS= mke2fs.o util.o ../e2fsck/profile.o
CHATTR_OBJS= chattr.o
LSATTR_OBJS= lsattr.o
UUIDGEN_OBJS= uuidgen.o
@ -39,6 +40,8 @@ FSCK_OBJS= fsck.o base_device.o
BLKID_OBJS= blkid.o
FILEFRAG_OBJS= filefrag.o
XTRA_CFLAGS= -I$(srcdir)/../e2fsck
SRCS= $(srcdir)/tune2fs.c $(srcdir)/mklost+found.c $(srcdir)/mke2fs.c \
$(srcdir)/chattr.c $(srcdir)/lsattr.c $(srcdir)/dumpe2fs.c \
$(srcdir)/badblocks.c $(srcdir)/fsck.c $(srcdir)/util.c \
@ -61,7 +64,8 @@ DEPLIBS_E2P= $(LIBE2P) $(LIBCOM_ERR)
@echo " CC $<"
@$(CC) -c $(ALL_CFLAGS) $< -o $@
all:: $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) $(LPROGS)
all:: $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \
$(FMANPAGES) $(LPROGS)
findsuper: findsuper.o
@echo " LD $@"
@ -162,6 +166,9 @@ mke2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/mke2fs.8.in
@echo " SUBST $@"
@$(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.8.in mke2fs.8
mke2fs.conf.5: $(DEP_SUBSTITUTE) $(srcdir)/mke2fs.conf.5.in
@echo " SUBST $@"
@$(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.conf.5.in mke2fs.conf.5
e2label.8: $(DEP_SUBSTITUTE) $(srcdir)/e2label.8.in
@echo " SUBST $@"
@$(SUBSTITUTE_UPTIME) $(srcdir)/e2label.8.in e2label.8
@ -269,6 +276,16 @@ install: all $(SMANPAGES) $(UMANPAGES) installdirs
echo " INSTALL_DATA $(man1dir)/$$i"; \
$(INSTALL_DATA) $$i $(DESTDIR)$(man1dir)/$$i; \
done
@for i in $(FMANPAGES); do \
$(RM) -f $(DESTDIR)$(man1dir)/$$i.gz; \
echo " INSTALL_DATA $(man5dir)/$$i"; \
$(INSTALL_DATA) $$i $(DESTDIR)$(man5dir)/$$i; \
done
@if ! test -f $(DESTDIR)/etc/mke2fs.conf; then \
echo " INSTALL_DATA /etc/mke2fs.conf"; \
$(INSTALL_DATA) $(srcdir)/mke2fs.conf \
$(DESTDIR)/etc/mke2fs.conf; \
fi
install-strip: install
@for i in $(SPROGS); do \
@ -309,9 +326,16 @@ uninstall:
for i in fsck.ext2.8 fsck.ext3.8 ; do \
$(RM) -f $(DESTDIR)$(man8dir)/$$i; \
done
for i in $(FMANPAGES); do \
$(RM) -f $(DESTDIR)$(man5dir)/$$i; \
done
if cmp -s $(srcdir)/mke2fs.conf $(DESTDIR)/etc/mke2fs.conf; then \
$(RM) $(DESTDIR)/etc/mke2fs.conf; \
fi
clean:
$(RM) -f $(SPROGS) $(USPROGS) $(UPROGS) $(UMANPAGES) $(SMANPAGES) \
$(FMANPAGES) \
base_device base_device.out mke2fs.static filefrag \
e2initrd_helper partinfo \#* *.s *.o *.a *~ core

View File

@ -336,24 +336,35 @@ executable.
.TP
.B "\-O \fIfeature\fR[,...]"
Create filesystem with given features (filesystem options), overriding
the default filesystem options.
Currently, the
.B sparse_super
and
.B filetype
features are turned on by default when
.B mke2fs
is run on a system with Linux 2.2 or later (unless creator-os is set to
the Hurd). Filesystems that may need to be mounted on pre-2.2 Linux or
other kernels should be created with
.B "\-O none"
(or
.B "\-r 0"
for Linux 1.2) which will disable these features, even if
.B mke2fs
is run on a system which can support them.
the default filesystem options. The default features which are
enabled by default are specified by the
.I base_features
relation, either in the
.I [libdefaults]
section in the
.B /etc/mke2fs.conf
configuration file, or in the subsection of the
.I [fs_types]
section for the filesystem type as specified by the
.B -T
option. The filesystem type-specific configuration setting found in
the
.I [fs_types]
section will override the global default found in
.IR [libdefaults] .
.sp
The following filesystem options are supported:
The filesystem feature set will be further edited
using either the feature set specification specified by this option,
or if this option is not specified, by the
.I default_features
relation for the filesystem type being created, or in the
.I [libdefaults]
section of the configuration file.
.sp
The filesystem feature set is comprised of a list of features, separated
by commas, that are to be enabled. To disable a feature, simply
prefix the feature name with a caret ('^') character. The
pseudo-filesystem feature "none" will clear all filesystem features.
.RS 1.2i
.TP
.B dir_index
@ -423,25 +434,10 @@ or there is no chance of recovery.
.BI \-T " fs-type"
Specify how the filesystem is going to be used, so that
.B mke2fs
can choose optimal filesystem parameters for that use. Currently, the
primary filesystem parameter which is manipulated is the number of
inodes contained the filesystem, but in the future other filesystem
parameters may also changed for specific filesystem usage scenarios. If
no filesystem type is specified, filesystem meant for general purpose
use will be created, with default values for the blocksize, number of
inodes, etc. based on the size of the filesystem to be created. The
supported filesystem types are:
.RS 1.2i
.TP 1.2i
news
one inode per 4kb block
.TP
largefile
one inode per megabyte
.TP
largefile4
one inode per 4 megabytes
.RE
can choose optimal filesystem parameters for that use, as defined
filesystem type configuration settings found in the
.BR /etc/mke2fs.conf (5)
file.
.TP
.B \-v
Verbose execution.
@ -467,6 +463,7 @@ There may be other ones. Please, report them to the author.
is part of the e2fsprogs package and is available from
http://e2fsprogs.sourceforge.net.
.SH SEE ALSO
.BR mke2fs.conf (5),
.BR badblocks (8),
.BR dumpe2fs (8),
.BR e2fsck (8),

View File

@ -51,6 +51,7 @@ extern int optind;
#include "e2p/e2p.h"
#include "ext2fs/ext2fs.h"
#include "util.h"
#include "profile.h"
#include "../version.h"
#include "nls-enable.h"
@ -85,6 +86,8 @@ char *mount_dir;
char *journal_device;
int sync_kludge; /* Set using the MKE2FS_SYNC env. option */
profile_t profile;
int sys_page_size = 4096;
int linux_version_code = 0;
@ -143,79 +146,6 @@ static int parse_version_number(const char *s)
return ((((major * 256) + minor) * 256) + rev);
}
/*
* This function sets the default parameters for a filesystem
*
* The type is specified by the user. The size is the maximum size
* (in megabytes) for which a set of parameters applies, with a size
* of zero meaning that it is the default parameter for the type.
* Note that order is important in the table below.
*/
#define DEF_MAX_BLOCKSIZE -1
static char default_str[] = "default";
struct mke2fs_defaults {
const char *type;
int size;
int blocksize;
int inode_ratio;
} settings[] = {
{ default_str, 0, 4096, 8192 },
{ default_str, 512, 1024, 4096 },
{ default_str, 3, 1024, 8192 },
{ "journal", 0, 4096, 8192 },
{ "news", 0, 4096, 4096 },
{ "largefile", 0, 4096, 1024 * 1024 },
{ "largefile4", 0, 4096, 4096 * 1024 },
{ 0, 0, 0, 0},
};
static void set_fs_defaults(const char *fs_type,
struct ext2_super_block *super,
int blocksize, int sector_size,
int *inode_ratio)
{
int megs;
int ratio = 0;
struct mke2fs_defaults *p;
int use_bsize = 1024;
megs = super->s_blocks_count * (EXT2_BLOCK_SIZE(super) / 1024) / 1024;
if (inode_ratio)
ratio = *inode_ratio;
if (!fs_type)
fs_type = default_str;
for (p = settings; p->type; p++) {
if ((strcmp(p->type, fs_type) != 0) &&
(strcmp(p->type, default_str) != 0))
continue;
if ((p->size != 0) && (megs > p->size))
continue;
if (ratio == 0)
*inode_ratio = p->inode_ratio < blocksize ?
blocksize : p->inode_ratio;
use_bsize = p->blocksize;
}
if (blocksize <= 0) {
if (use_bsize == DEF_MAX_BLOCKSIZE) {
use_bsize = sys_page_size;
if ((linux_version_code < (2*65536 + 6*256)) &&
(use_bsize > 4096))
use_bsize = 4096;
}
if (sector_size && use_bsize < sector_size)
use_bsize = sector_size;
if ((blocksize < 0) && (use_bsize < (-blocksize)))
use_bsize = -blocksize;
blocksize = use_bsize;
super->s_blocks_count /= blocksize / 1024;
}
super->s_log_frag_size = super->s_log_block_size =
int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
}
/*
* Helper function for read_bb_file and test_disk
*/
@ -892,11 +822,33 @@ static __u32 ok_features[3] = {
};
static void syntax_err_report(const char *filename, long err, int line_num)
{
fprintf(stderr,
_("Syntax error in mke2fs config file (%s, line #%d)\n\t%s\n"),
filename, line_num, error_message(err));
exit(1);
}
static const char *config_fn[] = { "/etc/mke2fs.conf", 0 };
static void edit_feature(const char *str, __u32 *compat_array)
{
if (!str)
return;
if (e2p_edit_feature(str, compat_array, ok_features)) {
fprintf(stderr, _("Invalid filesystem option set: %s\n"),
str);
exit(1);
}
}
static void PRS(int argc, char *argv[])
{
int b, c;
int size;
char * tmp;
char *tmp, *tmp2;
int blocksize = 0;
int inode_ratio = 0;
int inode_size = 0;
@ -913,6 +865,9 @@ static void PRS(int argc, char *argv[])
struct utsname ut;
#endif
long sysval;
int s_opt = -1, r_opt = -1;
char *fs_features = 0;
int use_bsize;
/* Update our PATH to include /sbin */
if (oldpath) {
@ -941,17 +896,17 @@ static void PRS(int argc, char *argv[])
sys_page_size = sysval;
#endif /* _SC_PAGESIZE */
#endif /* HAVE_SYSCONF */
if ((tmp = getenv("MKE2FS_CONFIG")) != NULL)
config_fn[0] = tmp;
profile_set_syntax_err_cb(syntax_err_report);
profile_init(config_fn, &profile);
setbuf(stdout, NULL);
setbuf(stderr, NULL);
initialize_ext2_error_table();
memset(&fs_param, 0, sizeof(struct ext2_super_block));
fs_param.s_rev_level = 1; /* Create revision 1 filesystems now */
fs_param.s_feature_incompat |= EXT2_FEATURE_INCOMPAT_FILETYPE;
fs_param.s_feature_ro_compat |= EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER;
#if 0
fs_param.s_feature_compat |= EXT2_FEATURE_COMPAT_DIR_INDEX;
#endif
#ifdef __linux__
if (uname(&ut)) {
@ -959,12 +914,8 @@ static void PRS(int argc, char *argv[])
exit(1);
}
linux_version_code = parse_version_number(ut.release);
if (linux_version_code && linux_version_code < (2*65536 + 2*256)) {
if (linux_version_code && linux_version_code < (2*65536 + 2*256))
fs_param.s_rev_level = 0;
fs_param.s_feature_incompat = 0;
fs_param.s_feature_compat = 0;
fs_param.s_feature_ro_compat = 0;
}
#endif
if (argc && *argv) {
@ -1043,8 +994,6 @@ static void PRS(int argc, char *argv[])
parse_journal_opts(optarg);
break;
case 'j':
fs_param.s_feature_compat |=
EXT3_FEATURE_COMPAT_HAS_JOURNAL;
if (!journal_size)
journal_size = -1;
break;
@ -1076,25 +1025,16 @@ static void PRS(int argc, char *argv[])
quiet = 1;
break;
case 'r':
fs_param.s_rev_level = strtoul(optarg, &tmp, 0);
r_opt = strtoul(optarg, &tmp, 0);
if (*tmp) {
com_err(program_name, 0,
_("bad revision level - %s"), optarg);
exit(1);
}
if (fs_param.s_rev_level == EXT2_GOOD_OLD_REV) {
fs_param.s_feature_incompat = 0;
fs_param.s_feature_compat = 0;
fs_param.s_feature_ro_compat = 0;
}
fs_param.s_rev_level = r_opt;
break;
case 's': /* deprecated */
if (atoi(optarg))
fs_param.s_feature_ro_compat |=
EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER;
else
fs_param.s_feature_ro_compat &=
~EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER;
s_opt = atoi(optarg);
break;
#ifdef EXT2_DYNAMIC_REV
case 'I':
@ -1127,19 +1067,7 @@ static void PRS(int argc, char *argv[])
}
break;
case 'O':
if (!strcmp(optarg, "none")) {
fs_param.s_feature_compat = 0;
fs_param.s_feature_incompat = 0;
fs_param.s_feature_ro_compat = 0;
break;
}
if (e2p_edit_feature(optarg,
&fs_param.s_feature_compat,
ok_features)) {
fprintf(stderr,
_("Invalid filesystem option set: %s\n"), optarg);
exit(1);
}
fs_features = optarg;
break;
case 'E':
case 'R':
@ -1220,12 +1148,6 @@ static void PRS(int argc, char *argv[])
"(max %d), forced to continue\n"),
blocksize, sys_page_size);
}
if ((blocksize > 4096) &&
(fs_param.s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
fprintf(stderr, _("\nWarning: some 2.4 kernels do not support "
"blocksizes greater than 4096\n\tusing ext3. "
"Use -b 4096 if this is an issue for you.\n\n"));
if (optind < argc) {
fs_param.s_blocks_count = parse_num_blocks(argv[optind++],
fs_param.s_log_block_size);
@ -1238,19 +1160,6 @@ static void PRS(int argc, char *argv[])
if (optind < argc)
usage();
if (fs_param.s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
if (!fs_type)
fs_type = "journal";
reserved_ratio = 0;
fs_param.s_feature_incompat = EXT3_FEATURE_INCOMPAT_JOURNAL_DEV;
fs_param.s_feature_compat = 0;
fs_param.s_feature_ro_compat = 0;
}
if (fs_param.s_rev_level == EXT2_GOOD_OLD_REV &&
(fs_param.s_feature_compat || fs_param.s_feature_ro_compat ||
fs_param.s_feature_incompat))
fs_param.s_rev_level = 1; /* Create a revision 1 filesystem */
if (!force)
check_plausibility(device_name);
check_mount(device_name, force, _("filesystem"));
@ -1311,13 +1220,69 @@ static void PRS(int argc, char *argv[])
proceed_question();
}
/*
* If the user asked for HAS_JOURNAL, then make sure a journal
* gets created.
*/
if ((fs_param.s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
!journal_size)
journal_size = -1;
if (!fs_type) {
int megs = fs_param.s_blocks_count *
(EXT2_BLOCK_SIZE(&fs_param) / 1024) / 1024;
if (megs <= 3)
fs_type = "floppy";
else if (megs <= 512)
fs_type = "small";
else
fs_type = "default";
}
/* Figure out what features should be enabled */
if (r_opt == EXT2_GOOD_OLD_REV && fs_features) {
fprintf(stderr, _("Filesystem features not supported "
"with revision 0 filesystems\n"));
exit(1);
}
profile_get_string(profile, "defaults", "base_features", 0,
"filetype,sparse_super", &tmp);
profile_get_string(profile, "fs_types", fs_type, "base_features",
tmp, &tmp2);
edit_feature(tmp2, &fs_param.s_feature_compat);
free(tmp);
free(tmp2);
profile_get_string(profile, "defaults", "default_features", 0,
"", &tmp);
profile_get_string(profile, "fs_types", fs_type,
"default_features", tmp, &tmp2);
edit_feature(fs_features ? fs_features : tmp2,
&fs_param.s_feature_compat);
free(tmp);
free(tmp2);
if (s_opt > 0)
fs_param.s_feature_ro_compat |=
EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER;
else if (s_opt == 0)
fs_param.s_feature_ro_compat &=
~EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER;
if (journal_size != 0)
fs_param.s_feature_compat |=
EXT3_FEATURE_COMPAT_HAS_JOURNAL;
if (fs_param.s_feature_incompat &
EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
if (!fs_type)
fs_type = "journal";
reserved_ratio = 0;
fs_param.s_feature_incompat = EXT3_FEATURE_INCOMPAT_JOURNAL_DEV;
fs_param.s_feature_compat = 0;
fs_param.s_feature_ro_compat = 0;
}
if (fs_param.s_rev_level == EXT2_GOOD_OLD_REV) {
fs_param.s_feature_incompat = 0;
fs_param.s_feature_compat = 0;
fs_param.s_feature_ro_compat = 0;
}
/* Set first meta blockgroup via an environment variable */
/* (this is mostly for debugging purposes) */
@ -1336,8 +1301,40 @@ static void PRS(int argc, char *argv[])
if ((tmp = getenv("MKE2FS_DEVICE_SECTSIZE")) != NULL)
sector_size = atoi(tmp);
set_fs_defaults(fs_type, &fs_param, blocksize, sector_size,
&inode_ratio);
if (blocksize <= 0) {
profile_get_integer(profile, "defaults", "blocksize", 0,
1024, &use_bsize);
profile_get_integer(profile, "fs_types", fs_type,
"blocksize", use_bsize, &use_bsize);
if (use_bsize == -1) {
use_bsize = sys_page_size;
if ((linux_version_code < (2*65536 + 6*256)) &&
(use_bsize > 4096))
use_bsize = 4096;
}
if (sector_size && use_bsize < sector_size)
use_bsize = sector_size;
if ((blocksize < 0) && (use_bsize < (-blocksize)))
use_bsize = -blocksize;
blocksize = use_bsize;
fs_param.s_blocks_count /= blocksize / 1024;
}
if (inode_ratio == 0) {
profile_get_integer(profile, "defaults", "inode_ratio", 0,
8192, &inode_ratio);
profile_get_integer(profile, "fs_types", fs_type,
"inode_ratio", inode_ratio,
&inode_ratio);
if (inode_ratio < blocksize)
inode_ratio = blocksize;
}
fs_param.s_log_frag_size = fs_param.s_log_block_size =
int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
blocksize = EXT2_BLOCK_SIZE(&fs_param);
if (extended_opts)
@ -1370,6 +1367,12 @@ static void PRS(int argc, char *argv[])
exit(1);
}
if ((blocksize > 4096) &&
(fs_param.s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
fprintf(stderr, _("\nWarning: some 2.4 kernels do not support "
"blocksizes greater than 4096\n\tusing ext3. "
"Use -b 4096 if this is an issue for you.\n\n"));
if (inode_size) {
if (inode_size < EXT2_GOOD_OLD_INODE_SIZE ||
inode_size > EXT2_BLOCK_SIZE(&fs_param) ||
@ -1602,7 +1605,9 @@ int main (int argc, char *argv[])
printf(_("done\n"));
ext2fs_close(jfs);
free(journal_device);
} else if (journal_size) {
} else if ((journal_size) ||
(fs_param.s_feature_compat &
EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
journal_blocks = figure_journal_size(journal_size, fs);
if (!journal_blocks) {

22
misc/mke2fs.conf Normal file
View File

@ -0,0 +1,22 @@
[defaults]
base_features = sparse_super,filetype
blocksize = 4096
inode_ratio = 8192
[fs_types]
small = {
blocksize = 1024
inode_ratio = 4096
}
floppy = {
blocksize = 1024
}
news = {
inode_ratio = 4096
}
largefile = {
inode_ratio = 1048576
}
largefile4 = {
inode_ratio = 4194304
}

180
misc/mke2fs.conf.5.in Normal file
View File

@ -0,0 +1,180 @@
.\" -*- nroff -*-
.\" Copyright 2006 by Theodore Ts'o. All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\"
.TH mke2fs.conf 5 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
mke2fs.conf \- Configuration file for mke2fs
.SH DESCRIPTION
.I mke2fs.conf
is the configuration file for
.BR mke2fs (8).
It controls the default parameters used by
.BR mke2fs (8)
when it is creating ext2 or ext3 filesystems.
.PP
The
.I mke2fs.conf
file uses an INI-style format. 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
The following sections are used in the
.I mke2fs.conf
file. They will be described in more detail in future sections of this
document.
.TP
.I [defaults]
Contains relations which define the default parameters
used by
.BR mke2fs (8).
In general, these defaults may be overridden by a definition in the
.B fs_types
section, or by an command-line option provided by the user.
.TP
.I [fs_types]
Contains relations which define defaults that should be used for specific
filesystem types. The filesystem type can be specified explicitly using
the
.B -T
option to
.BR mke2fs (8).
If no filesystem type is specified,
.BR mke2fs (8)
will use the filesystem type
.I floppy
if the filesystem size is less than or equal to 3 megabytes.
If the filesystem size is greater than 3 but less than or equal to
512 megabytes,
.BR mke2fs (8)
will use the filesystem
.IR small .
Otherwise,
.BR mke2fs (8)
will use the default filesystem type
.IR default .
.SH THE [defaults] SECTION
The following relations are defined in the
.I [defaults]
section.
.TP
.I base_features
This relation specifies the filesystems features which are enabled in
newly created filesystems. It may be overriden by the
.I base_features
relation found in the filesystem-type-specific subsection of
the
.I [fs_types]
section.
.TP
.I default_features
This relation specifies a set of features that should be added or
removed to the features listed in the
.I base_features
relation. It may be overriden by the filesystem-specific
.I default_features
in the filesystem-type subection of
.IR [fs_types] ,
and by the
.B -O
command-line option
to
.BR mke2fs (8).
.TP
.I blocksize
This relation specifies the default blocksize if the user does not
specify a blocksize on the command line, and the filesystem-type
specific section of the configuration file does not specify a blocksize.
.TP
.I inode_ratio
This relation specifies the default inode ratio if the user does not
specify one on the command line, and the filesystem-type
specific section of the configuration file does not specify a default
inode ratio.
.SH THE [fs_types] SECTION
Each tag in the
.I [fs_types]
section names a filesystem type which can be specified via the
.B -T
option to
.BR mke2fs (8).
The value of the tag is a subsection where the relations in that
subsection define the defaults for that filesystem type. For
example:
.P
[fs_types]
.br
small = {
.br
blocksize = 1024
.br
inode_ratio = 4096
.br
}
.br
floppy = {
.br
blocksize = 1024
.br
}
.P
For each filesystem type, the following tag may be used in that
fs_type's subsection:
.TP
.I base_features
This relation specifies the features which are enabled for this
filesystem type.
.TP
.I default_features
This relation specifies set of features which should be enabled or
disabled to the features listed in the
.I base_features
relation. It may be overriden by the
.B -O
command-line option to
.BR mke2fs (8).
.TP
.I blocksize
This relation specifies the default blocksize if the user does not
specify a blocksize on the command line.
.TP
.I inode_ratio
This relation specifies the default inode ratio if the user does not
specify one on the command line.
.SH FILES
.TP
.I /etc/mke2fs.conf
The configuration file for
.BR mke2fs (8).
.SH SEE ALSO
.BR mke2fs (8)

View File

@ -256,7 +256,7 @@ int figure_journal_size(int size, ext2_filsys fs)
return 0;
}
if (size >= 0) {
if (size > 0) {
j_blocks = size * 1024 / (fs->blocksize / 1024);
if (j_blocks < 1024 || j_blocks > 102400) {
fprintf(stderr, _("\nThe requested journal "

View File

@ -1,3 +1,8 @@
2006-03-23 Theodore Ts'o <tytso@mit.edu>
* test_config: Set up MKE2FS_CONFIG to point at the mke2fs.conf
file in the source tree.
2005-09-24 Theodore Ts'o <tytso@mit.edu>
* f_dup_resize: Set the current time to in debugfs to a value

View File

@ -27,3 +27,6 @@ export LANG
unset PAGER
E2FSCK_CONFIG=/dev/null
export E2FSCK_CONFIG
MKE2FS_CONFIG=$SRCDIR/../misc/mke2fs.conf
export MKE2FS_CONFIG