在Linux系统中,有时候重启会耗费非常长的时间,如果你进一步检查细节,就会发现绝大部分时间都耗费在磁盘自检(fsck)上了,有时候遇到时间比较紧急的情况,磁盘自检耗费的时间非常长,真的是让人心焦火急的!如下截图所示

关于磁盘自检,如果是新手,肯定都会有不少疑惑,下面从这几个方面一一讲述,希望能解答你的疑惑。下面实验版本为Red Hat Enterprise Linux Server release 5.7,请注意不同版本之间的区别。

 

为什么磁盘需要自检呢?

现在的文件系统已经非常可靠,极少出现问题,但是总有意外或错误出现的概率,例如断电、硬件失败等,所以Linux会使用fsck来检查和修复文件系统。fsck命令(filesystem consistency check),意思是文件系统一致性检查。fsck能够安全、自动修复下面这5类问题:

未被引用的inode;

难以置信的超大链接数

没有记录在磁盘块映射表中的未用数据块

列出的空闲数据块还在某个文中使用;

超级块中不正确的汇总信息。

通常情况下,硬盘在启动时使用fsck -p来进行检查,它将检查/etc/fstab中列出的所有本地文件系统。大多数系统设置为启动时自动运行fsck,希望任何错误在系统使用前被检测到,并得到修正。因为使用错误的文件系统可能使得问题变得更加糟糕。所以磁盘自检是有必要的,这也是为什么大多数系统将其设置为启动时自动运行fsck(有一定规律,不是每次启动都会做磁盘自检,取决于你的配置,下面阐述),所以没有特殊必要的话,最好不要取消磁盘自检。

 

什么时候磁盘才会自检?

上面所述,并不是每次重启都会做磁盘自检,那么磁盘自检的规律如何查看呢? 此时需要借助tune2fs命令

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -E "Maximum mount count|Check interval"

Maximum mount count:      -1

Check interval:           604800 (1 week)

[root@DB-Server ~]# 

如上所示,Check interval表示执行磁盘自检fsck的时间间隔,Maximum mount count表示强制自检的挂载次数,即达到最大挂载次数后,再次开机时就会强制自检。上面信息告诉我们,磁盘自检的时间间隔为一周,也就是7天。Maximum mount count 值为-1表示禁用这个功能。

 

如何更改磁盘自检设置?

 

加入我要将磁盘自检的时间间隔设置为一个月,那么可以如下设置

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      -1

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           604800 (1 week)

Next check after:         Sun Jan 11 21:34:24 2015

[root@DB-Server ~]# tune2fs -i 30 /dev/sda2

tune2fs 1.39 (29-May-2006)

Setting interval between checks to 2592000 seconds

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      -1

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           2592000 (1 month)

Next check after:         Tue Feb  3 21:34:24 2015

[root@DB-Server ~]# 

如果我要设置磁盘挂载2次就必须进行磁盘自检,那么可以如下设置:

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      -1

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           2592000 (1 month)

Next check after:         Tue Feb  3 21:34:24 2015

[root@DB-Server ~]# tune2fs -c 2 /dev/sda2

tune2fs 1.39 (29-May-2006)

Setting maximal mount count to 2

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      2

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           2592000 (1 month)

Next check after:         Tue Feb  3 21:34:24 2015

[root@DB-Server ~]# 

当然,你也可以一起设置,如下所示

[root@DB-Server ~]# tune2fs -i 60  -c 10 /dev/sda2

tune2fs 1.39 (29-May-2006)

Setting maximal mount count to 10

Setting interval between checks to 5184000 seconds

You have new mail in /var/spool/mail/root

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      10

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           5184000 (2 months)

Next check after:         Thu Mar  5 21:34:24 2015

[root@DB-Server ~]# 

 

如何取消磁盘自检设置?

如何取消、关闭磁盘自检呢?我们可以有下面几种方式:

1: 使用命令tune2fs -i 0 -c 0 取消磁盘自检,如下所示

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      10

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           5184000 (2 months)

Next check after:         Thu Mar  5 21:34:24 2015

[root@DB-Server ~]# tune2fs -i 0 -c 0 /dev/sda2

tune2fs 1.39 (29-May-2006)

Setting maximal mount count to -1

Setting interval between checks to 0 seconds

[root@DB-Server ~]# 

[root@DB-Server ~]# tune2fs -l /dev/sda2 | grep -i -E 'mount|check'

