1. 程式人生 > >如何在Linux上實現檔案系統的自動檢查和修復?

如何在Linux上實現檔案系統的自動檢查和修復?

平常Linux管理方面最重要的任務之一就是,檢查檔案系統的完整性。Linux檔案系統有可能在各種各樣的情況下受到損壞,比如系統崩潰、突然斷電、磁碟斷開,或者檔案節點(i-node)不小心被覆蓋等等。因此,定期檢查檔案系統的完整性是個好主意,以便儘量減小檔案系統受到損壞的風險。而說到檢查和修復Linux檔案系統,fsck是一款實用的工具。

我在本教程中將介紹如何藉助fsck工具,實現檔案系統的自動檢查。

系統一啟動,就觸發檔案系統自動檢查機制

如果你希望系統一啟動,就自動觸發fsck,那麼有一些方法可以設定在啟動過程中實現無人值守的fschk,這些方法具體取決於特定的Linux發行版。

在Debian、Ubuntu或Linux Mint上,編輯/etc/default/rcS,如下所示。

  1. $ sudo vi /etc/default/rcS 

# 啟動過程中,自動修復出現不一致性的檔案系統

  1. FSCKFIX=yes

在CentOS上,使用下列內容,編輯/etc/sysconfig/autofsck(要是它沒有,就建立)。

  1. $ sudo vi /etc/sysconfig/autofsck 
  2. AUTOFSCK_DEF_CHECK=yes

強制定期檢查檔案系統

如果檔案系統很龐大,你可以強制定期檢查檔案系統,而不是每次系統啟動時檢查檔案系統。為了實現這個操作,先要藉助tune2fs命令,找到檔案系統配置。下面這個命令列顯示了檔案系統相關引數的當前值。請注意:/dev/sda1是檔案系統超級塊所在的分割槽。

  1. $ sudo tune2fs -l /dev/sda1 

從tune2fs的輸出結果中,我們不僅可以看到檔案系統的狀態(乾淨與否),還可以看到與檔案系統檢查有關的一些引數。"Maximum mount count"(最大掛載次數)這個引數是指檔案系統檢查被觸發後的掛載次數。"Check interval"(檢查時間間隔)這個引數顯示了兩次檔案系統檢查之間的最長時間。在大多數Linux發行版上,這些引數並不是預設情況下被設定的,這意味著並不進行任何定期的檔案系統檢查。

如果想強制每隔30次掛載就檢查檔案系統,請執行下面這個命令。

  1. $ sudo tune2fs -c 30 /dev/sda1 

如果想強制每隔3個月就檢查檔案系統,請使用下面這個命令。

  1. $ sudo tune2fs -i 3m /dev/sda1 

現在確認剛新增上去的檔案系統檢查條件已正確設定。

  1. $ sudo tune2fs -l /dev/sda1 
  2. . . . 
  3. Last mount time:          n/a 
  4. Last write time:           Fri Mar 14 22:29:24 2014 
  5. Mount count:             20 
  6. Maximum mount count:   30 
  7. Last checked:             Mon Mar  3 20:55:08 2014 
  8. Check interval:           7776000 (3 months) 
  9. Next check after:          Sun Jun  1 21:55:08 2014 

強制下一次系統重啟時,進行一次性的檔案系統檢查

如果你想在下一次系統重啟時觸發一次性的檔案系統檢查,可以使用這個命令。

  1. $ sudo touch /forcefsck 

一旦你在類似上面的頂層目錄(/)中建立了一個名為forcefsck的空檔案,它就會在你下一次重啟時,強制進行檔案系統檢查。系統成功啟動後,/forcefsck則會自動被清除。