使用 Cloud Storage FUSE 装载 Cloud Storage 存储桶

装载选项

本页面介绍了几种使用 Cloud Storage FUSE 将 Cloud Storage 存储桶装载到本地文件系统的方法。

准备工作

如需装载存储桶,您必须先完成以下任务。

获取所需角色

如需装载存储桶,请让存储桶所有者为您授予存储桶的 Storage Object Viewer (roles/storage.objectViewer) 角色。请注意,如果您已创建存储桶,您可能已经拥有存储桶的 Storage Admin (roles/storage.admin) 角色,不需要 Storage Object Viewer 角色。

Storage Object Viewer 预定义角色可提供装载存储桶所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

  • storage.objects.list

您也可以使用自定义角色或其他预定义角色来获得此权限。

如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用

安装 Cloud Storage FUSE

安装 Cloud Storage FUSE(如果您尚未这样做)。

对 Cloud Storage FUSE 请求进行身份验证

如需对向 Cloud Storage 发送的 Cloud Storage FUSE 请求进行身份验证,您必须设置应用默认凭据。默认情况下,Cloud Storage FUSE 会自动加载现有应用默认凭据,无需进行任何进一步配置。

如需使用 Google Cloud CLI 设置应用默认凭据,请完成以下步骤:

  1. Install the Google Cloud CLI.

  2. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create local authentication credentials for your user account:

    gcloud auth application-default login

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

创建 Compute Engine 虚拟机 (VM) 时,其服务账号还可用于对 Cloud Storage FUSE 的访问权限进行身份验证。

装载存储桶

如需将存储桶装载到本地文件系统,请使用以下命令:

gcsfuse GLOBAL_OPTIONS BUCKET_NAME MOUNT_POINT

其中:

  • GLOBAL_OPTIONS 是可以添加的选项,用于控制装载的设置方式。如需详细了解选项及其使用方法,请参阅 Cloud Storage FUSE CLI 选项

  • BUCKET_NAME 是要装载的存储桶的名称。例如 my-bucket。如果您要执行动态装载,请从此命令中排除存储桶名称。

  • MOUNT_POINT 是装载存储桶的本地目录。例如 /path/to/mount/point

Cloud Storage FUSE 退出后,您可以通过在已装载的存储桶装载点上运行 ls 来访问该存储桶。如果您希望 Cloud Storage FUSE 保留在前台(例如,用于调试日志记录),则可以在运行 gcsfuse 命令时使用 --foreground 标志。

装载示例

本部分介绍装载存储桶的不同示例命令。

静态装载

静态装载是指装载特定存储桶。例如,如需将存储桶 my-bucket 装载到目录 /path/to/mount/point 中,请运行以下命令:

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

动态装载

动态装载是指将用户有权访问的所有存储桶装载为子目录。

执行动态装载时,您需要从命令中排除存储桶名称。例如,假设您有权访问存储桶 my-bucket-1my-bucket-2my-bucket-3。如需将所有存储桶装载到目录 /path/to/mount/point 中,请运行以下命令:

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

然后,您可以将存储桶作为子目录进行访问:

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 装载到目录 /path/to/mount/point 中,请运行以下命令:

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

在存储桶中装载目录

默认情况下,Cloud Storage FUSE 会完整地装载存储桶,其中包括存储桶的所有内容和目录结构。如需在存储桶中装载特定目录,请将 --only-dir 选项传递给 gcsfuse 命令。例如,如需将目录 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 命令装载时,Cloud Storage FUSE CLI 选项可以作为参数传递给 -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

如果您要在启动时自动装载存储桶,则可能需要在 /etc/fstab 条目中添加 x-systemd.requires=network-online.target 选项或 _netdev 选项,以确保 Cloud Storage FUSE 在装载之前等待网络系统准备就绪。例如:

my-bucket /mount/point gcsfuse rw,x-systemd.requires=network-online.target,user

您可以通过在 /etc/fstab 条目中添加选项 uid 和/或 gid,以特定非根用户身份自动装载存储桶。例如:

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

linux mount 命令类似,用于在 /etc/fstab 文件中装载的标志必须使用下划线 (_),而不是连字符 (-)。例如,应该是 implicit_dirs,而非 implicit-dirs

装载带有文件夹的存储桶

您可以装载带有多种文件夹类型的存储桶。

装载带有托管式文件夹的存储桶

如需装载包括其托管文件夹在内的存储桶,请在命令中添加 --implicit-dirs 选项。

例如,如需将存储桶 my-bucket 及其托管式文件夹装载到目录 /path/to/mount/point 中,请运行以下命令:

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

装载带有托管文件夹的存储桶时,请牢记以下限制和注意事项:

  • 空托管文件夹不会显示在已装载的存储桶中。

  • 您无法使用 Cloud Storage FUSE 对托管文件夹设置或管理 IAM 权限。如需对托管文件夹设置或管理 IAM 权限,请参阅将 IAM 与托管文件夹搭配使用

  • 您可以使用 cpmv 命令在已装载的存储桶中复制和移动托管文件夹。复制或移动托管文件夹时,原始托管文件夹中的 IAM 政策不会在新的托管文件夹中保留。您必须对新的托管式文件夹设置新的 IAM 政策。

装载带有隐式定义的文件夹的存储桶

您可以在 Cloud Storage FUSE 命令中使用 --implicit-dirs 标志装载隐式定义的文件夹。隐式定义的文件夹是指未在 Cloud Storage 中明确创建为对象的文件夹。借助 --implicit-dirs 标志,您可以在装载存储桶时查看文件夹。

例如,如需将存储桶 my-bucket 装载到目录 /path/to/mount/point 中,并使用隐式定义的文件夹,请运行以下命令:

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

装载带有文件夹的启用了分层命名空间的存储桶

您可以装载已启用分层命名空间预览版)的存储桶,包括其文件夹。使用分层命名空间挂载存储桶时,您无需指定 --implicit-dirs 标志,文件夹就会显示在已挂载的存储桶中。

例如,如需将存储桶 my-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

如果您要避免以根用户身份装载存储桶,则必须将 user_allow_other 添加到 /etc/fuse.conf 文件以允许其他人访问存储桶装载点。

如需访问已装载的存储桶,除了调用用户之外,其他用户还必须拥有所需的 IAM 权限

访问已装载的存储桶所需的角色

如需从已装载的存储桶读取数据以及将数据写入已装载的存储桶,请让存储桶所有者为您授予存储桶的 Storage Object User (roles/storage.objectUser) 角色。

预定义角色可提供从已装载的存储桶读取数据以及将数据写入已装载的存储桶所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

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

您也可以使用自定义角色或其他预定义角色来获得这些权限。

如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用

卸载存储桶

如需卸载存储桶,请使用 fusermount 工具:

fusermount -u /path/to/mount/point

后续步骤