Cloud Storage FUSE

本页面简要介绍了 Cloud Storage FUSE,这是一种 FUSE 适配器,可让您将 Cloud Storage 存储桶作为本地文件系统进行装载和访问,以便应用可以读取内容并使用标准文件系统语义在存储桶中写入对象。

本文档始终反映了最新版本的 Cloud Storage FUSE。如需详细了解最新版本,请参阅 GitHub 上的 Cloud Storage FUSE 版本

概览

Cloud Storage FUSE 是 Google 支持的开源产品。Cloud Storage FUSE 会使用 FUSE 和 Cloud Storage API 透明地将存储桶公开为文件系统上的本地装载文件夹。

Cloud Storage FUSE 与其他 Google Cloud 服务集成。例如,Cloud Storage FUSE CSI 驱动程序使您可以使用 Google Kubernetes Engine (GKE) API 将存储桶用作卷,以便您可以从 Kubernetes Pod 内读取和写入 Cloud Storage。如需详细了解其他集成,请参阅集成

Cloud Storage FUSE 的工作原理

Cloud Storage FUSE 的工作原理为,将对象存储名称转换为类似目录的结构,并将对象名称中的斜杠字符 (/) 解释为目录分隔符。系统会将具有相同通用前缀的对象视为同一目录中的文件,从而允许应用像文件系统一样与已装载的存储桶进行交互。您还可以使用分层命名空间将对象整理到逻辑文件系统结构中,以便将对象整理到文件夹中。

Cloud Storage FUSE 可在任何已连接到 Cloud Storage 的地方(包括 Google Kubernetes Engine、Compute Engine 虚拟机或本地系统)运行。

Cloud Storage FUSE 的使用场景

Cloud Storage FUSE 非常适合 Cloud Storage 可满足需要文件系统语义的应用的性能和可伸缩性要求的使用场景。例如,Cloud Storage FUSE 对于机器学习 (ML) 项目非常有用,因为它提供了一种将数据、模型、检查点和日志直接存储在 Cloud Storage 中的方法。如需了解详情,请参阅适用于机器学习工作负载的 Cloud Storage FUSE

用于机器学习的 Cloud Storage FUSE

对于希望将机器学习 (ML) 训练和模型数据存储和存储在 Cloud Storage 中的对象的开发者而言,Cloud Storage FUSE 是一种常见的选择。Cloud Storage FUSE 为开发机器学习项目提供了多项优势:

  • 借助 Cloud Storage FUSE,您可以将 Cloud Storage 存储桶作为本地文件系统装载,以便应用可以使用标准文件系统语义访问训练和模型数据。这意味着,使用 Cloud Storage 存储机器学习数据时,您可以避免重写应用或重构应用代码的费用。

  • 从训练到推理,Cloud Storage FUSE 可让您利用 Cloud Storage 的内置高可伸缩性、性能和成本效益,以便大规模运行机器学习工作负载。

  • 借助 Cloud Storage FUSE,您可以通过提供可直接访问 Cloud Storage 中的数据的计算资源来快速启动训练作业,因此您无需将训练数据下载到计算资源中。

如需了解详情,请参阅 Cloud Storage FUSE 支持的框架、操作系统和架构

框架、操作系统和架构

Cloud Storage FUSE 已通过以下框架进行验证:

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE 支持以下操作系统和架构:

  • Rocky Linux 8.9 或更高版本

  • Ubuntu 18.04 或更高版本

  • Debian 10 或更高版本

  • CentOS 7.9 或更高版本

  • RHEL 7.9 或更高版本

  • SLES 15 或更高版本

  • x86_64

  • ARM64

Cloud Storage FUSE 与 Google Cloud 产品的集成

Cloud Storage FUSE 可与以下 Google Cloud 产品集成:

产品 Cloud Storage FUSE 的集成方式
Google Kubernetes Engine (GKE)

Cloud Storage FUSE CSI 驱动程序管理 Cloud Storage FUSE 与 Kubernetes API 的集成,以将 Cloud Storage 存储桶用作卷。您可以使用 Cloud Storage FUSE CSI 驱动程序,将存储桶文件系统装载到 Google Kubernetes Engine 节点上。

Vertex AI Training

