Linux

fsck -p (preen) 在 ext4 上做了什麼?

  • August 11, 2011

我正在閱讀一篇關於文件系統修復的部落格文章,作者發布了一個很好的問題……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 點陣圖中複製時出錯
  • 在替換塊點陣圖中複製錯誤

引用自:https://unix.stackexchange.com/questions/18526