將 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 驗證 Cloud Storage FUSE 要求,請設定應用程式預設憑證。根據預設,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是要掛接的 bucket 名稱。例如,my-bucket。如要執行動態掛接,請從指令中排除 bucket 名稱。MOUNT_POINT是掛接 bucket 的本機目錄。例如:/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 為名為 my-bucket 的 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,包括其資料夾。掛接具有階層命名空間的 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 掛接點,請以 root 身分執行 mount 指令,並加上 -o allow_other 選項:
mount -t gcsfuse -o allow_other my-bucket /path/to/mount/point如要避免以 root 身分掛接 bucket,請務必將 user_allow_other 新增至 /etc/fuse.conf 檔案,允許其他使用者存取 bucket 掛接點。
卸載 bucket
如要卸載 bucket,請使用 fusermount 工具:
fusermount -u /path/to/mount/point後續步驟
瞭解 Cloud Storage FUSE 效能調整最佳做法,例如如何控管快取行為或記錄活動。