在 Vertex AI 上执行自定义训练时,您可以从作为已装载文件系统的 Cloud Storage 存储桶中访问数据。 如需了解详情,请参阅准备训练代码

Vertex AI Workbench

Vertex AI Workbench 实例包含 Cloud Storage 集成,可让您从 JupyterLab 界面浏览存储桶并使用存储在 Cloud Storage 中的兼容文件。借助 Cloud Storage 集成,您可以访问您的实例在 Vertex AI Workbench 实例所属的项目中有权访问的所有 Cloud Storage 存储桶和文件。如需设置集成,请参阅 Vertex AI Workbench 的有关如何在 JupyterLab 中访问 Cloud Storage 存储桶和文件的说明

Deep Learning VM Image

Cloud Storage FUSE 预装了 Deep Learning VM Image。

Deep Learning Containers

如需为 Deep Learning Containers 装载存储桶,您可以使用 Cloud Storage FUSE CSI 驱动程序(推荐)或安装 Cloud Storage FUSE

Batch

借助 Cloud Storage FUSE,您可以在创建和运行批量作业时将 Cloud Storage 存储桶作为存储卷装载。您可以在作业的定义中指定存储桶,存储桶会在作业运行时自动装载到作业的虚拟机。

Cloud Run

Cloud Run 可让您将 Cloud Storage 存储桶作为卷装载,并将存储桶内容在容器文件系统中以文件的形式呈现。 如需设置卷装载,请参阅装载 Cloud Storage 卷

Cloud Composer

当您创建环境时,Cloud Composer 会将工作流及其依赖项的源代码存储在 Cloud Storage 存储桶内的特定文件夹中。Cloud Composer 使用 Cloud Storage FUSE 将该存储桶中的文件夹映射到 Cloud Composer 环境中的 Airflow 组件。

如需查看通常与 Cloud Storage 集成的 Google Cloud 产品的列表,请参阅与 Google Cloud 服务和工具的集成

缓存

Cloud Storage FUSE 提供四种类型的缓存来帮助提高性能并降低费用:文件缓存、统计信息缓存、类型缓存和列表缓存。如需详细了解这些缓存,请参阅缓存概览

目录语义

Cloud Storage 提供具有平面命名空间的存储分区,以及启用了分层命名空间的存储分区。默认情况下,Cloud Storage FUSE 可以在启用了分层命名空间的存储分区中推断明确定义的目录(也称为文件夹),但无法在使用平面命名空间的存储分区中推断隐式定义的目录。隐式定义的目录包括模拟文件夹托管文件夹

例如,假设您装载一个名为 my-bucket 的存储桶,其中包含一个名为 my-directory/my-object.txt 的对象,其中 my-directory/ 是模拟的文件夹。默认情况下,当您在存储桶装载点上运行 ls 时,Cloud Storage FUSE 将无法访问模拟目录 my-bucket/my-directory/ 或其中的对象 my-object.txt。如需让 Cloud Storage FUSE 推断模拟文件夹及其中的对象,请在挂载平面命名空间存储桶时,在 gcsfuse mount 命令中添加 --implicit-dirs 选项。如需详细了解 --implicit-dirs 选项,请参阅 Cloud Storage FUSE 命令行文档

如果您需要使用文件系统存储和访问数据,请使用启用了分层命名空间的存储分区。如需了解如何创建此类存储分区,请参阅创建启用了分层命名空间的存储分区

如需详细了解目录语义,包括如何使用隐式定义的目录装载存储分区,请参阅 GitHub 文档中的文件和目录

重试策略

默认情况下,从 Cloud Storage FUSE 到 Cloud Storage 的失败请求会使用指数退避算法重试,不超过指定的退避时长上限,值默认为 30s(30 秒)。退避时长超过指定的时长上限后,重试会继续指定的时长上限。您可以在 gcsfuse 调用中使用 --max-retry-sleep 选项来指定退避时长。

如需详细了解 --max-retry-sleep 选项,请参阅 gcsfuse 命令行文档

与 Cloud Storage 操作关联的 Cloud Storage FUSE 操作

