使用 Cloud Storage FUSE 掛接 Cloud Storage bucket

Cloud Storage FUSE CLI 選項

將 bucket 掛接到本機檔案系統後,您就能透過標準檔案系統語意存取 Cloud Storage 中的資料。本文說明如何使用 Cloud Storage FUSE,將 Cloud Storage bucket 掛接至本機檔案系統。

事前準備

如要掛接及存取 bucket,請先完成下列工作。 您無法使用 Cloud Shell 掛接 Cloud Storage bucket。請改為在 Debian 或 Ubuntu 電腦的終端機中,執行本文提供的指令。

取得掛接及存取 bucket 的必要角色

如要在 bucket 中掛接、存取及執行讀寫作業,請要求 bucket 擁有者授予 bucket 的「Storage 物件使用者」(roles/storage.objectUser) 角色。

這個預先定義的角色具備讀取及寫入已掛接 bucket 的必要權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

  • storage.objects.create
  • storage.objects.delete
  • storage.objects.get
  • storage.objects.list
  • storage.objects.update

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

如需如何授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。

安裝 Cloud Storage FUSE

如果尚未安裝,請在電腦上安裝 Cloud Storage FUSE。

驗證 Cloud Storage FUSE 要求

如要驗證 Cloud Storage FUSE 對 Cloud Storage 的要求,請設定應用程式預設憑證。根據預設,Cloud Storage FUSE 會自動載入現有的應用程式預設憑證,不需進一步設定。

如要使用 Google Cloud CLI 設定應用程式預設憑證,請完成下列步驟:

  1. 安裝 Google Cloud CLI。

  2. 若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  3. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  4. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果您使用 Cloud Shell,則不需要執行這項操作。

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。

建立 Compute Engine 虛擬機器 (VM) 時,也可以使用其服務帳戶驗證 Cloud Storage FUSE 的存取權。

掛接 bucket

如要將 bucket 掛接至本機檔案系統,請在本機電腦上執行下列指令:

gcsfuse GLOBAL_OPTIONS BUCKET_NAME MOUNT_POINT

更改下列內容:

  • GLOBAL_OPTIONS 是可加入的選項,用於控制掛接設定方式。如要進一步瞭解選項和使用方式,請參閱 Cloud Storage FUSE CLI 參考資料或 Cloud Storage FUSE 設定檔頁面。

    • BUCKET_NAME 是要掛接的 bucket 名稱。例如,my-bucket。如要執行動態掛接,請從指令中排除 bucket 名稱。

    • MOUNT_POINT 是值區掛接的本機目錄。例如:/path/to/mount/point。

選用:如要建立隱含定義的目錄,方便您前往只包含深層巢狀物件的資料夾,請在 gcsfuse 指令中加入 --implicit-dirs 旗標。如要進一步瞭解隱含定義的目錄,請參閱「目錄語意」。

Cloud Storage FUSE 結束後,您可以在 bucket 掛接點上執行 ls,存取已掛接的 bucket。如果希望 Cloud Storage FUSE 保持在前台執行 (例如用於偵錯記錄檔),可以執行 gcsfuse 指令,並搭配 foreground 欄位或 --foreground 選項。

安裝範例

本節說明掛接儲存空間的各種範例指令。

靜態掛接

靜態掛接是指掛接特定儲存空間。舉例來說,如要將名為 my-bucket 的 bucket 掛接到 /path/to/mount/point 目錄,請執行下列指令:

mkdir /path/to/mount/point
gcsfuse my-bucket /path/to/mount/point

動態掛接

動態掛接是指將使用者有權存取的所有 bucket 掛接為子目錄。

執行動態掛接時,請勿在指令中加入 bucket 名稱。舉例來說,假設您有權存取名為 my-bucket-1、my-bucket-2 和 my-bucket-3 的 bucket。如要將所有 bucket 掛接到 /path/to/mount/point 目錄,請執行下列指令:

mkdir /path/to/mount/point
gcsfuse /path/to/mount/point

接著,您就能以子目錄的形式存取 bucket:

ls /path/to/mount/point/my-bucket-1/
ls /path/to/mount/point/my-bucket-2/
ls /path/to/mount/point/my-bucket-3/

無法從根掛接點列出動態掛接的 bucket。而是必須在清單作業中指定 bucket 名稱。

將 bucket 掛接為唯讀

如要將 bucket 掛接為唯讀,請將 -o ro 選項傳遞至 gcsfuse 指令。舉例來說,如要將名為 my-bucket 的 bucket 以唯讀方式掛接至目錄 /path/to/mount/point,請執行下列指令:

gcsfuse -o ro my-bucket  /path/to/mount/point

掛接 bucket 內的目錄

根據預設,Cloud Storage FUSE 會完整掛接 bucket,包括 bucket 的所有內容和目錄結構。如要掛接 bucket 中的特定目錄,請將 --only-dir 選項傳遞至 gcsfuse CLI,或 Cloud Storage FUSE 設定檔中的 only-dir 欄位。例如,如要將目錄 my-bucket/a/b 掛接至目錄 /path/to/mount/point,請執行下列指令:

gcsfuse --only-dir a/b my-bucket /path/to/mount/point

使用 Linux mount 指令掛接

