將 bucket 掛接至本機檔案系統後,您就能透過標準檔案系統語意,存取 Cloud Storage 中的資料。本文說明如何使用 Cloud Storage FUSE,將 Cloud Storage bucket 掛接至本機檔案系統。
事前準備
如要掛接及存取 bucket,請先完成下列工作。您無法使用 Cloud Shell 掛接 Cloud Storage bucket。請改為在 Debian 或 Ubuntu 機器的終端機中,執行本文件提供的指令。
取得掛接及存取 bucket 的必要角色
如要掛接、存取 bucket,以及在 bucket 中執行讀取和寫入作業,請要求 bucket 擁有者授予您 bucket 的 Storage 物件使用者 (roles/storage.objectUser) 角色。
這個預先定義的角色具備讀取及寫入已掛接 bucket 的必要權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
storage.objects.createstorage.objects.deletestorage.objects.getstorage.objects.liststorage.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 設定應用程式預設憑證,請完成下列步驟:
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
如果您使用的是本機殼層,請為使用者帳戶建立本機驗證憑證:
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是要掛接的值區名稱。例如,my-bucket。如要執行動態掛接,請從指令中排除 bucket 名稱。MOUNT_POINT是值區掛接的本機目錄。例如:/path/to/mount/point。
選用:如要建立隱含定義的目錄,以便前往僅包含巢狀結構更深層物件的資料夾,請在 gcsfuse 指令中加入 --implicit-dirs 旗標。如要進一步瞭解隱含定義的目錄,請參閱「目錄語意」。
Cloud Storage FUSE 結束後,您可以在 bucket 掛接點上執行 ls,存取已掛接的 bucket。如要讓 Cloud Storage FUSE 保持在前景 (例如用於偵錯記錄檔),可以使用 foreground 欄位或 --foreground 選項執行 gcsfuse 指令。
安裝範例
本節說明掛接 bucket 的不同指令範例。
靜態掛接
靜態掛接是指掛接特定 bucket。舉例來說,如要將名為 my-bucket 的 bucket 掛接至目錄 /path/to/mount/point,請執行下列指令:
mkdir /path/to/mount/pointgcsfuse 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/pointgcsfuse /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 掛接為唯讀,請將 -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 的 bucket 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 等待網路系統準備就緒後再掛接。例如:
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 及其代管資料夾,請在指令中加入 --implicit-dirs 選項或 implicit-dirs 欄位。
舉例來說,如要將名為 my-bucket 的 bucket 及其代管資料夾掛接至 /path/to/mount/point 目錄,請執行下列指令:
gcsfuse --implicit-dirs my-bucket /path/to/mount/point掛接含有代管資料夾的值區時,請注意下列限制和考量事項:
空白的代管資料夾不會顯示在掛接的值區中。
您無法使用 Cloud Storage FUSE 設定或管理代管資料夾的 IAM 權限。如要設定或管理代管資料夾的 IAM 權限,請參閱「搭配使用 IAM 與代管資料夾」。
您可以使用
cp和mv指令,複製及移動已掛接 bucket 中的代管資料夾。複製或移動代管資料夾時,原始代管資料夾的 IAM 政策不會保留到新的代管資料夾。您必須為新的代管資料夾設定新的 IAM 政策。
掛接含有隱含定義資料夾的 bucket
您可以使用 gcsfuse CLI 中的 --implicit-dirs
gcsfuse 選項,或 Cloud Storage FUSE 設定檔中的 implicit-dirs 欄位,掛接隱含定義的資料夾。隱含定義的資料夾是指未在 Cloud Storage 中明確建立為物件的資料夾。--implicit-dirs 選項可讓您在掛接 bucket 時查看資料夾。
舉例來說,如要將名為 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 建立的值區掛接點權限,僅允許叫用使用者存取掛接值區的內容。這是 FUSE 核心內實施的安全措施。
如要掛接 bucket 並允許其他人存取 bucket 掛接點,請以 root 身分執行 mount 指令,並加上 -o allow_other 選項:
mount -t gcsfuse -o allow_other my-bucket /path/to/mount/point如要避免以 root 身分掛接 bucket,請務必在 /etc/fuse.conf 檔案中加入 user_allow_other,允許其他使用者存取 bucket 掛接點。
卸載 bucket
如要卸載 bucket,請使用 fusermount 工具:
fusermount -u /path/to/mount/point後續步驟
瞭解 Cloud Storage FUSE 效能調整最佳做法,例如如何控管快取行為或記錄活動。