使用 Cloud Storage FUSE 执行操作时,您也会执行与 Cloud Storage FUSE 操作关联的 Cloud Storage 操作。下表介绍了常见的 Cloud Storage FUSE 命令及其关联的 Cloud Storage JSON API 操作。您可以在 gcsfuse 命令中将 --log-severity 标志设置为 TRACE,以显示有关 Cloud Storage FUSE 操作的信息。

命令 JSON API 操作
gcsfuse --log-severity=TRACE example-bucket mp Objects.list(用于检查凭据)
cd mp 不适用
ls mp Objects.list("")
mkdir subdir

Objects.get("subdir")

Objects.get("subdir/")

Objects.insert("subdir/")

cp ~/local.txt subdir/

Objects.get("subdir/local.txt")

Objects.get("subdir/local.txt/")

Objects.insert("subdir/local.txt")(用于创建空对象)

Objects.insert("subdir/local.txt")(完成写入后关闭时)

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

Cloud Storage FUSE 的价格

Cloud Storage FUSE 可免费使用,但对于存储空间、元数据以及 Cloud Storage FUSE 与 Cloud Storage 之间产生的网络 I/O,系统将会像其他任何 Cloud Storage 接口一样进行计费。换句话说,Cloud Storage FUSE 所执行的所有数据传输和操作都会映射到 Cloud Storage 传输和操作,并相应地进行计费。 如需详细了解常见的 Cloud Storage FUSE 操作及其如何映射到 Cloud Storage 操作,请参阅操作映射

为避免产生意外费用,您应该根据自己的 Cloud Storage FUSE 使用量折算一下相应的 Cloud Storage 费用。例如,如果您使用 Cloud Storage FUSE 存储日志文件,并且有数百或数千台机器同时大量刷新日志,费用可能会增长很快。

如需了解存储、网络用量和操作等方面的费用,请参阅 Cloud Storage 价格

限制

虽然 Cloud Storage FUSE 具有一个文件系统接口,但它与后端 NFS 或 CIFS 文件系统有所不同。此外,Cloud Storage FUSE 不符合 POSIX 标准。如需了解 Google Cloud 中的 POSIX 文件系统产品,请参阅 Filestore

使用 Cloud Storage FUSE 时,请注意其限制和语义,这些方面与 POSIX 文件系统不同。Cloud Storage FUSE 只应在其功能内使用。

限制和与 POSIX 文件系统的区别