Last mounted on:          <not available>

Default mount options:    user_xattr acl

Last mount time:          Mon Jul  4 11:30:54 2016

Mount count:              94

Maximum mount count:      -1

Last checked:             Sun Jan  4 21:34:24 2015

Check interval:           0 (<none>)

[root@DB-Server ~]# 

 

2:修改/etc/fstab中第六列的值

/etc/fstab分区表中第六列(pass):指明自检顺序。 (0为不自检,1或者2为要自检,如果是根分区要设为1,其他分区只能是2)

[root@DB-Server ~]# more /etc/fstab 

LABEL=/                 /                       ext3    defaults        1 1

LABEL=/boot             /boot                   ext3    defaults        1 2

tmpfs                   /dev/shm                tmpfs   defaults        0 0

/dev/mapper/VolGroup01-LogVol00 /u02            ext3    defaults        0 2

/dev/VolGroup02/LogVol00   /u05                 ext3    defaults        1 2

#/dev/VolGroup03/LogVol00   /u06                 ext3    defaults        1 1

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

LABEL=SWAP-sda3         swap                    swap    defaults        0 0

[root@DB-Server ~]# more /etc/fstab 

LABEL=/                 /                       ext3    defaults        1 0

LABEL=/boot             /boot                   ext3    defaults        1 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

/dev/mapper/VolGroup01-LogVol00 /u02            ext3    defaults        0 0

/dev/VolGroup02/LogVol00   /u05                 ext3    defaults        1 0

#/dev/VolGroup03/LogVol00   /u06                 ext3    defaults        1 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

LABEL=SWAP-sda3         swap                    swap    defaults        0 0

You have new mail in /var/spool/mail/root

[root@DB-Server ~]# 

关于这两者的优先级,我测试过,即使已经满足了Maximum mount count和Check interval里面的条件,如果在/etc/fstab里面关闭了磁盘自检,那么在重启时,并不会做磁盘自检,也就是说/etc/fstab设置里面的优先级要高一些。

 

3:使用参数-f 跳过自检

[root@DB-Server ~]# shutdown -rf now

这种方式是临时的,不需要修改系统配置。

4:在/boot/grub/grub.conf 中添加fastboot,如下所示

[root@DB-Server /]# cd /boot

[root@DB-Server boot]# ls

config-2.6.18-274.el5  grub  initrd-2.6.18-274.el5.img  lost+found  symvers-2.6.18-274.el5.gz  System.map-2.6.18-274.el5  vmlinuz-2.6.18-274.el5

[root@DB-Server boot]# cd grub/

[root@DB-Server grub]# ls

device.map     fat_stage1_5  grub.conf         jfs_stage1_5  minix_stage1_5     splash.xpm.gz  stage2         vstafs_stage1_5

e2fs_stage1_5  ffs_stage1_5  iso9660_stage1_5  menu.lst      reiserfs_stage1_5  stage1         ufs2_stage1_5  xfs_stage1_5

[root@DB-Server grub]# more grub.conf 

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda2

#          initrd /initrd-version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-274.el5)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ rhgb quiet

        initrd /initrd-2.6.18-274.el5.img  fastboot

You have new mail in /var/spool/mail/root

[root@DB-Server grub]# 

kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ rhgb quiet

initrd /initrd-2.6.18-274.el5.img fastboot

 

如何强制下次重启磁盘自检?

 

如何强制系统下次root时,进行磁盘自检?

方法1: 使用tune2fs调整Maximum mount count和Check interval的值,使其下次重启时满足磁盘自检。

方法2:关于这个,在RHEL中,你可以在/etc/rc.sysinit 中看到如下代码(Debian or Ubuntu Linux下查看/etc/init.d/checkfs.sh)如下所示:

所以,你只需要创建一个forcefsck文件,下次重启时,就能强制其进行磁盘自检。

[root@DB-Server /]#  touch /forcefsck

[root@DB-Server /]# reboot

 

Broadcast message from root (pts/1) (Mon Jul  4 14:33:59 2016):

 

The system is going down for reboot NOW!

重启过程中,你就会看到磁盘自检。重启后,你会发现刚才生成的forcefsck文件已经不见了。

方法3:使用shutdown相关参数强制磁盘自检

[root@DB-Server /]# man shutdown

# shutdown -rF now

参考资料:

