fsck命令——小記

         有時候維護Linux服務器時會面臨這樣一種錯誤,即顯示文件系統變成(Read Only System),即文件系統變成只讀的方式,產生這一問題的原因可能有兩種:

                                              (1)多機寫入時同步機制出現問題

                                              (2)單機寫入時出現服務器掉電的情況


(1)修改/etc/fstab,將受損的文件系統先註釋掉,如果無法讀寫該文件則採用mount -o remount rw , / 將文件系統改成讀寫模式。

(2)針對受損的文件系統,執行fsck命令,如:fsck /dev/sda1等。



*運行fsck後,該命令會分6個階段對文件系統 

進行檢查,這六個階段分別是: 

階段1: 檢查塊和塊的大小 

階段2: 檢查路徑名 

階段3: 檢查連接性 

階段4: 檢查參考記數 

階段5: 檢查自由塊列表 

階段6: 補救自由塊列表 

對每個階段進行檢查,常見的一些錯誤:

1) 移去一個沒有相關文件的目錄入口 

這時用戶可以回答Yes或Y來刪除該目錄入口。     

 2) 重連接一個已分配但不能訪問的文件:     

 fsck找到了一個已分配的I節點,但卻不可訪問(該節點沒與任何目錄連接),這時一般對fsck的"RECONNECT?"回答Yes,即把該I節點連接到lost+found目錄下,文件名即是I節點號,之後管理員應檢查該文件類型,判明該文件用途,再將該文件拷貝到相應目錄下。

3) 連接數調整ADJUST

 在交互方式下,fsck若發現連接數(與原記錄)不一致,將詢問用戶採取何種行動,本例發現一目錄的I節點連接數與該目錄的真實連接數不一致。

這時用戶應該回答Yes或Y來改正連接數。     

4) 自由塊表不一致     

fsck查出未分配塊數與超級塊中所給出的自由塊表不一致。

這時用戶應該回答Yes或Y來修正超級塊。 

從上面的出錯信息和處理方法可以發現,對於fsck詢問的問題大多數情況下都可以用Yes來回答,所以在實際應用時,可以用" -y"選項來執行該命令對硬盤進行檢查和修復。 

這裏:

RECONNECT

   表示目錄丟失,可將其存入lost+found中再作轉移。回答yes

SUPERBLK壞(注意是壞,不是wrong)

   修復見上面(如果是wrong就隨便了,修不修都可以)

CLEAR

   刪i節點,可能會錯

REMOVE

   刪文件,一般給出文件名。file=....

ADJUST

   調整連接數。實際數與原記錄不符。回答yes

使用一般都是yes過去的,不能在正在mount的文件系統上操作,否則有可能導致文件系統損壞。但也沒有碰到過用fsck導致發生錯誤的情況,不過還是建議操作的時候規範一些。

對於一個已經安裝好了的文件系統,fsck 命令不會做出矯正。 

fsck 命令出於某些原因可以在一個已經安裝好了的文件系統中運行,但不是進行修復。但是當文件系統安裝完畢之後,也許會返回不準確的錯誤消息。 

fsck 命令檢查並以交互方式修復不連貫的文件系統。在安裝文件系統之前,應該運行這個命令。您必須能夠讀設備文件,在這個設備上駐留着文件系統(例如/dev/sda1)安裝一個不連貫的文件系統也許會導致系統的崩潰。




磁盤檢測原理:


一致性的檢查分爲兩種:塊的一致性檢查和文件的一致性檢查。在檢查塊的一致性時,fsck程序構造兩張表,每張表爲塊設立一個計數器,都初始化爲0。第一張表中的計數器跟蹤該塊在文件中出現的次數,第二張表中的計數器跟蹤空閒表中的出現次數。接着fsck程序使用原始設備讀取全部的i節點,忽略文件的結構,只返回所有的磁盤塊,從0節點開始,可以建立相應文件的全部塊的塊號表。每當讀到一個塊號時,該塊在第一個表中的計數器加1,然後程序讀空閒表或位圖,查找全部未使用的塊,當在空閒表中找到一個塊時,第二張表相應的計數器加1。那麼如何判斷文件系統一致呢?哈哈,如果我們的文件系統一致,每一個塊要麼在第一張表中計數爲1,要麼在第二張表中技術爲1。那要是不是這樣呢?

1. 兩張表中都不存在,則塊丟失, 解決辦法:fsck程序,將其加入到空閒表中

2. 在空閒表中出現兩次, 解決辦法: fsck程序重新建立空閒表

3. 同時處於使用和空閒表中,fsck程序分配一個空閒塊,將其內容拷貝到該空閒塊中,然後把它插入到文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章