ZeroFS:用於 S3 相容儲存的日誌結構檔案系統

ZeroFS:用於 S3 相容儲存的日誌結構檔案系統

ZeroFS 將 S3 相容的物件儲存轉換為可使用的 POSIX 檔案系統或原始區塊裝置。透過使用日誌結構引擎,ZeroFS 讓使用者能將雲端 bucket 當作主要儲存,提供物件儲存的可擴展性與傳統檔案系統介面需求之間的橋樑。

架構與儲存引擎

ZeroFS 採用日誌結構方式管理 S3 相容 bucket 中的資料。寫入不會在原位改寫,而是以不可變的物件方式處理,並透過壓縮程序回收已刪除資料的空間。

引擎的關鍵技術特性包括:

  • 不可變段落:檔案資料以 32 KiB 的延伸區塊組織於不可變的段落物件中。獨立的中繼資料索引追蹤這些延伸區塊,確保檢查點與讀取副本維持對 bucket 的一致視圖。
  • 加密與壓縮:所有資料在上傳前使用 XChaCha20-Poly1305 加密。資料金鑰以 Argon2id 從密碼衍生後再進行包裝。加密前,資料會使用 zstd 或 lz4 壓縮;讀取時會偵測編解碼方式,允許在不遷移資料的情況下變更壓縮設定。
  • 快取:為減輕 S3 往返的高延遲(通常 50–300 ms),ZeroFS 實作可設定的記憶體與磁碟快取。從這些快取的暖讀可在微秒級返回。
  • TRIM 支援:檔案系統或 ZFS 池的 discard 指令會釋放相應的延伸區塊。之後的壓縮程序會重新打包活躍資料,並從 S3 刪除空的段落,以降低儲存成本。

存取協定與介面

ZeroFS 提供三種主要方式與後端儲存互動,全部在單一使用者空間程序中執行:

POSIX 檔案系統(NFS 與 9P)

  • NFS:允許從主要作業系統(macOS、Linux、Windows、BSD)以原生 NFS 支援掛載,無需客戶端軟體。
  • 9P:相較 NFS 更貼近 POSIX 語意。它包含一個捆綁的 FUSE 客戶端,允許在無 root 權限下掛載,並支援自動重新連線。

原始區塊裝置(NBD)

  • NBD(Network Block Device):將 bucket 作為原始區塊裝置提供。這些裝置可承載 ext4 檔案系統、ZFS 池或 VM 開機磁碟。可在執行時新增裝置而不需重新啟動伺服器。

高可用性與資料完整性

ZeroFS 實作多項功能以確保耐久性與一致性:

  • 誠實的 fsync:成功的 fsync 操作表示每筆已確認的寫入已在 S3 中持久化。若發生故障切換且未刷新寫入遺失,隨後的 fsync 會回傳錯誤,而非錯誤的成功。
  • 高可用性(HA):可選的備援實例透過相同的 bucket 追蹤領導者。備援保留領導者已確認但尚未刷新之寫入,允許在故障切換時自動接管,同時保留這些寫入。
  • 檢查點:具名檢查點允許在特定時間點捕捉檔案系統,並以唯讀方式開啟。
  • 讀取副本:多個唯讀實例可服務同一 bucket,會自動取得單一寫入者所做的變更。

驗證與測試

ZeroFS 透過廣泛的公開 CI 流程驗證其穩定性與效能:

  • POSIX 相容性:每次變更都會執行 pjdfstest 套件,以驗證權限、所有權、連結與重新命名行為。
  • 核心驗證:在 NFS、9P 與 FUSE 上執行 xfstests 套件(用於驗證 ext4 與 XFS)。
  • 端對端 ZFS 測試:CI 在 ZeroFS 區塊裝置上建立 ZFS 池,提取 Linux 核心原始碼樹,並執行完整的 scrub,以確保沒有校驗和錯誤。
  • 壓力測試:使用 stress-ng 以及平行的 Linux 核心編譯(make -j$(nproc))進行測試。
  • 模型檢查:使用 Jepsen 的 local-fs 套件驗證檔案系統模型對抗隨機操作歷史,包括崩潰復原測試。

社群見解與反對意見

雖然此專案展現高度技術抱負,Hacker News 上的社群討論指出了幾個需注意的點:

  • 延遲疑慮:部分使用者認為次毫秒寫入的說法具有誤導性,因為他們可能測量的是網路或核心延遲,而非資料在 S3 中持久化所需的時間。

"The sub-millisecond writes with data in S3 is false and impossible. If you look at the benchmark the fsync is not timed, so this is just the latency of either the network or in kernel file operations..."

  • 抽象層開銷:批評者指出,將 S3 抽象為檔案系統本身就效率低下,因為物件儲存與檔案系統的運作方式差異巨大。有些人建議讓應用程式「了解物件儲存」而非使用檔案系統抽象。

  • 效能 vs. Ceph:有使用者聲稱在本地 S3 環境下,ZeroFS 的效能遠低於 Ceph 等替代方案,特別是在小 I/O 操作上。

  • 中繼資料管理:有人詢問在故障切換期間中繼資料如何處理,是否已全部存放於 bucket 內以簡化高可用性。


摘要 ZeroFS 是一套日誌結構檔案系統,讓 S3 相容的 bucket 可透過 NFS 與 9P 作為 POSIX 檔案系統,或透過 NBD 作為原始區塊裝置使用,並內建加密與壓縮功能。

標題 ZeroFS:用於 S3 相容儲存的日誌結構檔案系統

Sources