在這裏插入圖片描述

這篇來深入詳細介紹下 F2FS 文件系統。正如在 ext4 的介紹中提到的,F2FS 是 Android 生態中為了應對現代存儲設備挑戰而出現的“新貴”。

一、F2FS 是什麼?為什麼需要它?

  • 全稱Flash-Friendly File System,中文意為“閃存友好文件系統”。
  • 開發者:由三星公司主導,由韓國成均館大學博士畢業生、三星工程師金載河(Jaegeuk Kim)於2012年創建。
  • 核心動機:傳統的文件系統(如 ext4, NTFS, FAT32)都是為機械硬盤 設計的。HDD 的特性是順序讀寫遠快於隨機讀寫,並且沒有“擦除壽命”的限制。
  • 新時代的問題:移動設備(手機、平板)和固態硬盤普遍使用 NAND Flash 閃存芯片。這種存儲介質有全新的特性:
    1. 異地更新:數據不能直接在原位置覆蓋寫入,必須先擦除再寫入。
    2. 擦除單位大:最小的擦除單位是“塊”,遠大於讀寫單位“頁”。
    3. 有限壽命:每個存儲塊都有有限的擦寫次數。
    4. 讀寫不對稱:讀速度很快,寫速度和擦除速度較慢。

直接在閃存上使用為 HDD 設計的文件系統(如 ext4),會導致嚴重的寫放大 問題,不僅性能下降,還會縮短存儲設備壽命。F2FS 就是為了從根本上解決這些問題而生的


二、F2FS 的核心設計哲學與關鍵技術

F2FS 的設計完全圍繞 NAND Flash 的物理特性展開。

1. 基於日誌結構文件系統的設計

這是 F2FS 最根本的架構選擇。與 ext4 的“就地更新”傾向不同,F2FS 採用 “異地更新” 策略:

  • 寫入數據時,總是將新的或修改後的數據寫入到存儲介質上新的、空閒的物理位置,而不是覆蓋舊數據。
  • 舊數據的位置會被標記為無效,成為“垃圾”。
  • 這種方式完美契合了 NAND Flash“不能覆蓋寫,必須先擦除”的物理特性。

2. 冷熱數據分離

這是 F2FS 的靈魂所在,也是其性能卓越的關鍵。

  • 概念:根據數據的更新頻率,將其分類:
    • 熱數據:頻繁更改的數據(如應用緩存、瀏覽器臨時文件)。
    • 温數據:偶爾更改的數據(如應用數據)。
    • 冷數據:很少更改的數據(如系統文件、照片、音樂)。
  • 實現:F2FS 將存儲空間劃分為六個不同的日誌區域,對應六種數據類型:
    1. Hot:節點信息。
    2. Warm:用户數據。
    3. Cold:大規模順序數據。
    4. Hot Node:目錄入口。
    5. Warm Node:文件數據塊。
    6. Cold Node:間接節點塊。
  • 好處:將更新頻率相似的數據放在一起,可以極大地優化垃圾回收 的效率。回收一個全是“冷數據”的塊幾乎沒有價值,而回收一個“熱數據”塊則可以釋放大量空間。

3. 自適應日誌記錄

F2FS 會根據當前的 I/O 模式(是隨機寫入還是順序寫入)動態調整其日誌記錄策略,以最大化利用閃存的帶寬。

4. 多頭部日誌

F2FS 使用多個日誌,允許併發寫入操作,充分利用存儲設備的並行處理能力,這在支持多通道的 UFS 和 NVMe 存儲上尤其有效。

5. 高效的垃圾回收機制

由於採用異地更新,無效數據會不斷積累,必須進行垃圾回收以釋放空間。

  • F2FS 的 GC:後台線程會主動尋找包含大量無效數據的塊,將其中的有效數據搬移到新的位置,然後擦除整個舊塊,使其變為可用空間。
  • 優勢:得益於冷熱數據分離,GC 過程可以更精準地選擇“髒塊”(無效數據多的塊),減少需要搬移的有效數據量,從而降低寫放大,提升效率和速度。

6. 修剪指令支持

