如何在Linux上實現檔案系統的自動檢查和修復?
平常Linux管理方面最重要的任務之一就是,檢查檔案系統的完整性。Linux檔案系統有可能在各種各樣的情況下受到損壞,比如系統崩潰、突然斷電、磁碟斷開,或者檔案節點(i-node)不小心被覆蓋等等。因此,定期檢查檔案系統的完整性是個好主意,以便儘量減小檔案系統受到損壞的風險。而說到檢查和修復Linux檔案系統,fsck是一款實用的工具。
我在本教程中將介紹如何藉助fsck工具,實現檔案系統的自動檢查。
系統一啟動,就觸發檔案系統自動檢查機制
如果你希望系統一啟動,就自動觸發fsck,那麼有一些方法可以設定在啟動過程中實現無人值守的fschk,這些方法具體取決於特定的Linux發行版。
在Debian、Ubuntu或Linux Mint上,編輯/etc/default/rcS,如下所示。
- $ sudo vi /etc/default/rcS
# 啟動過程中,自動修復出現不一致性的檔案系統
- FSCKFIX=yes
在CentOS上,使用下列內容,編輯/etc/sysconfig/autofsck(要是它沒有,就建立)。
- $ sudo vi /etc/sysconfig/autofsck
- AUTOFSCK_DEF_CHECK=yes
強制定期檢查檔案系統
如果檔案系統很龐大,你可以強制定期檢查檔案系統,而不是每次系統啟動時檢查檔案系統。為了實現這個操作,先要藉助tune2fs命令,找到檔案系統配置。下面這個命令列顯示了檔案系統相關引數的當前值。請注意:/dev/sda1是檔案系統超級塊所在的分割槽。
- $ sudo tune2fs -l /dev/sda1
從tune2fs的輸出結果中,我們不僅可以看到檔案系統的狀態(乾淨與否),還可以看到與檔案系統檢查有關的一些引數。"Maximum mount count"(最大掛載次數)這個引數是指檔案系統檢查被觸發後的掛載次數。"Check interval"(檢查時間間隔)這個引數顯示了兩次檔案系統檢查之間的最長時間。在大多數Linux發行版上,這些引數並不是預設情況下被設定的,這意味著並不進行任何定期的檔案系統檢查。
如果想強制每隔30次掛載就檢查檔案系統,請執行下面這個命令。
- $ sudo tune2fs -c 30 /dev/sda1
如果想強制每隔3個月就檢查檔案系統,請使用下面這個命令。
- $ sudo tune2fs -i 3m /dev/sda1
現在確認剛新增上去的檔案系統檢查條件已正確設定。
- $ sudo tune2fs -l /dev/sda1
- . . .
- Last mount time: n/a
- Last write time: Fri Mar 14 22:29:24 2014
- Mount count: 20
- Maximum mount count: 30
- Last checked: Mon Mar 3 20:55:08 2014
- Check interval: 7776000 (3 months)
- Next check after: Sun Jun 1 21:55:08 2014
強制下一次系統重啟時,進行一次性的檔案系統檢查
如果你想在下一次系統重啟時觸發一次性的檔案系統檢查,可以使用這個命令。
- $ sudo touch /forcefsck
一旦你在類似上面的頂層目錄(/)中建立了一個名為forcefsck的空檔案,它就會在你下一次重啟時,強制進行檔案系統檢查。系統成功啟動後,/forcefsck則會自動被清除。