使用 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) 角色。

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

所需權限

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

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

如需授予值區角色的操作說明,請參閱「設定及管理值區的身分與存取權管理政策」。

安裝 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. 設定 gcloud CLI,使用您的聯合身分。

    詳情請參閱「使用聯合身分登入 gcloud CLI」。

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

    gcloud init
  4. 為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (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 是要掛接的值區名稱。例如,my-bucket。如要執行動態掛接,請從指令中排除值區名稱。

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

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

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

安裝範例

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

靜態安裝

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

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

動態掛接

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

執行動態掛接時,請從指令中排除 bucket 名稱。舉例來說,假設您有權存取名為 my-bucket-1my-bucket-2my-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/

無法從根掛接點列出動態掛接的儲存空間。而是必須在清單作業中指定值區名稱。

以唯讀模式掛接值區

如要以唯讀模式掛接值區,請將 -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 指令掛接值區。如果您使用 Linux,必須從根目錄執行 mount 指令。舉例來說,下列指令會將名為 my-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 的 bucket 定義掛接點:

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

其中:

  • rw 選項會指定掛接點以讀取和寫入權限建立。

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

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

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

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

您可以在 /etc/fstab 項目中加入 uidgid 或兩者,以特定非根使用者身分自動掛接儲存空間。例如:

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

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

掛接含有資料夾的 bucket

您可以掛接多個資料夾類型的值區。

掛接含有代管資料夾的 bucket

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

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

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

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

  • 掛接值區不會顯示空白的受管理資料夾。

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

  • 您可以使用 cpmv 指令,複製及移動已掛接儲存空間中的受管理資料夾。複製或移動受管理資料夾時,原始受管理資料夾的身分與存取權管理政策不會保留到新的受管理資料夾。您必須為新的受管理資料夾設定新的身分與存取權管理政策。

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

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

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

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

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

您可以掛接已啟用階層命名空間的 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 會建立值區掛接點,且權限僅允許叫用使用者存取已掛接值區的內容。這是 FUSE 核心內建的安全措施。

如要掛接值區並允許其他人存取值區掛接點,您可以執行 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

後續步驟