以下列表介绍了 Cloud Storage FUSE 的限制:

  • 元数据:将文件上传到 Cloud Storage 时,Cloud Storage FUSE 不会传输对象元数据,但 mtime 和 symlink 目标除外。这意味着,使用 Cloud Storage FUSE 上传文件时,您无法设置对象元数据。如果您需要保留对象元数据,请考虑使用 Google Cloud CLIJSON APIGoogle Cloud 控制台上传文件。
  • 并发:Cloud Storage FUSE 不会为对同一文件的多次写入提供并发控制。如果多次写入操作尝试替换某个文件,则最后一次写入的内容会生效,而先前写入的所有内容都会丢失。无法对后续覆盖内容实现合并、版本控制或用户通知。
  • 关联:Cloud Storage FUSE 不支持硬性链接。
  • 文件锁定和文件修补:Cloud Storage FUSE 不支持文件锁定或文件修补。因此,您不应将版本控制系统代码库存储在 Cloud Storage FUSE 装载点,因为版本控制系统依赖于文件锁定和修补。此外,您不应将 Cloud Storage FUSE 用作文件替换项。
  • 语义:Cloud Storage FUSE 中的语义与传统文件系统中的语义不同。例如,上次访问时间等元数据不受支持,某些元数据操作(如目录重命名)也不是原子操作,除非您使用启用了分层命名空间的存储桶。如需查看 Cloud Storage FUSE 语义与传统文件系统语义之间的差异列表,请参阅 Cloud Storage FUSE GitHub 文档中的语义。如需了解 Cloud Storage FUSE 如何在 Cloud Storage 中推断目录,请参阅目录语义
  • 执行文件修补(或就地覆盖)的工作负载:Cloud Storage FUSE 只能一次性将整个对象写入 Cloud Storage,并且不提供修补机制。如果您尝试修补文件,Cloud Storage FUSE 将重新上传整个文件。此行为的唯一例外情况是,您可以将内容附加到大小为 2 MB 或更大的文件的末尾,这样 Cloud Storage FUSE 将仅重新上传附加的内容。
  • 访问权限:对文件的授权受 Cloud Storage 权限约束。POSIX 式访问权限控制将不起作用。
  • 性能:Cloud Storage FUSE 的延时要比本地文件系统长得多,因此不应用作存储数据库的后端。一次读取或写入一个小文件时,吞吐量可能会降低。使用大型文件或一次传输多个文件有助于提高吞吐量。
  • 可用性:使用 Cloud Storage FUSE 访问 Cloud Storage 时,有时可能会发生暂时性错误。建议您使用重试策略重试失败的操作。
  • 对象版本控制:Cloud Storage FUSE 未正式支持使用启用了对象版本控制的存储桶。尝试将 Cloud Storage FUSE 与启用了对象版本控制的存储桶搭配使用可能会产生不可预测的行为。
  • 文件转码

    元数据中具有 content-encoding: gzip 的对象:Cloud Storage FUSE 装载目录中的任何此类对象都不会进行解压缩式转码。相反,对象会保持与其存储在存储桶中的方式相同的压缩方式。

    例如,使用带有 --gzip-local 标志gcloud storage cp 命令上传到存储桶的 1000 字节文件可能会变为 60 个字节(实际压缩大小取决于内容和 gcloud CLI 使用的 gzip 实现)作为 Cloud Storage 对象。如果使用 gcsfuse 装载存储桶,并且已在装载目录中列出或从中读取相应的文件,则其大小将返回 60 个字节,其内容是原始 1000 个字节的压缩版本内容。

    作为对比,使用 gcloud storage cp gs://bucket/path /local/path 进行的下载会进行解压缩式转码:在 gcloud 命令中,内容会在下载期间自动解压缩,并且系统会提供未压缩的原始内容。

  • 保留政策:Cloud Storage FUSE 不支持向具有保留政策的存储桶写入数据。如果您尝试写入具有保留政策的存储桶,则写入将失败。

    Cloud Storage FUSE 支持从具有保留政策的存储桶中读取对象,但必须在存储桶装载期间传递 -o RO 标志,从而将存储桶装载为 Read-Only

  • 本地存储空间:新增或经过修改的对象会完整存储在一个本地临时文件中,直至这些对象关闭或同步为止。使用大型文件时,请确保有足够的本地存储空间容量来存储文件的临时副本,尤其是在使用 Compute Engine 实例时。如需了解详情,请参阅 Cloud Storage FUSE GitHub 文档中的自述文件
  • 文件句柄限制:Linux 内核的默认限制为 1,024 个开放文件句柄。将 Cloud Storage FUSE 用作服务器来处理多个并发连接时,您可能会超出此限制。为避免出现问题,请确保与单个主机的并发连接数保持在低于限制,并考虑提高限制。这在以下情况下很重要:使用 Cloud Storage FUSE 装载来传送 Web 内容、托管网络附加存储 (NAS) 或托管文件传输协议 (FTP) 服务器。从 Cloud Storage FUSE 装载传送 Cloud Run 上的 Web 内容时,每个实例的并发请求数上限限制为小于 1,000。
  • rsync 限制:Cloud Storage FUSE 的文件系统延迟时间会影响 rsync,一次只能读写一个文件。如需并行向存储桶或从存储桶转移多个文件,请运行 gcloud storage rsync 来使用 Google Cloud CLI。如需了解详情,请参阅 rsync 文档
  • 列出操作限制:当您列出已装载存储桶中的所有对象时(例如,通过运行 ls),Cloud Storage FUSE 会在 Cloud Storage 上调用对象:列出 API。API 会对结果进行分页,这意味着 Cloud Storage FUSE 可能需要发出多次调用,具体取决于存储桶中的对象数量,这可能会导致列表操作成本高昂且速度缓慢。

已知问题

如需查看 Cloud Storage FUSE 中的已知问题列表,请参阅 GitHub

获取支持

您可以使用 Google Cloud 的官方支持渠道获取支持、提交一般问题,以及请求新功能。此外,您还可以通过在 GitHub 中提交问题来获取支持。

如需了解常见问题的解决方案,请参阅 Cloud Storage FUSE GitHub 文档中的问题排查

后续步骤