http://www.pc-freak.net/blog/changing-setting-33-times-standard-fsck-file-system-check-debian-linux-desktop-systems/

http://www.cyberciti.biz/faq/linux-force-fsck-on-the-next-reboot-or-boot-sequence/

www.cyberciti.biz/faq/linux-unix-bypassing-fsck/

Linux 磁盘自检介绍的更多相关文章

  1. Linux磁盘分区介绍

    分区?我们不是已经在BIOS界面分区好了吗?如果领导给你一块磁盘,你怎么用呢?所以就有了分区工具(fdisk和parted),fdisk工具只针对小于2T磁盘分区,且是交互式的:parted很强大,通 ...

  2. <实训|第七天>横扫Linux磁盘分区、软件安装障碍附制作软件仓库

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  3. Linux磁盘的分区操作

    1.Linux磁盘分区介绍 Linux磁盘分区主要有两种方式,一种是MBR,另一种是GPT.根据Linux磁盘分的大小,来选择一种分区方式. --MBR分区格式:最大支持 2 TB 的磁盘.--GPT ...

  4. Linux系统启动过程介绍

    Linux系统启动过程介绍 学习操作系统有必要了解一下系统的启动过程,这样在面对各种系统故障的时候能快速定位解决问题,下面以Centos来分析linux系统的启动过程. 1.BIOS自检:当开机的时候 ...

  5. Linux 磁盘分区管理

    Linux 磁盘管理进阶 磁盘分区介绍 基本分区(primary partion) 基本分区也称主分区,引导分区.每块磁盘分区主分区与扩展分区加起来不能大于四个. 基本分区创建后可以立即使用,但是有分 ...

  6. 【Linux开发】Linux磁盘管理

    第八章 Linux磁盘管理 [查看磁盘或者目录的容量 df 和 du] df 查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认是按k为单位显示的:df常用参数有 –i -h -k ...

  7. Linux实战教学笔记07:Linux系统目录结构介绍

    第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...

  8. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  9. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

随机推荐

  1. C#/VB.NET 向PowerPoint文档插入视频

    如今,Microsoft Office PowerPoint在我们日常生活中的应用已经很广泛了,利用Microsoft Office PowerPoint不仅可以创建演示文稿,还可以在互联网上召开面对 ...

  2. xcode6 使用MJRefresh,Too many arguments to function call, expected 0, have *

    转载自:  http://blog.csdn.net/wsjshx/article/details/40743291 将XCode升级到6后,报Too many arguments to functi ...

  3. 总结Oracle删除表空间遇到的问题

    问题1:删除表空间期间遭遇报错 ORA-29857 问题2:删除表空间期间遭遇 ORA-02429 问题3:表空间删除完毕,主机磁盘空间不释放 问题1:删除表空间期间遭遇报错 ORA-29857 删除 ...

  4. 1Z0-053 争议题目解析154

    1Z0-053 争议题目解析154 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 154.A database is running in ARCHIVELOG mode and ...

  5. C++作用域

    作用域通常和变量捆绑在一起,限定了变量可用范围,同时也规定了变量的生命周期:何时创建.何时销毁.作用域通常分为:全局作用域和局部作用域. 全局作用域(全局变量) 在所用函数体外部定义的变量就是全局变量 ...

  6. 开源网站.NETMVC+ Layui+SqlSugar+RestSharp

    SugarSite一个前端支持移动端的企业网站,目前只支持了简单功能,后续还会加上论坛等. 源码GIT地址: https://github.com/sunkaixuan/SugarSite 技术介绍 ...

  7. [AngularJS] AngularJS系列(5) 中级篇之动画

    目录 CSS定义 JS定义 ng动画实际帮我们在状态切换的时候 添加特定的样式 从而实现动画效果. 一般我们会通过C3来实现具体的动画. CSS定义 ng-if 图(实际上,图并不能展现出什么): H ...

  8. 7.1数据注解属性--Key【Code-First系列】

    Key特性可以被用到类的属性中,Code-First默认约定,创建一个主键,是以属性的名字“Id”,或者是类名+Id来的. Key特性重写了这个默认的约定,你可以应用Key特性到一个类的属性上面,不管 ...

  9. C#判断字符串是否是数字

    /// <summary> /// 判断字符串是否是数字 /// </summary> public static bool IsNumber(string s) { if ( ...

  10. C++构造函数中不能调用虚函数

    在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...