這個頁面將概述 Cloud Storage FUSE,這是一種 FUSE 轉接器,可讓您掛接及存取 Cloud Storage 值區做為本機檔案系統,因此應用程式可以使用標準檔案系統語意讀取及寫入值區中的物件。
本說明文件一律反映 Cloud Storage FUSE 的最新版本。如需最新版本詳細資料,請參閱 GitHub 上的 Cloud Storage FUSE 版本。
總覽
Cloud Storage FUSE 是由 Google 支援的開放原始碼產品。Cloud Storage FUSE 會使用 FUSE 和 Cloud Storage API,將 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 的運作原理是將物件儲存名稱轉換成類似目錄的結構,並將物件名稱中的斜線字元 (/
) 解譯為目錄分隔符。具有相同共用前置字串的物件會被視為同一目錄中的檔案,這樣一來,應用程式就能與掛接的值區 (如檔案系統) 互動。您也可以使用階層式命名空間,將物件整理成邏輯檔案系統結構,方便您將物件整理到資料夾中。
Cloud Storage FUSE 可以在連結 Cloud Storage 的任何地方執行,包括 Google Kubernetes Engine、Compute Engine VM 或內部部署系統。
Cloud Storage FUSE 用途
如果應用程式需要檔案系統語意,且 Cloud Storage 具有適用於該應用程式的效能和擴充性,則非常適合使用 Cloud Storage FUSE。舉例來說,Cloud Storage FUSE 適用於機器學習 (ML) 專案,因為這項服務可直接在 Cloud Storage 中儲存資料、模型、檢查點和記錄。詳情請參閱「適用於 ML 工作負載的 Cloud Storage FUSE」。
適用於機器學習的 Cloud Storage FUSE
開發人員通常會選擇 Cloud Storage FUSE,將機器學習訓練和模型資料儲存為 Cloud Storage 中的物件,並存取這些資料。Cloud Storage FUSE 在開發 ML 專案時具有多項優點:
Cloud Storage FUSE 可讓您將 Cloud Storage bucket 掛接為本機檔案系統,因此應用程式可以使用標準檔案系統語意存取訓練和模型資料。也就是說,使用 Cloud Storage 儲存 ML 資料時,您可以避免重新編寫或重構應用程式程式碼的費用。
從訓練到推論,Cloud Storage FUSE 都能讓您使用 Cloud Storage 內建的高擴充性、效能和成本效益,大規模執行 ML 工作負載。
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
Cloud Storage FUSE 與 Google Cloud 產品的整合
Cloud Storage FUSE 可與下列產品整合: Google Cloud
產品 | Cloud Storage FUSE 的整合方式 |
---|---|
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 中的資料做為已掛接的檔案系統存取。詳情請參閱「準備訓練程式碼」。 |
Vertex AI Workbench | Vertex AI Workbench 執行個體內建 Cloud Storage 整合功能,可讓您在 JupyterLab 介面中瀏覽值區,並使用 Cloud Storage 中的相容檔案。透過 Cloud Storage 整合功能,您可以存取執行個體在與 Vertex AI Workbench 執行個體相同的專案中,有權存取的所有 Cloud Storage 值區和檔案。如要設定整合功能,請參閱 Vertex AI Workbench 操作說明,瞭解如何在 JupyterLab 中存取 Cloud Storage 值區和檔案。 |
深度學習 VM 映像檔 | Cloud Storage FUSE 已預先安裝在深度學習 VM 映像檔中。 |
深度學習容器 | 如要為 Deep Learning Containers 掛接 Cloud Storage bucket,可以使用 Cloud Storage FUSE CSI 驅動程式 (建議使用),也可以安裝 Cloud Storage FUSE。 |
Batch | 建立及執行 Batch 工作時,您可以使用 Cloud Storage FUSE 將 Cloud Storage bucket 掛接為儲存空間磁碟區。您可以在工作定義中指定 bucket,工作執行時,bucket 會自動掛接到工作專用的 VM。 |
Cloud Run | Cloud Run 可讓您將 Cloud Storage bucket 掛接為磁碟區,並在容器檔案系統中將 bucket 內容顯示為檔案。如要設定磁碟區掛接,請參閱「掛接 Cloud Storage 磁碟區」。 |
Cloud Composer | 建立環境時,Cloud Composer 會儲存原始碼,將工作流程及其依附元件存放在 Cloud Storage 值區的特定資料夾中。Cloud Composer 會使用 Cloud Storage FUSE,將 bucket 中的資料夾對應至 Cloud Composer 環境中的 Airflow 元件。 |
叢集工具包 | 您可以使用 Cluster Toolkit 建立 Cloud Storage bucket,或將其掛接為檔案系統。 您可以使用適當的模組,在藍圖 YAML 檔案中指定 bucket。部署作業執行時,系統會自動建立或掛接該值區。 |
Dataflow | 使用 Cloud Storage FUSE 將 Cloud Storage 值區直接掛接到工作站檔案系統時,Dataflow 底層的 Apache Beam 管道程式碼可使用標準檔案系統語意,直接存取 Cloud Storage 中的檔案。如果使用 Dataflow 執行 AI/機器學習工作,且工作涉及大型資料集和需要存取檔案的軟體,這項功能就特別實用。 |
如需與 Cloud Storage 整合的 Google Cloud 產品清單,請參閱與 Google Cloud 服務和工具整合。
快取
Cloud Storage FUSE 提供四種快取類型,有助於提升效能及降低成本:檔案快取、狀態快取、類型快取和清單快取。如要進一步瞭解這些快取,請參閱快取總覽。
目錄語意
Cloud Storage 提供一般命名空間 bucket,以及啟用階層命名空間的 bucket。根據預設,Cloud Storage FUSE 可以推斷已啟用階層式命名空間的 bucket 中明確定義的目錄 (也稱為「資料夾」),但無法推斷平面命名空間 bucket 中隱含定義的目錄。隱含定義的目錄包括模擬資料夾和代管資料夾。
舉例來說,假設您掛接名為 my-bucket
的值區,其中包含名為 my-directory/my-object.txt
的物件,而 my-directory/
是模擬資料夾。在值區掛接點執行 ls
時,根據預設,Cloud Storage FUSE 無法存取模擬目錄 my-bucket/my-directory/
,也無法存取其中的物件 my-object.txt
。如要讓 Cloud Storage FUSE 推斷模擬資料夾和其中的物件,請在掛接一般命名空間 bucket 時,將 --implicit-dirs
選項納入 gcsfuse mount
指令。如要進一步瞭解 --implicit-dirs
選項,請參閱 Cloud Storage FUSE 指令列說明文件。
如要使用檔案系統儲存及存取資料,請使用已啟用階層式命名空間的值區。如要瞭解如何建立這類值區,請參閱「建立已啟用階層結構式命名空間的值區」。
如要進一步瞭解目錄語意,包括如何使用隱含定義的目錄掛接值區,請參閱 GitHub 文件中的「檔案和目錄」。
重試策略
根據預設,Cloud Storage FUSE 對 Cloud Storage 提出的要求失敗時,系統會以指數輪詢方式重試,直到達到指定的輪詢時間上限為止 (預設值為 30s
,也就是 30 秒)。一旦延遲時間超過指定上限,重試作業就會繼續進行,但延遲時間會設為指定上限。您可以在 gcsfuse
呼叫中使用 --max-retry-sleep
選項,指定退避時間長度。
如要進一步瞭解 --max-retry-sleep
選項,請參閱 gcsfuse
指令列說明文件。
停滯上傳作業的重試策略
系統會分塊上傳大型檔案寫入內容。為協助減少尾端寫入延遲,如果區塊層級的寫入作業停滯或失敗,Cloud Storage FUSE 會在 10 秒後嘗試重試。每個停滯的區塊最多會重試四次。
與 Cloud Storage 作業相關聯的 Cloud Storage FUSE 作業
使用 Cloud Storage FUSE 執行作業時,您也會執行與 Cloud Storage FUSE 作業相關聯的 Cloud Storage 作業。下表說明常見的 Cloud Storage FUSE 指令和相關的 Cloud Storage JSON API 作業。如要在 gcsfuse
指令中將 --log-severity
旗標設為 TRACE
,即可顯示 Cloud Storage FUSE 作業的相關資訊。
指令 | 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 定價
Cloud Storage FUSE 可以免費使用,但與任何其他 Cloud Storage 介面一樣,進出 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 檔案系統產品,請參閱 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 值區,且兩個以上的掛接點同時嘗試寫入同一個 Cloud Storage 物件,系統會儲存第一個完成寫入作業並成功將變更排清至物件的掛接點。物件修改後,如果其他掛接點未更新本機檔案描述元,嘗試儲存編輯內容時,會因前提條件檢查而發生
syscall.ESTALE
錯誤。為確保資料寫入作業一致,強烈建議不要讓多個來源修改同一個物件。請注意,多位讀者可以存取同一或不同物件,多位寫入者也可以同時修改同一儲存空間中的不同物件。系統支援從相同掛接點並行寫入相同 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 中的目錄,請參閱目錄語意。
- 執行檔案修補 (或就地覆寫) 的工作負載: 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 不正式支援搭配啟用物件版本管理功能的值區使用。如果嘗試搭配使用 Cloud Storage FUSE 與已啟用物件版本管理功能的值區,可能會產生無法預測的行為。
- 檔案轉碼:
中繼資料含有
content-encoding: gzip
的物件:如果 Cloud Storage FUSE 掛接的目錄中含有這類物件,系統不會對其進行解壓縮轉碼。而是會以與儲存在值區中相同的方式壓縮物件。舉例來說,使用
gcloud storage cp
指令搭配--gzip-local
標記上傳至值區的 1000 位元組檔案,可能會變成 60 位元組 (實際壓縮大小取決於內容和 gcloud CLI 使用的 gzip 實作方式),成為 Cloud Storage 物件。如果使用 gcsfuse 掛接 bucket,且相應檔案列於掛接目錄或從該目錄讀取,系統會將檔案大小回報為 60 個位元組,而檔案內容則是原始 1000 個位元組內容的壓縮版本。這與使用
gcloud storage cp gs://bucket/path /local/path
下載的情況不同,後者會進行解壓縮轉碼:在gcloud
指令中,內容會在下載期間自動解壓縮,並提供原始未壓縮的內容。 - 資料保留政策:Cloud Storage FUSE 不支援寫入設有資料保留政策的值區。如果您嘗試寫入設有保留政策的 bucket,寫入作業會失敗。
Cloud Storage FUSE 支援從設有保留政策的值區讀取物件,但必須在掛接值區時傳遞
-o RO
標記,將值區掛接為Read-Only
。 - 本機儲存:新增或修改後的物件將完整儲存在本機暫存檔案中,直到物件關閉或同步處理為止。處理大型檔案時,請確定您有足夠的本機儲存容量可以儲存檔案的暫時性副本,尤其是在使用 Compute Engine 執行個體時。詳情請參閱 Cloud Storage FUSE GitHub 說明文件中的 README。
- 檔案控制代碼限制:Linux 核心預設的開放檔案控制代碼限制為 1,024 個。使用 Cloud Storage FUSE 做為伺服器來處理多個並行連線時,可能會超出這項限制。為避免發生問題,請確保連線至單一主機的並行連線數維持在上限以下,並考慮提高上限。這項功能在許多情況下都非常重要,例如使用 Cloud Storage FUSE 掛接點提供網路內容、代管網路附加儲存裝置 (NAS),或代管檔案傳輸通訊協定 (FTP) 伺服器。透過 Cloud Storage FUSE 掛接提供 Cloud Run 上的網頁內容時,每個執行個體的並行要求上限會限制為 1,000 以下。
rsync
限制:Cloud Storage FUSE 的檔案系統延遲會影響rsync
,因為此指令一次只會讀取和寫入一個檔案。如要平行將多個檔案傳輸至值區或從值區傳輸檔案,請執行gcloud storage rsync
,使用 Google Cloud CLI。詳情請參閱rsync
說明文件。- 列出作業限制:列出已掛接值區中的所有物件時 (例如執行
ls
),Cloud Storage FUSE 會在 Cloud Storage 上呼叫 Objects: list API。API 會將結果分頁,也就是說,視值區中的物件數量而定,Cloud Storage FUSE 可能需要發出多項呼叫,這會導致列出作業耗費大量資源且速度緩慢。
已知問題
如需 Cloud Storage FUSE 的已知問題清單,請參閱 GitHub。
取得支援
如要取得支援、提出一般問題及要求新功能,請使用 Google Cloud的官方支援管道。你也可以在 GitHub 提報問題,取得支援服務。
如需常見問題的解決方案,請參閱 Cloud Storage FUSE GitHub 說明文件中的疑難排解。
後續步驟
瞭解如何安裝 gcsfuse CLI。
完成快速入門,瞭解 Cloud Storage FUSE。
瞭解如何掛接儲存空間。
瞭解如何使用
gcsfuse
指令列工具或設定檔,設定 Cloud Storage FUSE 的行為。