Cloud Storage FUSE

Cloud Storage FUSE 是 FUSE 轉接器,可讓您將 Cloud Storage bucket 掛接為本機檔案系統並加以存取,以便應用程式使用標準檔案系統語意,在 bucket 中讀取及寫入物件。本文概略介紹 Cloud Storage FUSE,包括運作方式、整合和限制。

本文件反映 Cloud Storage FUSE 的最新版本。如要進一步瞭解最新版本,請參閱 GitHub 上的 Cloud Storage FUSE 版本。

Cloud Storage FUSE 是 Google 支援的開放原始碼產品。Cloud Storage FUSE 使用 FUSE 和 Cloud Storage API,將 bucket 清楚地公開為檔案系統上本機掛接的資料夾。

如要使用 Cloud Storage FUSE,請在搭載相容作業系統 (例如 Linux 或 Windows Subsystem for Linux) 的機器上安裝 Cloud Storage FUSE 套件,確保 Google Cloud 驗證和權限正確無誤,然後執行 gcsfuse 指令,將特定 Cloud Storage bucket 掛接至本機目錄。

Cloud Storage FUSE 與其他 Google Cloud 服務整合。舉例來說,Cloud Storage FUSE CSI 驅動程式可讓您使用 Google Kubernetes Engine (GKE) API,將 bucket 當做磁碟區使用,以便在 Kubernetes Pod 中讀取及寫入 Cloud Storage。如要進一步瞭解其他整合功能,請參閱「整合」。

Cloud Storage FUSE 的運作方式

Cloud Storage FUSE 的運作方式是將物件儲存庫名稱轉譯為類似目錄的結構,並將物件名稱中的斜線字元 (/) 解讀為目錄分隔符。具有相同通用前置字串的物件會視為同一目錄中的檔案,讓應用程式能與掛接的 bucket 互動,就像與檔案系統互動一樣。您也可以使用階層命名空間,將物件整理成邏輯檔案系統結構,以便將物件整理至資料夾。

只要能連線至 Cloud Storage,無論是 Google Kubernetes Engine、Compute Engine VM 或地端部署系統,都能執行 Cloud Storage FUSE。

Rapid Bucket 支援

從 3.7.1 版開始,Cloud Storage FUSE 支援 Rapid Bucket,並提供最佳化讀取路徑,可加快資料存取速度並提升效能。

Cloud Storage FUSE 適用於機器學習

如果應用程式需要檔案系統語意,且 Cloud Storage 具備合適的效能和擴充性特性,Cloud Storage FUSE 就是理想的選擇。舉例來說,Cloud Storage FUSE 適合用於機器學習 (ML) 專案,因為可直接在 Cloud Storage 儲存資料、模型、檢查點和記錄。詳情請參閱「適用於機器學習工作負載的 Cloud Storage FUSE」。

開發人員通常會選擇 Cloud Storage FUSE,將機器學習訓練和模型資料儲存為 Cloud Storage 中的物件,並加以存取。Cloud Storage FUSE 為開發機器學習專案帶來多項優勢:

  • Cloud Storage FUSE 可讓您將 Cloud Storage bucket 掛接為本機檔案系統,以便應用程式使用標準檔案系統語意存取訓練和模型資料。也就是說,使用 Cloud Storage 儲存機器學習資料時,您不必花費成本重寫或重構應用程式程式碼。

  • 從訓練到推論,Cloud Storage FUSE 都能讓您運用 Cloud Storage 內建的高擴充性、效能和成本效益,大規模執行機器學習工作負載。

  • Cloud Storage FUSE 可讓運算資源直接存取 Cloud Storage 中的資料,因此您不必將訓練資料下載至運算資源,就能快速啟動訓練工作。

詳情請參閱「Cloud Storage FUSE 支援的架構、作業系統和架構」。

框架、作業系統和架構

Cloud Storage FUSE 已通過下列架構驗證:

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE 支援下列作業系統和架構:

  • Rocky Linux 8.9 以上版本

  • Ubuntu 18.04 以上版本

  • Debian 10 以上版本

  • CentOS 7.9 以上版本

  • RHEL 7.9 以上版本

  • SLES 15 以上版本

  • x86_64

  • ARM64

與其他 Google Cloud 產品整合

Cloud Storage FUSE 與下列 Google Cloud 產品整合:

