什麼是 BlobFuse? - BlobFuse2
BlobFuse 是 Azure Blob 儲存體的虛擬檔案系統驅動程式。 使用 BlobFuse 透過 Linux 檔案系統存取現有的 Azure 區塊 Blob 資料。 不支援分頁 Blob。
關於 BlobFuse2 開放原始碼專案
BlobFuse2 是開放原始碼專案,使用 libfuse 開放原始碼程式庫 (fuse3) 來與 Linux FUSE 核心模組通訊。 BlobFuse2 使用 Azure 儲存體 REST API 來實作檔案系統作業。
開放原始碼 BlobFuse2 專案位於 GitHub 上:
授權
BlobFuse2 專案根據 MIT 授權獲得授權。
功能
BlobFuse2 功能的完整清單位於 BlobFuse2 讀我檔案中。 以下是您可以使用 BlobFuse2 執行的一些重要工作:
- 在 Linux 上掛接 Azure Blob 儲存體 容器或 Azure Data Lake Storage 文件系統。 (BlobFuse2 支援具有一般命名空間或已設定階層命名空間的儲存體帳戶。)
- 使用基本的檔案系統作業,例如
mkdir
、opendir
、readdir
、rmdir
、open
、read
、create
、write
、close
、unlink
、truncate
、stat
和rename
。 - 使用本地檔案快取以改善後續存取時間。
- 使用 BlobFuse2 健康情況監視器取得掛接活動和資源使用量的見解。
BlobFuse2 中的其他重要功能包括:
- 串流以支援讀取和寫入大型檔案
- 平行下載和上傳以改善大型檔案的存取時間
- 多次裝載至相同的容器以處理唯讀工作負載
重要
如果您使用 2.2.0、2.2.1 或 2.3.0 版,請避免使用 Block-cache
模式,並切換至 file-cache
模式,直到修正已知問題為止。
BlobFuse v1 中的 BlobFuse2 增強功能
與 BlobFuse v1 相比,在多使用者情節下,BlobFuse2 的功能支援更多,效能更高。 如需詳盡的改善功能清單,請參閱 BlobFuse2 讀我檔案。 以下是 BlobFuse v1 中的 BlobFuse2 增強功能摘要:
- 改善的快取
- 透過新的 Azure CLI 命令提供更多管理支援
- 更多記錄支援
- 新增大型檔案的寫入串流 (先前僅支援唯讀串流)
- 全新 BlobFuse2 狀況監控可協助您取得掛接活動和資源使用量的深入解析
- 現有 BlobFuse v1 使用者的相容性和升級選項
- 版本檢查和升級提示
- 支援組態檔加密
請參閱 BlobFuse v1 中 BlobFuse2 效能增強功能清單。
對於 BlobFuse v1 使用者
BlobFuse2 提供的增強功能是升級和移轉至 BlobFuse2 的令人難以抗拒的理由。 如果您尚未準備好移轉,您可以使用 BlobFuse2,搭配您在 BlobFuse v1 使用的相同設定選項和 Azure CLI 參數來掛接 Blob 容器。
BlobFuse2 移轉指南提供相容性和移轉現有工作負載所需的一切詳細資料。
支援
Microsoft 支援 BlobFuse2,但必須是在規定的限制內使用。 如果您遇到問題,請在 GitHub 上回報。
限制
BlobFuse2 只是將要求轉譯成 Blob REST API,不保證 100% 合乎 POSIX 的規範。 例如,重新命名作業在 POSIX 中是不可部分完成,但在 BlobFuse2 中並非如此。
請參閱原生檔案系統與 BlobFuse2 之間差異的完整清單。
Linux 檔案系統與 BlobFuse2 之間的差異
在許多方面,您可以像原生 Linux 檔案系統一樣,使用 BlobFuse2 掛接的儲存體。 虛擬目錄配置同樣以斜線 (/
) 作為分隔符號。 mkdir
、opendir
、readdir
、rmdir
、open
、read
、create
、write
、close
、unlink
、truncate
、stat
和 rename
的基本檔案系統作業與 Linux 檔案系統中的作業相同。
BlobFuse2 與 Linux 檔案系統在某些方面有所不同:
Readdir 的硬式連結計數:
基於效能考量,BlobFuse2 不會正確報告目錄內的硬式連結。 空目錄的硬式連結數目傳回 2。 不論實際硬式連結數目為何,非空目錄的數目一律傳回 3。
非不可部分完成的重新命名:
Azure Blob 儲存體不支援不可部分完成的重新命名作業。 單一檔案重新命名實際上是兩項作業:複製,接著刪除正本。 目錄重新命名會遞迴列舉目錄中的所有檔案,並重新命名每個檔案。
特殊檔案:
BlobFuse2 僅支援目錄、一般檔案和符號連結。 不支援特殊檔案,例如裝置檔案、管道和通訊端。
mkfifo:
BlobFuse2 不支援建立 fifo。 嘗試此動作會導致「未實作函式」錯誤。
chown 和 chmod:
Data Lake Storage 記憶體帳戶支援每個物件許可權和 ACL,但一般命名空間 (FNS) 區塊 Blob 則不支援。 因此,對於裝載的區塊 Blob 容器,BlobFuse2 不支援
chown
和chmod
作業。 Data Lake Storage 支持作業。裝置檔案或管道:
BlobFuse2 不支援裝置檔案或管道的建立。
擴充屬性 (x-attrs):
BlobFuse2 不支援擴充屬性 (
x-attrs
) 作業。寫入串流:
大型檔案資料的讀取和寫入作業並行串流可能會產生無法預測的結果。 不支援從不同的執行緒同時寫入相同的 Blob。
資料完整性
檔案快取在讀取和寫入 Blob 儲存體檔案系統掛接的資料完整性方面扮演重要角色。 我們建議將串流模式用於大型檔案,其支援對讀取和寫入作業進行串流處理。 BlobFuse2 會快取記憶體中串流檔案的區塊。 若是不包含區塊的較小檔案,系統會將整個檔案儲存在記憶體中。 檔案快取是第二種模式。 我們建議將檔案快取用於不包含大型檔案的工作負載,例如當檔案完全儲存在磁碟上時。
BlobFuse2 支援讀取和寫入作業。 如果使用 BlobFuse2 的其他 API 或其他掛接將資料寫入儲存體,則不保證持續同步。 考量到資料完整性,建議多個來源不要修改相同的 Blob,特別是同時修改。 如果一或多個應用程式嘗試同時寫入相同的檔案,可能無法預期結果。 根據多個寫入作業的時機及各自的作業新鮮度而定,結果可能是後來的寫入成功,而先前的寫入失敗,或更新的檔案整體上未達到理想狀態。
磁碟上的檔案快取
當檔案是寫入作業的對象時,資料會先保存,以在本地磁碟上快取。 只有在關閉檔案控制代碼之後,資料才會寫入 Blob 儲存體。 如果嘗試將資料保存到 Blob 儲存體時發生問題,就會出現錯誤訊息。
串流
對於讀取和寫入作業期間的串流,系統會在讀取或更新資料區塊時將其快取在記憶體中。 當檔案關閉或緩衝區填滿已變更區塊時,更新會排清至 Azure 儲存體。
支援從多個同時執行緒讀取相同的 Blob。 不過,同時寫入作業可能會導致非預期的檔案資料結果,包括資料遺失。 支援執行同時讀取作業和單一寫入作業,但從某些執行緒讀取中的資料可能不是最新的。
權限
以預設選項掛接容器時,所有檔案會取得 770 權限,而且只有執行掛接的使用者才能存取所有檔案。 若要允許所有使用者存取 BlobFuse2 掛接,請使用 --allow-other
選項掛接 BlobFuse2。 您也可以在 YAML 設定檔中設定此選項。
如先前所述, chown
Data Lake Storage 支援 和 chmod
作業,但不支援 FNS 區塊 Blob。 針對掛接的 FNS 區塊 Blob 容器執行 chmod
作業會傳回成功訊息,但作業實際上不會成功。
功能支援
下表說明如何在您的帳戶中支援這項功能,以及啟用特定功能時,對此支援造成的影響。
Storage account type | Blob 儲存體 (預設支援) | Data Lake Storage 1 | 網路檔案系統 (NFS) 3.0 1 | SSH 檔案傳輸通訊協定 (SFTP) 1 |
---|---|---|---|---|
標準一般用途 v2 | ||||
進階區塊 Blob |
1 Data Lake Storage、NFS 3.0 通訊協定和 SFTP 支援都需要已啟用階層命名空間的記憶體帳戶。