Linux 磁盤自檢介紹

    在Linux系統中,有時候重啓會耗費很是長的時間,若是你進一步檢查細節,就會發現絕大部分時間都耗費在磁盤自檢(fsck)上了,有時候遇到時間比較緊急的狀況,磁盤自檢耗費的時間很是長,真的是讓人心焦火急的!以下截圖所示 node

 

clip_image001

 

   關於磁盤自檢,若是是新手,確定都會有很多疑惑,下面從這幾個方面一一講述,但願能解答你的疑惑。下面實驗版本爲Red Hat Enterprise Linux Server release 5.7,請注意不一樣版本之間的區別。 linux

 

爲何磁盤須要自檢呢? 安全

如今的文件系統已經很是可靠,極少出現問題,可是總有意外或錯誤出現的機率,例如斷電、硬件失敗等,因此Linux會使用fsck來檢查和修復文件系統。fsck命令(filesystem consistency check),意思是文件系統一致性檢查。fsck可以安全、自動修復下面這5類問題:app

未被引用的inode; 測試

難以置信的超大連接數 ui

沒有記錄在磁盤塊映射表中的未用數據塊 this

列出的空閒數據塊還在某個文中使用; spa

超級塊中不正確的彙總信息。.net

一般狀況下,硬盤在啓動時使用fsck -p來進行檢查,它將檢查/etc/fstab中列出的全部本地文件系統。大多數系統設置爲啓動時自動運行fsck,但願任何錯誤在系統使用前被檢測到,並獲得修正。由於使用錯誤的文件系統可能使得問題變得更加糟糕。因此磁盤自檢是有必要的,這也是爲何大多數系統將其設置爲啓動時自動運行fsck(有必定規律,不是每次啓動都會作磁盤自檢,取決於你的配置,下面闡述),因此沒有特殊必要的話,最好不要取消磁盤自檢。 unix

 

何時磁盤纔會自檢?

上面所述,並非每次重啓都會作磁盤自檢,那麼磁盤自檢的規律如何查看呢? 此時須要藉助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 ~]# 

clip_image002

 

如上所示,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 ~]# 

clip_image003

 

若是我要設置磁盤掛載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 ~]# 

clip_image004

 

固然,你也能夠一塊兒設置,以下所示

[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)以下所示:

clip_image005

因此,你只須要建立一個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文件已經不見了。

clip_image006

 

 

方法3:使用shutdown相關參數強制磁盤自檢

[root@DB-Server /]# man shutdown

clip_image007

# 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/

相關文章
相關標籤/搜索