OCFS2 檔案系統 - 線上檔案檢查¶
本文件將介紹 OCFS2 線上檔案檢查功能。
介紹¶
OCFS2 常用於高可用性系統。 但是,OCFS2 通常會在遇到錯誤時將檔案系統轉換為只讀。 這可能沒有必要,因為將檔案系統轉換為只讀也會影響其他正在執行的程序,從而降低可用性。 然後,引入一個掛載選項 (errors=continue),它會將 -EIO errno 返回給呼叫程序並終止進一步的處理,以避免檔案系統進一步損壞。 檔案系統不會轉換為只讀,並且有問題的檔案的 inode 編號會在核心日誌中報告。 使用者可以嘗試透過線上檔案檢查功能來檢查/修復此檔案。
範圍¶
這項工作的目的是檢查/修復可能阻礙叢集檔案系統日常執行的小問題,這些問題通常會將檔案系統轉換為只讀。 檢查/修復的範圍在檔案級別,最初是針對常規檔案,最終擴充套件到檔案系統的所有檔案(包括系統檔案)。
如果目錄到檔案的連結不正確,則目錄 inode 將報告為錯誤。
此功能不適用於需要依賴檔案系統其他元件的額外檢查,例如但不限於,檢查分配中檔案塊的位是否已設定。 如果發生此類錯誤,則應/將建議使用離線 fsck。
最後,不應自動執行此類操作/功能,以免檔案系統最終受到比修復嘗試之前更大的損壞。 因此,這必須透過使用者互動和同意來執行。
使用者介面¶
當 OCFS2 檔案系統中存在錯誤時,通常會附帶導致錯誤的 inode 編號。 此 inode 編號將是檢查/修復檔案的輸入。
每個 OCFS2 檔案系統掛載都有一個 sysfs 目錄
/sys/fs/ocfs2/<devname>/filecheck
在這裡,<devname> 指示已掛載的 OCFS2 卷裝置的名稱。 上面的檔案將接受 inode 編號。 這可用於與核心空間通訊,告知將要檢查或修復哪個檔案(inode 編號)。 目前,支援三種操作,包括檢查 inode、修復 inode 和設定結果記錄歷史的大小。
如果要了解在修復之前 <inode> 到底發生了什麼錯誤,請執行
# echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/check # cat /sys/fs/ocfs2/<devname>/filecheck/check
輸出如下所示
INO DONE ERROR
39502 1 GENERATION
<INO> lists the inode numbers.
<DONE> indicates whether the operation has been finished.
<ERROR> says what kind of errors was found. For the detailed error numbers,
please refer to the file linux/fs/ocfs2/filecheck.h.
如果您確定要修復此 inode,請執行
# echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/fix # cat /sys/fs/ocfs2/<devname>/filecheck/fix
輸出如下所示:
INO DONE ERROR
39502 1 SUCCESS
這一次,<ERROR> 列指示此修復是否成功。
3. 記錄快取用於儲存檢查/修復結果的歷史記錄。 它的預設大小為 10,可以在 10 ~ 100 的範圍內調整。您可以像這樣調整大小
# echo "<size>" > /sys/fs/ocfs2/<devname>/filecheck/set
修復內容¶
在收到 inode 後,檔案系統將讀取 inode 和檔案元資料。 如果出現錯誤,檔案系統將修復這些錯誤並在核心日誌中報告它修復的問題。 作為一項預防措施,必須先檢查 inode 是否有錯誤,然後才能執行最終修復。
inode 和結果歷史記錄將臨時儲存在一個小型的連結串列緩衝區中,該緩衝區將包含最後 (N) 個已修復/檢查的 inode,已修復/檢查的詳細錯誤將列印在核心日誌中。