F2FS 積極使用 TRIM / Discard 指令。當文件被刪除時,操作系統會立即通知 SSD/閃存控制器這些塊已不再使用,使得控制器可以在後台提前進行垃圾回收,避免在後續寫入時因等待 GC 而產生性能卡頓。


三、F2FS 在 Android 中的應用

F2FS 的出現,主要是為了解決 Android 設備上最繁重的 I/O 任務。

  • 主要使用分區/data 分區/cache 分區

    • /data:這是用户數據的核心,包含所有已安裝的應用、它們的私有數據以及用户文件。這個分區面臨着最頻繁、最隨機的寫入操作(應用安裝、卸載、更新、應用內操作)。這正是 F2FS 發揮其優勢的主戰場
    • /cache:存放臨時文件和 OTA 更新包,也是寫入密集區。
  • 與 ext4 的共存

    • /system/vendor 分區通常仍使用 ext4。因為這些分區是隻讀的,不存在寫入性能問題,ext4 的成熟和穩定是更優選擇。
  • 發展現狀:從 Android 10 開始,谷歌在 AOSP 中加強了對 F2FS 的支持。如今,絕大多數主流品牌的 Android 手機都已將 /data 分區默認格式化為 F2FS。


四、F2FS 的優缺點

優點:

  1. 卓越的隨機寫入性能:這是其最大亮點。在應用安裝、更新、文件解壓等場景下,速度明顯快於 ext4,帶來更流暢的用户體驗。
  2. 更低的寫放大:通過冷熱數據分離和高效的 GC,減少了不必要的寫入操作,延長了閃存壽命。
  3. 為閃存量身定製:從底層設計就考慮了 NAND Flash 的所有特性,能更好地與現代存儲硬件(UFS, NVMe)協同工作。
  4. 抗碎片化:日誌結構的設計天然減少了文件碎片問題。

缺點:

  1. 相對年輕:相比有數十年曆史的 ext4,F2FS 仍算“年輕”,在某些極端 corner case 下的穩定性理論上不如 ext4 那樣久經考驗。
  2. 空間回收性能:當存儲空間接近寫滿時(例如 >90%),垃圾回收的壓力會急劇增大,可能導致性能下降,有時甚至會出現明顯的卡頓(雖然近年來已有巨大改善)。
  3. CPU 開銷可能稍高:其複雜的日誌結構和垃圾回收算法可能會帶來比 ext4 稍高的 CPU 開銷,但在現代強大的 SoC 上,這點開銷通常可以忽略不計。
  4. 成熟度:雖然已非常穩定,但在非 Android/Linux 生態中的支持度不如 ext4 廣泛。

五、F2FS 與 ext4 的直觀對比

特性 F2FS ext4
設計目標 NAND Flash 閃存 機械硬盤
更新策略 異地更新 就地更新
核心機制 冷熱數據分離 Extents
隨機寫入性能 極佳 良好
順序讀寫性能 優秀 優秀
垃圾回收/碎片整理 高效,內置 需要外部工具,效率較低
成熟度/穩定性 高,但相對較新 極高,久經考驗
最佳適用場景 用户數據分區,頻繁讀寫 系統分區,只讀或大文件順序讀寫

總結

F2FS 是存儲技術從機械時代邁向閃存時代的必然產物。它不是一個簡單的增量改進,而是一次針對底層硬件特性的架構革命

在 Android 設備上,F2FS 主要負責“動”的部分(頻繁讀寫的 /data),而 ext4 則堅守“靜”的部分(只讀的 /system。這種分工協作使得 Android 系統能夠在享受 F2FS 帶來的流暢用户體驗的同時,依然建立在 ext4 的磐石般穩定之上。

隨着閃存技術的持續演進和 F2FS 的不斷優化,它已經成為並將繼續作為移動設備和高性能 SSD 領域不可或缺的核心文件系統。


結束語 Flutter是一個由Google開發的開源UI工具包,它可以讓您在不同平台上創建高質量、美觀的應用程序,而無需編寫大量平台特定的代碼。我將學習和深入研究Flutter的方方面面。從基礎知識到高級技巧,從UI設計到性能優化,歡飲關注一起討論學習,共同進入Flutter的精彩世界!