有時候維護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程序分配一個空閒塊,將其內容拷貝到該空閒塊中,然後把它插入到文件中。