在這裏插入圖片描述

這篇來詳細介紹一下 Android 系統中的 ext4 文件系統

雖然 Android 設備種類繁多,但 ext4 長期以來一直是其系統分區和數據分區的主流和默認文件系統,直到近年來 F2FS 在部分用户分區上開始替代它。

一、什麼是 ext4?

ext4,全稱為 第四代擴展文件系統,是 Linux 操作系統上 ext 文件系統家族的第四個版本。它是 ext3 的直接繼承者,旨在提高性能、穩定性和存儲容量限制。

  • 開發者:由 Theodore Ts‘o(Linux 文件系統領域的核心開發者之一)領導開發。
  • 目標:在保持與 ext3 高度向前/向後兼容的同時,突破其技術和性能瓶頸。
  • 狀態:自 Linux 內核 2.6.28 起被穩定支持,併成為絕大多數 Linux 發行版的默認文件系統。Android 基於 Linux 內核,自然繼承了這一成熟的技術。

二、ext4 的主要技術特性

要理解為什麼 Android 選擇 ext4,需要了解其核心特性:

  1. 大文件系統支持

    • 支持最大 1 EB 的文件系統(1 EB = 1024 PB, 1 PB = 1024 TB)。
    • 支持最大 16 TB 的單個文件。
    • 這對於手機存儲來説幾乎是無限的,完全滿足需求。
  2. Extents 分配機制(關鍵特性)

    • 這是 ext4 相對於 ext3 最重要的性能改進。
    • ext3 使用間接塊映射:對於大文件,需要一層層地查找數據塊的位置,效率低下,容易產生碎片。
    • ext4 使用 Extents:一個 Extent 是一系列連續的物理塊的集合。它用一個結構(起始塊地址 + 長度)來描述一大片連續的數據,大大減少了元數據量,提高了大文件的讀寫效率,減少了碎片。
  3. 日誌功能(Journaling)

    • 目的:確保文件系統在發生意外(如突然斷電)時的一致性
    • 工作原理:在真正將數據寫入磁盤之前,先將即將執行的操作(元數據,有時包括數據本身)記錄到一個專門的“日誌”區域。如果操作中途斷電,系統重啓後可以根據日誌快速恢復到一致狀態,而不需要漫長的 fsck 磁盤檢查。
    • 模式
      • journal:記錄所有元數據和文件數據,最安全,但性能開銷最大。
      • orderedAndroid 默認):只保證元數據日誌,但在寫元數據之前,會先寫入相關的文件數據。這是安全性和性能的良好平衡。
      • writeback:只記錄元數據,不保證文件數據的寫入順序。性能最高,但安全性最低。
  4. 預分配與延遲分配

    • 延遲分配:當應用程序寫入文件時,文件系統會延遲決定將數據塊分配到磁盤的哪個物理位置,直到數據被刷入磁盤之前。這允許文件系統智能地選擇更連續的塊,從而優化佈局、減少碎片
  5. 多塊分配

    • 與延遲分配配合,一次調用可以分配多個數據塊,而不是像 ext3 那樣一次一塊,進一步減少了碎片和元數據開銷。
  6. 更快的文件系統檢查(e2fsck)

    • 由於引入了“組描述符校驗和”等特性,e2fsck 檢查 ext4 文件系統的速度比檢查 ext3 快得多。
  7. 持久預分配

    • 應用程序(如視頻錄製軟件)可以預先為文件分配連續的磁盤空間,避免在錄製過程中因空間不足而中斷,也能保證寫入性能。

三、ext4 在 Android 中的應用

在典型的 Android 設備中,存儲空間被劃分為多個分區,ext4 常用於以下關鍵分區:

分區名稱 掛載點 內容 使用 ext4 的原因
/system /system 操作系統本身、預裝應用、底層庫 只讀。要求穩定、可靠。ext4 的成熟性和可靠性是首選。
/vendor /vendor 硬件抽象層、芯片廠商提供的驅動 同上,通常是隻讀的。
/data /data 用户數據、已安裝的應用、設置 讀寫頻繁。需要高性能和強大的日誌功能來應對頻繁的應用安裝、卸載和數據寫入,防止數據損壞。
/cache /cache 系統更新、臨時文件 讀寫,但對持久性要求不高。

一個重要的變化:F2FS 的引入

儘管 ext4 非常優秀,但它最初是為機械硬盤設計的。對於使用 eMMCUFS 閃存作為存儲的移動設備,其特性與機械硬盤不同。因此,三星和華為等公司與社區共同開發了 F2FS

  • F2FS 是一種專為基於閃存的存儲設備設計的文件系統。
  • 它在隨機寫入性能上通常優於 ext4,這有助於改善應用安裝速度、文件解壓等場景的體驗。
  • 因此,在現代 Android 設備中,/data 分區/cache 分區 越來越多地使用 F2FS,而 /system/vendor 通常仍保持為 ext4,因為它們是隻讀的,不需要 F2FS 的寫入優勢。

四、ext4 的優缺點(在 Android 語境下)

優點:

  1. 極其成熟穩定:經過長期、廣泛的測試,數據可靠性高,是“不會出錯”的安全選擇。
  2. 優秀的順序讀寫性能:對於大文件的連續讀寫速度很快。
  3. 強大的日誌保障ordered 模式在性能和數據安全之間取得了很好的平衡,非常適合作為系統分區。
  4. 良好的向前/向後兼容:與 ext3 兼容性好,便於系統升級和工具鏈統一。

缺點:

  1. 隨機寫入性能不如 F2FS:這是其最大的短板。ext4 的日誌機制和塊分配策略在應對大量小文件隨機寫入時,會產生更多的開銷和碎片,導致性能下降。這在應用頻繁安裝卸載時比較明顯。
  2. 不是為閃存設計:沒有像 F2FS 那樣考慮閃存的特性(如寫放大、垃圾回收),長期使用後性能衰減可能比 F2FS 更明顯。
  3. 碎片化:雖然 Extents 機制大大改善了碎片問題,但長期使用後仍然會產生碎片,影響性能。

五、總結

ext4 是 Android 生態系統的基石文件系統。它憑藉其卓越的穩定性、可靠性和在順序讀寫方面的優秀性能,長期佔據着 Android 系統分區的統治地位。

雖然專為閃存設計的 F2FS 正在讀寫最頻繁的用户數據分區(如 /data)上逐漸取代 ext4,以提供更好的日常使用流暢度,但 ext4 在只讀的系統分區中依然不可動搖。

可以這樣概括:

  • 追求極致穩定和兼容性:ext4 是王者。
  • 追求更優的寫入性能和閃存壽命:F2FS 是趨勢。

理解 ext4 有助於我們洞悉 Android 系統底層存儲的工作原理,以及為什麼在系統更新、刷機等操作中,對分區進行“擦除和格式化”是一個如此關鍵的步驟。


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