F二FS
F 二 FS(英語:Flash-Friendly File System)是一種緊閃記憶體檔案系統,主要由金載極(韓語:김재극)佇三星集團研發,適合呢 Linux 核心使用。
這个檔案系統的起初是為著 NAND 快閃記持體的儲存裝置設計(諸如固態硬碟、eMMC 和 SD 卡), 遮裝置廣泛存在佇家己裝置到侍服器領域。
三星應用日誌結構檔案系統的概念,使伊閣較適合用儲存裝置。
特性
- 多頭紀錄檔(Multi-head logging)
- 著 kha-tá-lok-guh 項的偌重雜鬥表
- 靜態 / 動態冷熱的資料分離
- 自適應記錄方案
- 會當組態操作單元
- 雙檢查點
- 踅翻頭佮前滾恢復
- Heap-style 塊分配
- TRIM / FITRIM 支援
- 連線的檔案系統 / 檔案碎片整理
- 行內 xattrs / 資料 / kha-tá-lok-guh
- 離線檔案系統檢查(檢查佮修復無一致))
- 線性一致性
- 檔案系統級加密
- 離線調整大細
- 內部定期資料閣整理過
- 範圍緊取
設計的
磁碟上布局
F 二 FS 將規个卷分做幾个葩(segment), 每一个階段固定做二 MB。一个節(section)有連紲的段組成,一个區(zone)由一組節組成。預設的情況下,予人設定做仝款的大細,毋過使用者會當用 ` mkfs ` 輕鬆修改大細。
F 二 FS 將規个卷劃分做六个區域,除了有夠塊的(superblock)以外的所有的區攏由濟个段組成,如後所講。
有夠塊的(Superblock,SB)
- 有夠塊佇分割區起始處,共有兩个副本以避免檔案系統歹去。伊包含基本的分割區資訊佮一寡預設的 F 二 FS 參數。
檢查點(Checkpoint,CP)
- 檢查點包含檔案系統資訊,有效 NAT / SIT 集的點陣圖,孤立 inode 列表,猶閣有當時活動段的挽欲條目。
段資訊表(SIT)
- 段資訊表包含主區域塊的有效塊數量佮有效點陣圖。
儉點位址表(NAT)
- 節點資訊表主區域節點箍的位址表。
段挽要區(SSA)
- 段挽要區包含的條目包含主區域資料佮節點箍的所有者資訊。
主區域(Main Area)
- 主區域包含檔案佮 kha-tá-lok-guh 資料佮其實索引𤆬(indices)。
為著避免檔案系統佮緊閃記憶體之間的對齊錯誤,F 二 FS 將 CP 的起始塊位址佮段大細對齊。伊閣迵過 SSA 區域中預留一寡段來共「主區」起先地址佮區的大細對齊。
元資料結構
F 二 FS 使用檢查點方案來維護檔案系統的完整性。咧掛載時陣,F 二 FS 頭先試看覓咧掃描 CP 區域來走揣最後的有效檢查淡薄仔資料。為著欲縮短掃描時間,F 二 FS 干焦使用 CP 的兩个副本。其中一个總是指示上尾仔有效資料,這予人叫做影副本機制。除了 CP 以外,NAT 和 SIT 嘛用影副本的機制。為著保證檔案系統的一致性,彼每一个 CP 指向的 NAT 和 SIT 副本攏是有效的。
索引結構
關鍵的資料結構是「節點」。 佮傳統的檔案結構類似,F 二 FS 有三種類型的節點:inode,直接節點,間接節點。F 二 FS 將四 KB 分配予一个 inode 塊,其中包括九百二十三个資料角索引(data block indices), 兩个直接節點指標,兩个間接節點指標,以及一个 double 間接節點指標,如後所講。一个直接節點箍包含一千空一十八个資料角索引,來接節點一箍包含一千空一十八个節點開始。所以,一个 inode 塊(即一个檔案)涵蓋:
` ` ` 四 KB × ( 九百二三 + 二 × 一千空一十八 + 二 × 一孵空一百八十二 + 一孵空一百八十三 )=三更九四 TB ` ` `
注意,所有的節點攏經 NAT 對映,所以每一个節點的位置攏經 NAT 轉換。為著欲緩解漫遊樹的問題,F 二 FS 會當切斷葉資料寫入引起的節點更新傳播。
kha-tá-lok-guh 結構
一个 kha-tá-lok-guh 條目(dentry)占用十一个位元組,由以下屬性組成。
一个 kha-tá-lok-guh 條目箍由及檔名組成。伊有一个點陣圖用於記錄逐个人 kha-tá-lok-guh 條目敢有效。一个 kha-tá-lok-guh 條目箍占用四 KB,結構如下:
` ` ` 目睭抹著肉 ( 四 K )=位孵 ( 二十七字石 ) + 保留 ( 三字爿 ) + 目屎礐仔 ( 十一 * 兩百十四字石 ) + 文件名 ( 八 * 兩百十四字石 ) ` ` `
F 二 FS 為 kha-tá-lok-guh 結構結構足濟級雜鬥表,每一級有一个包含專用雜鬥桶數的雜鬥表,如下所示。「A ( 二 B )」表示桶包含兩个資料角。
項
- A 表示桶(bucket)
- B 表示塊(block)
- N 表示 kha-tá-lok-guh 雜鬥上大的深度(MAX \ _ DIR \ _ HASH \ _ DEPTH)
` ` ` level # 零 A ( 二 B ) level # 一 A ( 二 B )-A ( 二 B ) level # 二 A ( 二 B )-A ( 二 B )-A ( 二 B )-A ( 二 B ) . . . level # N / 二 A ( 二 B )-A ( 二 B )-A ( 二 B )-A ( 二 B )-A ( 二 B )-. . .-A ( 二 B ) . . . level # N A ( 四 B )-A ( 四 B )-A ( 四 B )-A ( 四 B )-A ( 四 B )-. . .-A ( 四 B ) ` ` `
當 F 二 FS 佇一个 kha-tá-lok-guh 中揣一个檔名,頭先算出該檔名的雜鬥值,然後 F 二 FS 掃描級別 # 零的雜鬥表一走揣由檔名和其 inode 編號組成的 kha-tá-lok-guh 條目。若無揣著,F 二 FS 繼續走揣級別 # 一个雜鬥表示。F 二 FS 通過這方法逐級掃描由一至 N 的逐重雜鬥表。佇每一層內底,F 二 FS 干焦掃描由以下等式確定的一个桶(bucket), 就按呢展現出 O ( log ( # of files ) ) 的複雜度。
` ` ` 鋪排 # n 中愛學校內底(bucket)ua-sá-bih=( 散列值 ) % ( 鋪排 # n 中的桶刀 ) ` ` `
佇建立檔案的時陣,F 二 FS 揣著一个會當涵蓋檔名的空的連續槽。F 二 FS 以仝款的方式由一至 N 走揣各級雜鬥表中的空槽。
預設的一塊分配
咧執行的時陣,F 二 FS 佇咧「就是主要的區域:」 內管理六个活動紀錄檔:熱 / 暖 / 冷節點佮熱 / 暖 / 冷的資料。
基於紀錄檔的檔案系統(LFS)有兩種空間管理方案:穿插記錄(threaded log)佮複製並壓縮(copy-and-compaction)。 後者嘛叫做清理(cleaning), 真適合有良好順序寫入去效能的裝置,因為空閒空間總用佇寫入新的資料。毋過伊會發生高利用率的時陣遭遇「摒」的開銷。穿插記錄是受著隨機寫入效能的影響,但是無「摒」過程。F 二 FS 採用混合方案,預設的採用「複製並壓縮」,毋過根據檔案系統的狀態會策略動態變更為「穿插記錄」方案。
為使 F 二 FS 佮日本快閃記憶內底的儲存保持一致,F 二 FS 以一个節(section)為單位分配一个段(segment)。 F 二 FS 預期節的大細佮 FTL 中的糞埽收集單元大細仝款。為考慮 FTL 中的對映粒度,F 二 FS 共活動紀錄檔的每一个節分配予儘可能多的無仝區域。FTL 會當根據其對映粒度共活動紀錄檔資料寫入一个單位配置。
清理流程
F 二 FS 佇需要時和後台無咧振動時行清理。揤需要清理佇咧無夠的空縫分段(segments)服務 VFS 呼叫時觸發。後台清理器由一个核心執行緒執行,佇系統閒時間靠發清理作業。
F 二 FS 支援兩種受者選擇策略:貪婪、成本效益演算法。佇咧貪婪演算法中,F 二 FS 選擇有上細膩的效角數的受者段。佇成本效益演算法內底,F 二 FS 根據段的年齡佮有效角數量選擇受者段,以解決貪婪演算法中存在的紀錄檔塊掣動問題。F 二 FS 使用貪婪演算法進行揤需清理,後台清理器使用成本效益演算法。
為著辨識受著人段中的資料敢有效,F 二 FS 管理一个點陣圖,其中用一个位元表示一塊塊的有效性,崁主區域所有的塊的位元流組成做該點陣圖。
相關條目
- 檔案系統的對比
- 檔案系統列表
參考資料
外部連結
- F 二 FS 文件佇咧 kernel . org(英文)