產品 Cloud Storage FUSE 的整合方式
AI Hypercomputer

Cloud Storage FUSE 可讓您將 bucket 掛接為本機檔案系統,並以比檔案系統服務更具成本效益的方式擴充資料儲存空間,因此建議用於 AI 和機器學習用途。詳情請參閱「儲存空間服務」。

Batch

建立及執行批次工作時,您可以使用 Cloud Storage FUSE,將 Cloud Storage bucket 掛接為儲存空間磁碟區。您可以在工作定義中指定 bucket,系統就會在工作執行時,自動將 bucket 掛接至工作的 VM。

Managed Service for Apache Airflow

建立環境時,Managed Service for Apache Airflow 會將工作流程的原始碼及其依附元件,儲存在 Cloud Storage bucket 的特定資料夾中。Managed Service for Apache Airflow 會使用 Cloud Storage FUSE,將 bucket 中的資料夾對應至 Managed Service for Apache Airflow 環境中的 Airflow 元件。

Cloud Run

Cloud Run 可讓您將 Cloud Storage bucket 掛接為磁碟區,並將 bucket 內容顯示為容器檔案系統中的檔案。如要設定磁碟區掛接,請參閱「掛接 Cloud Storage 磁碟區」。

Cluster Toolkit

Cluster Toolkit 可讓您建立 Cloud Storage bucket,或將其掛接為檔案系統。您可以使用適當的模組,在藍圖 YAML 檔案中指定 bucket。部署作業執行時,系統會自動建立或掛接 bucket。

Dataflow

使用 Cloud Storage FUSE 將 Cloud Storage bucket 直接掛接至 worker 檔案系統時,Dataflow 底層的 Apache Beam 管道程式碼可使用標準檔案系統語意,直接存取 Cloud Storage 中的檔案。使用 Dataflow 執行 AI/機器學習工作時,如果涉及大型資料集和需要存取檔案的軟體,這項功能就特別實用。

深度學習容器

如要為深度學習容器掛接 Cloud Storage bucket,可以使用 Cloud Storage FUSE CSI 驅動程式 (建議做法),或安裝 Cloud Storage FUSE。

深度學習 VM 映像檔

Cloud Storage FUSE 已預先安裝深度學習 VM 映像檔。

Google Kubernetes Engine (GKE)

Cloud Storage FUSE CSI 驅動程式會管理 Cloud Storage FUSE 與 Kubernetes API 的整合,將 Cloud Storage bucket 當做磁碟區使用。您可以使用 Cloud Storage FUSE CSI 驅動程式,將 bucket 掛接為 Google Kubernetes Engine 節點上的檔案系統。

Vertex AI 訓練

在 Vertex AI 執行自訂訓練時,您可以透過掛接的檔案系統存取 Cloud Storage bucket 中的資料。詳情請參閱「使用 Cloud Storage FUSE 讀取及寫入 Cloud Storage 檔案」。

Vertex AI Workbench

Vertex AI Workbench 執行個體整合了 Cloud Storage,可讓您在 JupyterLab 介面中瀏覽值區,並處理 Cloud Storage 中的相容檔案。Cloud Storage 整合功能可讓您存取執行個體有權存取的所有 Cloud Storage bucket 和檔案,這些 bucket 和檔案與 Vertex AI Workbench 執行個體位於同一個專案。如要設定整合功能,請參閱 Vertex AI Workbench 操作說明,瞭解如何在 JupyterLab 中存取 Cloud Storage bucket 和檔案。

如要查看與 Cloud Storage 整合的 Google Cloud 產品清單,請參閱「與 Google Cloud 服務和工具整合」。

快取

Cloud Storage FUSE 提供三種快取類型,可提高效能並降低成本:檔案快取、統計資料快取和清單快取。如要進一步瞭解這些快取,請參閱「快取總覽」。

目錄語意

Cloud Storage 提供採用扁平命名空間的 bucket,以及啟用階層命名空間的 bucket。根據預設,Cloud Storage FUSE 可以推斷已啟用階層命名空間的 bucket 中明確定義的目錄 (也稱為資料夾),但無法推斷採用平面命名空間的 bucket 中隱含定義的目錄,包括模擬資料夾和代管資料夾。

