summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2011-02-17 15:55:15 -0600
committerTheodore Ts'o <tytso@mit.edu>2011-02-20 20:45:12 -0500
commit3daf592646b668133079e2200c1e776085f2ffaf (patch)
treeece1a205bdd6ac37633934c9497c2900bef893b2
parentb6d274f7c67333e9d4b191b0d27a00be6a2d723f (diff)
downloade2fsprogs-3daf592646b668133079e2200c1e776085f2ffaf.tar.gz
e2fsprogs: turn off enforced fsck intervals by default
The forced fsck often comes at unexpected and inopportune moments, and even enterprise customers are often caught by surprise when this happens. Because a filesystem with an error condition will be marked as requiring fsck anyway, I submit that the time-based and mount-based checks are not particularly useful, and that administrators can schedule fscks on their own time, or tune2fs the enforced intervals if they so choose. This patch disables the intervals by default, and I've added a new mkfs.conf option to turn on the old behavior of random, unexpected, time-consuming fscks at boot time. ;) Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--lib/ext2fs/initialize.c17
-rw-r--r--misc/mke2fs.c30
-rw-r--r--misc/mke2fs.conf1
-rw-r--r--misc/mke2fs.conf.5.in11
-rw-r--r--tests/mke2fs.conf.in1
5 files changed, 39 insertions, 21 deletions
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index 32f075e7..5e331731 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -46,19 +46,6 @@
#endif /* defined(__linux__) && defined(EXT2_OS_LINUX) */
/*
- * Note we override the kernel include file's idea of what the default
- * check interval (never) should be. It's a good idea to check at
- * least *occasionally*, specially since servers will never rarely get
- * to reboot, since Linux is so robust these days. :-)
- *
- * 180 days (six months) seems like a good value.
- */
-#ifdef EXT2_DFL_CHECKINTERVAL
-#undef EXT2_DFL_CHECKINTERVAL
-#endif
-#define EXT2_DFL_CHECKINTERVAL (86400L * 180L)
-
-/*
* Calculate the number of GDT blocks to reserve for online filesystem growth.
* The absolute maximum number of GDT blocks we can reserve is determined by
* the number of block pointers that can fit into a single block.
@@ -151,7 +138,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
set_field(s_log_block_size, 0); /* default blocksize: 1024 bytes */
set_field(s_log_frag_size, 0); /* default fragsize: 1024 bytes */
set_field(s_first_data_block, super->s_log_block_size ? 0 : 1);
- set_field(s_max_mnt_count, EXT2_DFL_MAX_MNT_COUNT);
+ set_field(s_max_mnt_count, 0);
set_field(s_errors, EXT2_ERRORS_DEFAULT);
set_field(s_feature_compat, 0);
set_field(s_feature_incompat, 0);
@@ -185,7 +172,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
super->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
}
- set_field(s_checkinterval, EXT2_DFL_CHECKINTERVAL);
+ set_field(s_checkinterval, 0);
super->s_mkfs_time = super->s_lastcheck = fs->now ? fs->now : time(NULL);
super->s_creator_os = CREATOR_OS;
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index b994e1e1..87d3c262 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -2168,13 +2168,31 @@ int main (int argc, char *argv[])
uuid_generate((unsigned char *) fs->super->s_hash_seed);
/*
- * Add "jitter" to the superblock's check interval so that we
- * don't check all the filesystems at the same time. We use a
- * kludgy hack of using the UUID to derive a random jitter value.
+ * Periodic checks can be enabled/disabled via config file.
+ * Note we override the kernel include file's idea of what the default
+ * check interval (never) should be. It's a good idea to check at
+ * least *occasionally*, specially since servers will never rarely get
+ * to reboot, since Linux is so robust these days. :-)
+ *
+ * 180 days (six months) seems like a good value.
*/
- for (i = 0, val = 0 ; i < sizeof(fs->super->s_uuid); i++)
- val += fs->super->s_uuid[i];
- fs->super->s_max_mnt_count += val % EXT2_DFL_MAX_MNT_COUNT;
+#ifdef EXT2_DFL_CHECKINTERVAL
+#undef EXT2_DFL_CHECKINTERVAL
+#endif
+#define EXT2_DFL_CHECKINTERVAL (86400L * 180L)
+
+ if (get_bool_from_profile(fs_types, "enable_periodic_fsck", 0)) {
+ fs->super->s_checkinterval = EXT2_DFL_CHECKINTERVAL;
+ fs->super->s_max_mnt_count = EXT2_DFL_MAX_MNT_COUNT;
+ /*
+ * Add "jitter" to the superblock's check interval so that we
+ * don't check all the filesystems at the same time. We use a
+ * kludgy hack of using the UUID to derive a random jitter value
+ */
+ for (i = 0, val = 0 ; i < sizeof(fs->super->s_uuid); i++)
+ val += fs->super->s_uuid[i];
+ fs->super->s_max_mnt_count += val % EXT2_DFL_MAX_MNT_COUNT;
+ }
/*
* Override the creator OS, if applicable
diff --git a/misc/mke2fs.conf b/misc/mke2fs.conf
index 52fe58ed..868821d3 100644
--- a/misc/mke2fs.conf
+++ b/misc/mke2fs.conf
@@ -1,5 +1,6 @@
[defaults]
base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ enable_periodic_fsck = 0
blocksize = 4096
inode_size = 256
inode_ratio = 16384
diff --git a/misc/mke2fs.conf.5.in b/misc/mke2fs.conf.5.in
index dfc06958..cb643eb7 100644
--- a/misc/mke2fs.conf.5.in
+++ b/misc/mke2fs.conf.5.in
@@ -107,6 +107,17 @@ command-line option
to
.BR mke2fs (8).
.TP
+.I enable_periodic_fsck
+This relation specifies whether periodic filesystem checks should be
+enforced at boot time. If enabled, checks will be forced every
+180 days, or after a random number of mounts. These values may
+be changed later via the
+.B -i
+and
+.B -c
+command-line options to
+.BR tune2fs (8).
+.TP
.I force_undo
This relation, if set to a boolean value of true, forces
.B mke2fs
diff --git a/tests/mke2fs.conf.in b/tests/mke2fs.conf.in
index 99eb75f4..cdb6c952 100644
--- a/tests/mke2fs.conf.in
+++ b/tests/mke2fs.conf.in
@@ -3,6 +3,7 @@
blocksize = 4096
inode_size = 256
inode_ratio = 16384
+ enable_periodic_fsck = true
lazy_itable_init = false
[fs_types]