Linux
fsck -p (preen) 在 ext4 上做了什麼?
我正在閱讀一篇關於文件系統修復的部落格文章,作者發布了一個很好的問題……
fsck -p
應該在沒有人工干預的情況下自動修復小錯誤。但是,當它被告知要整理文件系統時,它究竟會解決什麼問題呢?它會修復什麼錯誤,什麼會導致它停止並告訴使用者他或她必須以互動方式執行 fsck?有某種清單嗎?我一直在Google搜尋,我發現的只是手冊頁,它並沒有真正說明什麼
-p
會修復或什麼會觸發動手標誌。我對 ext4 文件系統特別感興趣。
您的問題的答案在於e2fsprogs原始碼
e2fsck/problems.c
文件。尋找標誌應該讓你開始。PR_PREEN_OK
由於完整的錯誤處理涉及更多,由於可能發生多種不同的錯誤情況,如果您擔心特定情況,建議您仔細查看程式碼。但是,下面的列表是從對錯誤條件的評論中提取的,應該可以讓您大致了解 preen 模式的影響。
-p
指定標誌時,目前會自動處理以下錯誤/警告:
- 重定位提示
- 日誌 inode 無效
- 日誌超級塊已損壞
- 超級塊 has_journal 標誌已清除但有日誌
- 設置了超級塊需要恢復標誌但不存在日誌
- 文件系統修訂版為 0,但設置了功能標誌
- 外部超級塊的超級塊提示
- 組描述符 N 標記為未初始化,沒有功能集。
- 組 N 塊點陣圖未初始化但 inode 點陣圖正在使用中。
- 組描述符 N 的未使用 inode 計數無效。
- 最後一組塊點陣圖未初始化。
- 設置了 test_fs 標誌(並且 ext4 可用)
- 最後的掛載時間是未來(捏造的)
- 最後寫入時間是在未來(捏造)
- 塊組校驗和(鎖存問題)無效。
- 根目錄已設置 dtime
- 保留的 inode 有錯誤的模式
- 刪除的 inode 的 dtime 為零
- Inode 正在使用,但 dtime 已設置
- 零長度目錄
- Inode 的 i_size 不正確
- Inode 的 i_blocks 不正確
- 組中的壞超級塊
- 組中的壞塊組描述符
- 無故要求阻止
- 為重定位元數據分配塊時出錯
- 在重定位過程中分配塊緩衝區時出錯
- 將元數據組資訊從 X 重定位到 Y
- 將元數據組資訊重定位到 X
- 重定位過程中的塊讀取錯誤
- 重定位過程中的塊寫入錯誤
- 在設備或套接字 inode 上設置的不可變標誌
- 設備、fifo 或套接字 inode 的非零大小
- 文件系統修訂版為 0,但設置了功能標誌
- 日誌 inode 未使用,但包含數據
- 日記有壞模式
- 在非 HTREE 文件系統上設置的 INDEX_FL 標誌
- 在非目錄上設置的 INDEX_FL 標誌
- HTREE 目錄中的根節點無效
- HTREE 目錄中不支持的雜湊版本
- HTREE 根節點中的不兼容標誌
- HTREE 太深
- 無效的 inode->i_extra_isize
- 無效的 ea 條目->e_name_len
- 無效的 ea 條目->e_value_offs
- 無效的 ea 條目->e_value_block
- 無效的 ea 條目->e_value_size
- 無效的 ea 條目->e_hash
- inode 缺少 EXTENTS_FL,但它是一個範圍 inode
- Inode 不應設置 EOFBLOCKS_FL
- 目錄條目已刪除或未使用的 inode
- 未設置目錄文件類型
- 在文件系統上設置的目錄文件類型
- 無效的 HTREE 根節點
- HTREE 限制無效
- 無效的 HTREE 計數
- HTREE 內部節點在表中有亂序雜湊
- 在設置了 _INODE_UNINIT 的組中找到 Inode
- 在組未使用的 inode 區域中找到 inode
- i_blocks_hi 應該為零
- /lost+found 未找到
- 未附加的零長度 inode
- 索引節點引用計數錯誤
- 未設置 inode 點陣圖末尾的填充。
- 未設置塊點陣圖末尾的填充。
- 塊點陣圖差異標頭
- 塊未使用,但在點陣圖中標記
- 塊已使用,但未在點陣圖中標記為已使用
- 塊點陣圖差異結束
- Inode 點陣圖差異標頭
- Inode 未使用,但在點陣圖中標記
- 已使用 inode,但未在點陣圖中標記為已使用
- Inode 點陣圖差異結束
- 組錯誤的空閒 inode 計數
- 目錄計數組錯誤
- 空閒 inode 計數錯誤
- 組錯誤的空閒塊計數
- 空閒塊數錯誤
- 塊範圍未使用,但在點陣圖中標記
- 已使用塊範圍,但未在點陣圖中標記為已使用
- 未使用 inode 範圍,但在點陣圖中標記
- 已使用 inode 範圍,但未在點陣圖中標記為已使用
- 組 N 塊正在使用,但組標記為 BLOCK_UNINIT
- 組 N inode(s) 正在使用,但組標記為 INODE_UNINIT
- 如果設置了 E2F_FLAG_JOURNAL_INODE 標誌,則重新創建日誌
以下錯誤情況會導致非互動式 fsck 程序中止,即使
-p
設置了標誌:
- 塊點陣圖不在組中
- Inode 點陣圖不在組中
- Inode 表不在組中
- 文件系統大小錯誤
- 超級塊中的 inode 計數不正確
- Hurd 不支持文件類型功能
- 日誌具有未知的超級塊類型
- 詢問我們是否應該清除日誌
- 日誌超級塊具有未知的只讀功能標誌集
- 日誌超級塊具有未知的不兼容功能標誌集
- 日記的版本號不受支持
- 詢問我們是否應該執行該期刊
- 沒有 resize_inode 的保留塊
- Resize_inode 未啟用,但 resize inode 非零
- 調整 inode 大小無效
- 最後掛載時間是未來
- 最後寫入時間是未來
- 組描述符 N 校驗和無效。
- 根目錄不是 inode
- 塊點陣圖與其他一些 fs 塊衝突
- Inode 點陣圖與其他一些 fs 塊衝突
- inode 表與其他一些 fs 塊衝突
- 塊點陣圖在壞塊上
- Inode 點陣圖在壞塊上
- inode 中的非法塊號
- 塊號與 fs 元數據重疊
- Inode 有非法塊(閂鎖問題)
- inode 壞塊太多
- 壞塊inode中的非法塊號
- 壞塊 inode 有非法塊(閂鎖問題)
- 壞塊用作壞塊間接塊
- 不一致無法修復提示
- 壞主塊提示
- 禁止消息提示
- 當文件系統不支持時,在 inode 上設置的想像標誌
- 當文件系統不支持時在 inode 上設置壓縮標誌
- 處理屬於孤立鍊錶的 inode
- 處理作為損壞的孤立鍊錶一部分的 inode(閂鎖問題)
- 讀取擴展屬性塊時出錯
- 無效的擴展屬性塊
- 擴展屬性引用計數不正確
- 不支持多個 EA 塊
- 錯誤 EA 分配衝突
- 錯誤的擴展屬性名稱
- 錯誤的擴展屬性值
- Inode 太大(閂鎖問題)
- 目錄太大
- 正常文件太大
- 符號連結太大
- 壞塊具有與文件系統塊衝突的間接塊
- 調整 inode 大小失敗
- inode 似乎是一個目錄
- 讀取範圍樹時出錯
- 未能迭代範圍
- 範圍內的錯誤起始塊
- 超出文件系統的範圍結束
- 在非擴展文件系統上設置的 EXTENTS_FL 標誌
- inode 有範圍,超級塊缺少 INCOMPAT_EXTENTS 功能
- 快速符號連結設置了 EXTENTS_FL
- 範圍不正常
- Inode 具有無效的擴展節點
- 複製重複/壞塊?
- ‘.’ 的 inode 編號錯誤
- 目錄條目的 inode 編號錯誤
- 目錄條目連結到“。”
- 指向 inode 的目錄入口點現在位於壞塊中
- 目錄條目包含指向目錄的連結
- 目錄條目包含指向根目錄的連結
- 目錄條目的名稱中有非法字元
- 失踪 ‘。’ 在目錄 inode 中
- 目錄 inode 中缺少 ‘..’
- 目錄 inode 中的第一個條目不包含“。”
- 目錄 inode 中的第二個條目不包含“..”
- i_faddr 應該為零
- i_file_acl 應該為零
- i_dir_acl 應該為零
- i_frag 應該為零
- i_fsize 應該為零
- inode 有錯誤模式
- 目錄損壞
- 文件名太長
- 目錄 inode 缺少塊(孔)
- ‘。’ 不是 NULL 終止的
- ‘..’ 不是 NULL 終止的
- 非法字元設備 inode
- 非法塊設備inode
- 複製 ‘。’ 入口
- 雙重輸入
- 最終的 rec_len 是錯誤的
- 讀取目錄塊時出錯
- 寫入目錄塊時出錯
- ‘.’ 的目錄條目 很大。分裂?
- 非法 FIFO inode
- 非法套接字 inode
- 目錄文件類型不正確
- 目錄文件名為空
- 無效的符號連結
- i_file_acl(擴展屬性塊)錯誤
- 文件系統包含大文件,但在 sb 中沒有這樣的標誌
- 清除無效的 HTREE 目錄
- htree內部節點中的壞塊
- 發現重複的目錄條目
- 找到非唯一文件名
- i_blocks_hi 應該為零
- 意外的 HTREE 塊
- 未分配根 inode
- lost+found 中沒有空間
- 未連接的目錄 inode
- ..輸入不正確
- 失去+找到不是目錄
- 未連接的 inode
- 超級塊損壞
- 不支持的片段
- 確定文件系統的物理設備大小時出錯
- 外部日誌有(不支持的)多個文件系統
- 找不到外部期刊
- 外部期刊有壞的超級塊
- Superblock 有一個壞日誌 UUID
- 分配 inode 點陣圖時出錯
- 分配塊點陣圖時出錯
- 分配 icount 連結資訊時出錯
- 分配目錄塊數組時出錯
- 掃描 inode 時出錯
- 迭代塊時出錯
- 儲存 inode 計數資訊時出錯
- 儲存目錄塊資訊時出錯
- 讀取 inode 時出錯(用於清除)
- 分配引用計數結構時出錯
- 修復引用計數時讀取擴展屬性塊時出錯
- 修復引用計數時寫入擴展屬性塊時出錯
- 分配 EA 區域分配結構時出錯
- 掃描 inode 時出錯
- 分配 inode 點陣圖時出錯
- 內部錯誤:找不到 dir_info
- 分配 icount 結構時出錯
- 遍歷目錄塊時出錯
- 釋放 inode 時出錯
- 調整 EA 引用計數時出錯
- 分配 inode 點陣圖時出錯
- 創建根目錄時出錯
- 根 inode 不是目錄;中止
- 沒有根 inode 就無法繼續。
- 內部錯誤:找不到 dir_info
- 程式錯誤:點陣圖端點不匹配
- 內部錯誤:偽造點陣圖結束
- 在替換 inode 點陣圖中複製時出錯
- 在替換塊點陣圖中複製錯誤