「明確定義的目錄」是指在 Cloud Storage bucket 中,由專屬物件代表的資料夾。「隱含定義的目錄」是指在 Cloud Storage bucket 中沒有對應物件的目錄。

舉例來說,假設您掛接名為 my-bucket 的 bucket,其中包含名為 my-directory/my-object.txt 的物件,而 my-directory/ 是模擬資料夾。在 bucket 掛接點上執行 ls 時,Cloud Storage FUSE 預設無法存取模擬目錄 my-bucket/my-directory/,也無法存取其中的物件 my-object.txt。如要讓 Cloud Storage FUSE 推論模擬資料夾及其中的物件,請在掛接一維命名空間 bucket 時,在 gcsfuse mount 指令中加入 --implicit-dirs gcsfuse 選項或 implicit-dirs 設定檔欄位。

如需使用檔案系統儲存及存取資料,請使用已啟用階層命名空間的 bucket。如要瞭解如何建立這類 bucket,請參閱「建立已啟用階層命名空間的 bucket」。

如要進一步瞭解目錄語意,包括如何使用隱含定義的目錄掛接 bucket,請參閱 Cloud Storage FUSE GitHub 說明文件中的「檔案和目錄」。

Cloud Storage FUSE 重試策略

根據預設,Cloud Storage FUSE 會以指數輪詢方式重試失敗的 Cloud Storage 要求,直到達到指定的輪詢時間長度上限為止,預設值為 30s (30 秒)。如果輪詢時間超過指定的時間長度上限,系統會繼續以指定的時間長度上限重試。您可以在 gcsfuse mount 呼叫中使用 --max-retry-sleep 選項或 gcs-retries:max-retry-sleep 欄位,指定輪詢間隔時間。

停滯 GET 或 READ 要求的重試策略

使用 Cloud Storage FUSE 執行 GET 或 READ 要求時,系統會套用逾時時間。如果要求超過逾時時間,Cloud Storage FUSE 會取消要求,並使用指數輪詢演算法重試。

逾時時間是動態的,會根據過去成功或取消的 GET 或 READ 要求的第 99 個百分位數延遲時間計算,下限為 1.5 秒。這樣一來,系統只會重試最慢的 1% 要求,也就是超過第 99 個百分位數歷來延遲時間的要求。

上傳作業停滯時的重試策略

大型檔案寫入作業會分塊上傳。為縮短尾端寫入延遲時間,如果區塊層級寫入作業停滯或失敗,Cloud Storage FUSE 會在 10 秒後嘗試重試。每個停滯的區塊最多會重試四次。

與 Cloud Storage 作業相關聯的 Cloud Storage FUSE 作業

使用 Cloud Storage FUSE 執行作業時,也會執行與 Cloud Storage FUSE 作業相關聯的 Cloud Storage 作業。下表說明常見的 Cloud Storage FUSE 指令,以及相關聯的 Cloud Storage JSON API 作業。如要顯示 Cloud Storage FUSE 作業的相關資訊,請在 gcsfuse 指令中,將 --log-severity 選項或 logging:severity 欄位設為 TRACE。

指令 JSON API 作業
gcsfuse --log-severity=TRACE example-bucket mp Objects.list (用來檢查憑證)
cd mp 不適用
ls mp Objects.list("")
mkdir subdir

Objects.get("subdir")

Objects.get("subdir/")

Objects.insert("subdir/")

cp ~/local.txt subdir/

Objects.get("subdir/local.txt")

Objects.get("subdir/local.txt/")

Objects.insert("subdir/local.txt"),用來建立空物件

Objects.insert("subdir/local.txt"),寫入完成後關閉時執行

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

指標

Cloud Storage 提供深入指標,可協助您最佳化 Cloud Storage FUSE 效能和成本。如要進一步瞭解 Cloud Storage FUSE 的指標,請參閱「Cloud Storage FUSE 指標」。

安全性

Cloud Storage FUSE 會透過應用程式預設憑證套用 Google Cloud的標準驗證機制,藉此識別使用者或服務帳戶。bucket 內容的存取權由 Identity and Access Management 權限控管。本機系統權限可保護掛接點本身和任何本機快取的資料。

Cloud Storage FUSE 定價

