檔案系統學習4 日誌檔案系統的由來

2021-09-11 17:34:30 字數 1310 閱讀 9788

1、日誌檔案系統的由來

之前講述的都是檔案系統的基本功能,但是一直都集中在資料如何存放獲取的過程上,那麼檔案系統對於資料的一致性又是如何保證的呢??

同樣,我們從乙個檔案的新建開始說起,類似第三小節,乙個檔案的新建步驟如下:

一般來說,我們將 inode table 與 data block 稱為資料存放區域,至於其他例如 superblock、 block bitmap 與 inode bitmap 等區段就被稱為metadata(中介資料) 囉,因為 superblock, inode bitmap 及 block bitmap 的資料是經常變動的,每次新增、移除、編輯時都可能會影響到這三個部分的資料,因此才被稱為元資料的啦。

上面這種新建過程看似沒有什麼問題,但是如果在資料寫入過程中檔案系統發生了意外導致寫入沒有成功,此時會發生什麼情況呢?

**乙個簡單的例子:**新建檔案在寫入檔案系統時,因為不知名原因導致系統中斷(例如突然的停電啊、 系統核心發生錯誤啊~等等的怪事發生時),所以寫入的資料僅有 inode table 及 data block 而已, 最後乙個同步公升級中介資料的步驟並沒有做完,此時就會發生 metadata 的內容與實際資料存放區產生不一致 (inconsistent) 的情況了。

解決辦法:早期的檔案系統(ext2),如果發生這個問題, 那麼系統在重新啟動的時候,就會由 superblock 當中記錄的 valid bit (是否有掛載) 與 filesystem state (clean 與否) 等狀態來判斷是否強制進行資料一致性的檢查!若有需要檢查時則以 e2fsck 這支程式來進行的。

不過,這樣的檢查很費時~因為要針對 metadata 區域與實際資料存放區來進行比對, 得要搜尋整個檔案系統。這就是為什麼有時候電腦不正常關機,再次開機會顯示正在檢測硬碟的資料。

為了解決上述資料一致性的問題,檔案系統引入了日誌的概念,這一類檔案系統被稱為日誌檔案系統。

2、日誌檔案系統的操作

具體來說,日誌檔案系統是在檔案系統中劃分出乙個小區塊(例如128m),該區塊專門在記錄寫入或修訂檔案時的步驟。

例如:

那麼當檔案系統在資料的紀錄過程當中發生了問題,那麼我們的系統只要去檢查日誌記錄區塊, 就可以知道哪個檔案發生了問題,針對該問題來做一致性的檢查即可,而不必針對整塊 filesystem 去檢查, 這樣就可以達到快速修復 filesystem 的能力了。

常見的日誌檔案系統

——ext3、ext4、jffs,yaffs等

參考部落格:

Fatfs檔案系統學習

移植過程網上有很多,直接參考就可以了。1 學習過程對api重新理解 f mout f mout fs,0 0 掛載 f mout 0,0 0 解除安裝 一直對解除安裝有錯誤的認識,一直以為解除安裝的時候第乙個形參還是 fs。2 英文長檔名的實現 英文長檔名的實現參考了這個朋友的帖子。define c...

檔案系統學習(3)

一 說在前面 在嵌入式中呢,首先uboot的最終目的是啟動我們的核心,核心的目的是啟動我們的應用程式。怎麼啟動的呢?我們來分析下init post 這個函式 static int noinline init post void 如果uboot中的bootargs中有設定init,if就會被執行。而且...

Irrlicht系統學習 檔案系統

irrlicht系統的檔案系統在頂層的介面當中提供了檔案的基本讀寫操作,在後面的實現中分了不同的型別,提供zip檔案,pak檔案,xml檔案以及普通檔案的操作,每個使用者可以根據不同的需求為自己定製乙個檔案型別,以及相對應的讀寫操作,在你的專案中可以使用壓縮以及加密。在irrlicht系統檔案系統的...