Cloud Storage FUSE 安裝作業包含 Linux mount 指令可辨識的輔助程式,因此您可以使用 mount 指令掛接 bucket。如果您使用 Linux,必須從根目錄執行 mount 指令。舉例來說,下列指令會將名為 my-bucket 的 bucket 掛接至路徑 /path/to/mount/point:

sudo mount -t gcsfuse -o rw,user my-bucket /path/to/mount/point

使用 Linux mount 指令掛接時,gcsfuse 選項可做為 -o 選項的引數傳遞,但其中的連字號 (-) 應替換為底線 (_)。舉例來說,應使用 implicit_dirs,而非 implicit-dirs。

sudo mount -t gcsfuse -o implicit_dirs my-bucket /path/to/mount/point

永久掛接

Cloud Storage FUSE 安裝作業包含一個輔助程式,會安裝到系統的路徑 /sbin/mount.gcsfuse。這個輔助程式可讓您使用 /etc/fstab 檔案建立掛接點,以便保留掛接點。

舉例來說,新增至 /etc/fstab 檔案時,下列程式碼會在路徑 /mount/point 定義名為 my-bucket 的值區掛接點:

my-bucket /mount/point gcsfuse rw,noauto,user

其中:

  • rw 選項會指定建立掛接點時,應具備讀取和寫入權限。

  • noauto 選項會指定檔案系統不應在開機時掛接。

  • user 選項可讓任何人建立 /etc/fstab 檔案中指定的掛接點。將範例行加入 /etc/fstab 檔案後,您就能以非超級使用者身分執行 mount /mount/point。

如要在啟動時自動掛接 bucket,可能需要在 /etc/fstab 項目中加入 _netdev 選項,確保 Cloud Storage FUSE 會等待網路系統準備就緒,再掛接 bucket。例如:

my-bucket /mount/point gcsfuse rw,_netdev,user

您可以在 /etc/fstab 項目中加入 uid、gid 選項或兩者,以特定非超級使用者的身分自動掛接 bucket。例如:

my-bucket /mount/point gcsfuse rw,_netdev,allow_other,uid=1001,gid=1001

與 Linux mount 指令類似,在 /etc/fstab 檔案中用於掛接的標記必須使用底線 (_),而非連字號 (-)。舉例來說,請使用 implicit_dirs,而非 implicit-dirs。

掛接含有資料夾的 bucket

你可以掛接多個資料夾類型的 bucket。

掛接含有代管資料夾的 bucket

如要掛接包含受管理資料夾的 bucket,請在指令中加入 --implicit-dirs 選項或 implicit-dirs 欄位。

舉例來說,如要將名為 my-bucket 的 bucket 及其代管資料夾掛接至 /path/to/mount/point 目錄,請執行下列指令:

gcsfuse --implicit-dirs my-bucket /path/to/mount/point

使用受管理資料夾掛接 bucket 時,請注意下列限制和考量事項:

  • 空白的代管資料夾不會顯示在掛接的值區中。

  • 您無法使用 Cloud Storage FUSE,在代管資料夾中設定或管理 IAM 權限。如要在代管資料夾中設定或管理 IAM 權限,請參閱「搭配代管資料夾使用 IAM」。

  • 您可以使用 cp 和 mv 指令,複製及移動已掛接儲存空間中的代管資料夾。複製或移動代管資料夾時,原始代管資料夾的 IAM 政策不會保留到新的代管資料夾。您必須在新代管資料夾中設定新的 IAM 政策。

掛接含有隱含定義資料夾的 bucket

您可以使用 gcsfuse CLI 中的 --implicit-dirs gcsfuse 選項,或 Cloud Storage FUSE 設定檔中的 implicit-dirs 欄位,掛接隱含定義的資料夾。隱含定義的資料夾是指未在 Cloud Storage 中明確建立為物件的資料夾。使用 --implicit-dirs 選項掛接值區時,即可查看資料夾。

舉例來說,如要將名為 my-bucket 的 bucket 掛接到 /path/to/mount/point 目錄,並隱含定義資料夾,請執行下列指令:

gcsfuse --implicit-dirs my-bucket /path/to/mount/point

掛接啟用階層命名空間的 bucket 和資料夾

您可以掛接已啟用階層命名空間的值區,包括其中的資料夾。使用階層式命名空間掛接 bucket 時,您不需要指定 --implicit-dirs gcsfuse 選項或 implicit-dirs 欄位,即可在掛接的 bucket 中顯示資料夾。

舉例來說,如要將名為 my-bucket 的 bucket 連同資料夾掛接到 /path/to/mount/point 目錄,請執行下列指令:

gcsfuse my-bucket /path/to/mount/point

控管掛接點的存取權限

根據預設,Cloud Storage FUSE 會建立 bucket 掛接點,並設定權限,只允許叫用使用者存取已掛接 bucket 的內容。這是 FUSE 核心內建的安全措施。

如要掛接 bucket 並允許其他人存取 bucket 掛接點,可以執行 mount 指令,並搭配 -o allow_other 選項:

mount -t gcsfuse -o allow_other my-bucket /path/to/mount/point

如要避免將儲存空間掛接為根目錄,請在 /etc/fuse.conf 檔案中新增 user_allow_other,允許其他人存取儲存空間掛接點。

卸載 bucket

如要卸載 bucket,請使用 fusermount 工具:

fusermount -u /path/to/mount/point

後續步驟