Cloud Storage FUSE 可無須支付費用使用,但與其他 Cloud Storage 介面一樣,Cloud Storage FUSE 產生並傳送至 Cloud Storage 的儲存空間、中繼資料和網路 I/O 仍須付費。換句話說,Cloud Storage FUSE 執行的所有資料移轉和作業,都會對應至 Cloud Storage 移轉和作業,並據此收費。如要進一步瞭解常見的 Cloud Storage FUSE 作業,以及這些作業與 Cloud Storage 作業的對應關係,請參閱「作業對應」。

為避免產生意外費用,建議您預估使用 Cloud Storage FUSE 會產生多少 Cloud Storage 費用。舉例來說,如果您使用 Cloud Storage FUSE 儲存記錄檔,當數百或數千部機器同時積極清除記錄時,可能會快速產生費用。

如要瞭解儲存空間、網路用量和作業等費用,請參閱「Cloud Storage 定價」。

限制

雖然 Cloud Storage FUSE 具有檔案系統介面,但與後端的 NFS 或 CIFS 檔案系統不同。此外,Cloud Storage FUSE 不符合 POSIX 標準。如需 Google Cloud中的 POSIX 檔案系統產品,請參閱 Google Cloud Managed Lustre 或 Filestore。

使用 Cloud Storage FUSE 時,請注意其限制和語意,這些與 POSIX 檔案系統不同。請務必在 Cloud Storage FUSE 的功能範圍內使用。

限制和與 POSIX 檔案系統的差異

