]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
e2fsprogs: turn off enforced fsck intervals by default
authorEric Sandeen <sandeen@redhat.com>
Thu, 17 Feb 2011 21:55:15 +0000 (15:55 -0600)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 21 Feb 2011 01:45:12 +0000 (20:45 -0500)
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>
lib/ext2fs/initialize.c
misc/mke2fs.c
misc/mke2fs.conf
misc/mke2fs.conf.5.in
tests/mke2fs.conf.in

index 32f075e7689b2f0179c8fe949a3544dd06cc013d..5e3317314a9077e01d9a97e6377acf8de2f9c85e 100644 (file)
 #endif /* defined(__GNU__)     && defined(EXT2_OS_HURD) */
 #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
@@ -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;
index b994e1e1bf1731699bb4d1e0aae996d17d4fdc0c..87d3c262ce723031021f369e69dab2c65046e6d4 100644 (file)
@@ -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
index 52fe58ed5f6bd0d8732e113a9b42ff61ccc96590..868821d38a75aae2812c8af2b0bed11a664df722 100644 (file)
@@ -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
index dfc0695897f72cfe3187025a6fb0bf9ced00f437..cb643eb70b35a83f04ba51269f155df71e6e0c5d 100644 (file)
@@ -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
index 99eb75f4768e9bf9008e7b39a65ca988eb1cc18d..cdb6c952f546af8e98707e798130cbddedb17185 100644 (file)
@@ -3,6 +3,7 @@
        blocksize = 4096
        inode_size = 256
        inode_ratio = 16384
+       enable_periodic_fsck = true
        lazy_itable_init = false
 
 [fs_types]