跳至內容

F二FS

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 21:47 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

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(英文)