以下列出 Cloud Storage FUSE 的限制:

  • 中繼資料:Cloud Storage FUSE 將檔案上傳至 Cloud Storage 時,不會移轉物件中繼資料,但 mtime 和符號連結目標除外。也就是說,使用 Cloud Storage FUSE 上傳檔案時,無法設定物件中繼資料。如需保留物件中繼資料,建議使用 Google Cloud CLI、JSON API 或 Google Cloud 控制台上傳檔案。
  • 並行:如果設定多個掛接點來存取同一個 Cloud Storage bucket,且有兩個以上的掛接點嘗試同時寫入同一個 Cloud Storage 物件,系統會儲存第一個完成寫入作業並成功將變更寫入物件的掛接點。如果其他掛接點在物件修改後未更新本機檔案描述元,則在嘗試儲存編輯內容時,會因前置條件檢查而發生 syscall.ESTALE 錯誤。為確保資料寫入作業一致,強烈建議不要讓多個來源修改同一個物件。

    請注意,多位讀取者可以存取 bucket 內相同或不同的物件,多位寫入者也可以同時修改同一個 bucket 內的不同物件。系統支援從同一個掛接點同時寫入同一個 Cloud Storage 物件,行為與內建檔案系統類似。

  • 連結:Cloud Storage FUSE 不支援硬連結。
  • 檔案鎖定和檔案修補:Cloud Storage FUSE 不支援檔案鎖定或檔案修補。因此,請勿將版本管控系統存放區儲存在 Cloud Storage FUSE 掛接點,因為版本管控系統仰賴檔案鎖定和修補。此外,請勿將 Cloud Storage FUSE 當做檔案替代方案。
  • 語意:Cloud Storage FUSE 的語意與傳統檔案系統不同。舉例來說,系統不支援上次存取時間等中繼資料,且部分中繼資料作業 (例如重新命名目錄) 並非不可分割,除非您使用的 bucket 已啟用階層命名空間。如要查看 Cloud Storage FUSE 語意與傳統檔案系統語意之間的差異清單,請參閱 Cloud Storage FUSE GitHub 說明文件中的「Cloud Storage FUSE 語意」。如要瞭解 Cloud Storage FUSE 如何推論 Cloud Storage 中的目錄,請參閱「目錄語意」。
  • 執行檔案修補 (或就地覆寫) 的工作負載:Cloud Storage FUSE 一次只能將整個物件寫入 Cloud Storage,不提供修補機制。如果嘗試修補檔案,Cloud Storage FUSE 會重新上傳整個檔案。唯一的例外情況是,您可以將內容附加到 2 MB 以上檔案的結尾,Cloud Storage FUSE 只會重新上傳附加的內容。
  • 存取權:檔案授權由 Cloud Storage 權限控管。POSIX 樣式的存取控管功能無法運作。
  • 效能:Cloud Storage FUSE 的延遲時間遠高於本機檔案系統,因此不應做為儲存資料庫的後端。一次讀取或寫入一個小型檔案時,處理量可能會降低。使用較大的檔案或一次傳輸多個檔案,有助於提高處理量。
  • 可用性:使用 Cloud Storage FUSE 存取 Cloud Storage 時,有時可能會發生暫時性錯誤。建議您使用重試策略,重試失敗的作業。
  • 物件版本管理:Cloud Storage FUSE 並未正式支援與已啟用物件版本管理功能的 bucket 搭配使用。如果嘗試將 Cloud Storage FUSE 與已啟用物件版本管理功能的 bucket 搭配使用,可能會產生無法預測的行為。
  • 檔案轉碼:

    中繼資料含有 content-encoding: gzip 的物件:Cloud Storage FUSE 掛接目錄中的這類物件不會進行解壓縮轉碼。而是會以儲存在 bucket 中的相同方式,維持壓縮狀態。

    舉例來說,如果使用 gcloud storage cp 指令和 --gzip-local 旗標,將 1000 位元組的檔案上傳至 bucket,該檔案可能會變成 60 位元組 (實際壓縮大小取決於內容和 gcloud CLI 使用的 gzip 實作方式),成為 Cloud Storage 物件。如果使用 `gcsfuse` 掛接 bucket,並從掛接目錄列出或讀取對應的檔案,系統會傳回 60 位元組的大小,且內容是原始 1000 位元組內容的壓縮版本。

    這與使用 gcloud storage cp gs://bucket/path /local/path 進行下載的情況相反,後者會進行解壓縮轉碼:在 gcloud 指令中,內容會在下載期間自動解壓縮,並提供原始未壓縮的內容。

  • 資料保留政策:Cloud Storage FUSE 不支援寫入設有資料保留政策的值區。如果嘗試寫入具有保留政策的值區,寫入作業會失敗。

    Cloud Storage FUSE 支援從具有資料保留政策的 bucket 讀取物件,但掛接 bucket 時,必須傳遞 -o RO 旗標,將 bucket 掛接為 Read-Only。

  • 本機儲存空間:新增或修改的物件會完整儲存在本機暫存檔案中,直到關閉或同步為止。處理大型檔案時,請確保本機儲存空間足以容納檔案的暫存副本,尤其是使用 Compute Engine 執行個體時。詳情請參閱 Cloud Storage FUSE GitHub 說明文件中的 Cloud Storage FUSE README 總覽檔案。
  • 檔案控制代碼限制:Linux 核心預設限制為 1,024 個開啟的檔案控制代碼。如果使用 Cloud Storage FUSE 做為伺服器來處理多個並行連線,可能會超過這項限制。為避免發生問題,請確保單一主機的並行連線數量不超過上限,並考慮提高上限。這項功能在某些情況下非常重要,例如使用 Cloud Storage FUSE 掛接提供網路內容、代管網路附加儲存 (NAS),或代管檔案傳輸通訊協定 (FTP) 伺服器。從 Cloud Storage FUSE 掛接在 Cloud Run 上提供網路內容時,每個執行個體的並行要求數量上限不得超過 1,000 個。
  • rsync 限制:Cloud Storage FUSE 的檔案系統延遲時間會影響 rsync,因為該工具一次只能讀取及寫入一個檔案。如要同時將多個檔案傳輸至 bucket 或從 bucket 傳輸多個檔案,請使用 Google Cloud CLI 執行 gcloud storage rsync。詳情請參閱 rsync 說明文件。
  • 列出作業限制:列出已掛接 bucket 中的所有物件時 (例如執行 ls),Cloud Storage FUSE 會在 Cloud Storage 上呼叫 Objects: list API。API 會將結果分頁,因此 Cloud Storage FUSE 可能需要發出多個呼叫,具體取決於 bucket 中的物件數量,這可能會導致清單作業費用高昂且速度緩慢。

已知問題

如要查看 Cloud Storage FUSE 的已知問題清單,請參閱 GitHub 中的待處理 Cloud Storage FUSE 問題。

取得支援

您可以透過 Google Cloud的官方支援管道取得支援、提交一般問題,以及要求新功能。您也可以在 GitHub 回報問題,取得支援。

如需常見問題的解決方案,請參閱 Cloud Storage FUSE GitHub 說明文件中的「正式環境問題疑難排解」。

後續步驟