主流Linux/Unix文件系統架構簡介

原文地址: http://blog.chinaunix.net/uid-28989651-id-3833383.html

Linux/Unix文件系統主流架構包括以下幾種:

(1)  FFS-style文件系統:代表文件系統有最初的BerkeleyFFS和Ext2,具有的優點是簡單、高性能、易於修復和恢復數據,但是每次系統崩潰需要全盤fsck,無數據一致性保障,無正規的防禦磁盤崩潰的措施。


(2)   日誌(Journaling)文件系統:最爲流行的現代文件系統架構,典型代表文件系統有Ext3、Reiserfs以及其他多種文件系統。日誌文件系統加入對近期提交到文件系統的事務的log,log順序地寫到磁盤上的一個保留的位置。文件系統的主體不會更改,直到事務完整地寫到log中爲止。日誌使得文件系統可以快速從崩潰狀態恢復,因爲可以“回放”log,完成任意未半完成狀態(文件系統的更改信息已經寫到了log中,但是還沒有寫到文件系統中)的操作。日誌文件系統存在的問題包括兩次寫問題(每個操作必須寫磁盤兩次,一次是寫到log中,另一次是寫到文件系統中最終的位置)以及受限的日誌空間帶來的多種性能問題。此外,日誌文件系統也沒有改善磁盤崩潰的情況。


(3)  日誌結構(Log-structured)文件系統:典型代表文件系統LFS。Log-structured文件系統在文件系統研究社區反響強烈,但是從未用於主流商業產品用途。Log-structured的主要設計思想是:首先,以log的方式將更新寫出,這將一組隨機寫IO轉換成一個大的連續的寫入流,寫操作更爲高效;其次,整個文件就是一個巨大的連續事務log,對文件的更新直接追加到log中(解決了Journaling文件系統的兩次寫問題),數據的更新不會在本地覆蓋寫——從這個意義上看log-structured文件系統也是一種Copy-on-write(COW)文件系統。Log-structured文件系統的主要問題是系統需要大的空閒的segments磁盤空間,這些空閒的segments由“cleaner”線程創建。非完全空閒的segments中的已分配的blocks必須移出到其他的segments中。儘管對cleaner的優化進行了多年的研究,cleaner線程的開銷仍然非常高。此外,計算空閒空間的總數也很困難,因爲COW文件系統直到數據塊的新的拷貝寫入成功的時候纔會釋放該數據塊的舊的拷貝塊,而一次操作需要完成的數據塊拷貝的數量是不可預測的。最後,強制重分配數據塊需要在每次寫操作的時候做一個“good”的分配決策,而本地更新文件系統僅需要做一次的“good”分配決策。


(4)  軟更新(Soft updates)文件系統:Soft updates是對Berkeley FFS的優化,在文件系統崩潰的時候,保留磁盤上的文件系統格式數據(也就是元數據),使得無需執行fsck程序就可掛載文件系統。Soft updates仔細調整對文件系統的更新順序,因而任意時刻文件系統發生崩潰,除去部分“leaked”(標記爲已分配,實際上是空閒的)的inodes和blocks外,文件系統數據是一致的。後臺fsck程序運行在文件系統的快照上,找出這些未引用的blocks並將其再次標記爲空閒。Soft update是的負面影響主要是極度複雜,難於理解和實現,並且每個文件系統操作需要其自己獨特設計的update代碼。當前已知的僅有一個實現的soft updates實例。


(5)  寫時拷貝(copy-on-write(COW))文件系統:最新趨勢的文件系統架構。COW文件系統的典型代表是WAFL (Write Anywhere File Layout, Network Appliance的內部文件系統)、ZFS以及Btrfs。這些文件系統以樹的方式組織文件blocks。當一個block更新的時候,就分配一個新的block,鏈接block的指針指向更新後的block——當然也會引起這些指針所在的block的更新產生。當一組一致的更新寫到磁盤之後,root block自動更新爲指向新的blocks 樹,該新的blocks樹包含最新的分配信息。這種結構方式極其易於實現文件系統快照技術,而且集中了文件系統一致性代碼。COW文件系統的不足之處與Log-structured文件系統相似——每次寫操作要強制重分配,同時不確定完成一次更新需要多少的磁盤空間。同時,好的同步性能需要加入某種journal,使得COW文件系統的實現更復雜。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章