Cloud Storage FUSE

Cloud Storage FUSE 是一种开放源代码 FUSE 适配器,可让您将 Cloud Storage 存储分区作为文件系统装载到 Linux 或 OS X 系统上。此外,它可让应用使用标准文件系统语义上传和下载 Cloud Storage 对象。Cloud Storage FUSE 可在任何已连接到 Cloud Storage 的地方(包括 Google Compute Engine 虚拟机或本地系统)运行1

Cloud Storage FUSE 是一个由 Google 开发、由社区维护的开源工具;该工具是采用 Go 编写的,托管在 GitHub 上。Cloud Storage FUSE 仅受 Apache 许可约束,无需考虑任何其他条款或条件。它按原样分发,且没有任何类型的保证。Cloud Storage FUSE 由社区提供支持,您可在 Server Fault 上使用 google-cloud-platformgcsfuse 标记询问有关 Cloud Storage FUSE 的问题。请查看过往问题和解答,看看您的问题是否已有答案。

技术概览

Cloud Storage FUSE 的工作原理为,将对象存储名称转换为文件和目录系统,并将对象名称中的“/”字符解释为目录分隔符,这样,系统就会将具有相同通用前缀的对象视为同一目录中的文件。应用可与装载的存储分区(如简单文件系统)进行交互,提供几乎无限的云端文件存储空间。

虽然 Cloud Storage FUSE 具有一个文件系统接口,但它与后端 NFS 或 CIFS 文件系统有所不同。Cloud Storage FUSE 既保留了与 Cloud Storage 相同的基本特征,也在规模和聚合性能方面保留了 Cloud Storage 的可扩展性,同时还保持着同样的延迟和单对象性能。与其他访问方法一样,Cloud Storage 不支持并发和锁定。例如,如果多个 Cloud Storage FUSE 客户端同时向同一文件写入内容,则最后一次刷新的内容将生效。

若要详细了解如何使用 Cloud Storage FUSE 或提交问题,请转至 Google Cloud Platform GitHub 代码库。我们建议您查看此代码库中的 READMEsemanticsinstallingmounting 部分。

使用 Cloud Storage FUSE

如需全面地详细了解如何安装和使用 Cloud Storage FUSE,请参阅 GoogleCloudPlatform/gcsfuse GitHub 代码库。以下步骤简要概述了如何以交互方式使用 Cloud Storage FUSE(即,如何手动装载您的存储分区)。

  1. 请按照相关说明安装 Cloud Storage FUSE 及其依赖项。

  2. 设置 Cloud Storage FUSE 凭据。

    Cloud Storage FUSE 会根据应用默认凭据自动发现凭据:

    1. 如果您是在配置了 storage-full 范围的 Google Compute Engine 实例上运行,Cloud Storage FUSE 可以使用 Compute Engine 内置服务帐号。如需了解详情,请参阅在应用中使用服务帐号

    2. 在安装了 Google Cloud SDK 的情况下,如果您运行 gcloud auth application-default login,则 Cloud Storage FUSE 可使用这些凭据。

    3. 如果将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为服务帐号的 JSON 密钥文件路径,Cloud Storage FUSE 则将使用此凭据。有关使用 Google Cloud Platform Console 为服务帐号创建 JSON 密钥文件的详细信息,请参阅创建服务帐号密钥

    如果您指定了多种凭据类型,请参阅应用默认凭据工作原理,以了解凭据的使用顺序。

  3. 创建目录。

    $ mkdir /path/to/mount
    
  4. 使用 Google Cloud Platform Console 创建要装载的存储分区(如果该存储分区尚不存在)。

  5. 使用 Cloud Storage FUSE 装载该存储分区(例如 example-bucket)。

    $ gcsfuse example-bucket /path/to/mount
    
  6. 开始使用装载的存储分区。

    $ ls /path/to/mount
    

与 POSIX 文件系统的主要区别

Cloud Storage FUSE 可让基于文件的应用在不重写其 I/O 代码的情况下使用 Cloud Storage,从而可帮助您更充分、更快速地使用 Cloud Storage。在某些使用场景中,如果 Cloud Storage 可满足应用的性能和可扩展性要求,并且仅缺少文件系统语义,Cloud Storage FUSE 就是理想之选。在判断 Cloud Storage FUSE 是否是合适的解决方案时,您应考虑它与本地文件系统相比的不同之处:

价格:Cloud Storage FUSE 访问最终就是 Cloud Storage 访问。Cloud Storage FUSE 所执行的所有数据传输和操作都会映射到 Cloud Storage 传输和操作,并将按相应费率计费。在使用 Cloud Storage FUSE 之前,请参阅下面的价格部分以了解详细信息。

性能:Cloud Storage FUSE 的延时要比本地文件系统长得多。因此,如果您一次只读取或写入一个小文件,吞吐量可能会降低。使用多个大型文件和/或一次性传输多个文件将有助于提高吞吐量。

  • 单个 I/O 流的运行速度几乎与 gsutil 一样快。
  • gsutil rsync 命令特别容易受延迟影响,因为此命令一次读写一个文件。在此命令中使用 top-level -m 标志通常会加快操作速度。
  • 首字节延迟会导致小型随机读取速度缓慢(不要在 Cloud Storage FUSE 上运行数据库!)
  • 随机写入方式是,读取整个 blob,在本地对其进行编辑,然后将修改后的整个 blob 写回 Cloud Storage 中。对大型文件执行少量写入时,系统会按预期完成,但速度会很慢,开销也会很大。

元数据:当您向 Cloud Storage 上传文件时,Cloud Storage FUSE 不会将元数据随文件一起传输。这意味着,如果您希望使用 Cloud Storage FUSE 作为上传工具,您将无法像使用其他上传方法那样设置内容类型和 acl 等元数据。如果您需要元数据属性,建议使用 gsutilJSON APIGoogle Cloud Platform Console

  • 此项说明的例外情况是,Cloud Storage FUSE 存储 mtime 和 symlink 目标。

并发:当一个文件存在多个写入者时,系统并没有任何并发控制措施。如果多个写入者尝试对一个文件执行替换操作,那么最后一次写入的内容将生效,而先前写入的所有内容都会丢失,也就是说,无法对后续覆盖内容实现合并、版本控制或用户通知。

关联:Cloud Storage FUSE 不支持硬性关联。

语义:某些语义与传统文件系统中的语义不完全相同。如需例外列表,请点击此处。例如,上次访问时间等元数据不受支持,某些元数据操作(如目录重命名)也不是原子操作。

访问:对文件的授权受 Cloud Storage 权限约束。POSIX 式访问控制将不起作用。

可用性:Cloud Storage 等分布式系统有时会发生暂时性错误,导致可用性低于 100%。我们建议您根据截断的指数退避算法准则重试操作。

本地存储空间:新增或经过修改的对象将完整存储在一个本地临时文件中,直至这些对象关闭或同步为止。使用大型文件时,请确保有足够的本地存储空间容量来存储文件的临时副本,尤其是在使用 Google Compute Engine 实例时。如需了解详情,请参阅 readme 文档

目录:默认情况下,文件系统中只会显示明确定义的目录(即,在 Cloud Storage 中作为独立对象存在的目录),而不会显示隐式目录(即,仅作为其他文件或目录路径名一部分存在的目录)。如果存在路径名包含隐式目录的文件,则这些文件不会显示在整个目录树中(因为系统不会显示它们所属的隐式目录)。您可以使用标志来更改这种行为。如需了解详情,请参阅语义文档

使用 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 FUSE 相关的费用:

  • 您需要支付正常对象操作(创建、删除和列表)的费用(请参阅 Cloud Storage 价格页面的操作部分)。

  • 对于 Google Cloud Storage Nearline 存储分区,您需要支付检索和提前删除费用。请参阅 Cloud Storage 价格页面中的 Nearline 存储空间部分。

  • 您需要为区域性位置和多区域位置之间的网络出站流量和数据传输支付费用。请参阅 Cloud Storage 价格页面的网络部分。

费用明细示例

若要了解将 Cloud Storage FUSE 用量折算成 Cloud Storage 费用的情况,请考虑以下所示的一系列命令及其关联的 JSON API 操作。您可以使用 --debug_gcs 标志显示操作相关信息。

命令 JSON API 操作
gcsfuse --debug_gcs 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/")

根据 JSON API 的操作费用,我们可以计算上述 14 项操作(其中有 8 项 A 类操作、4 项 B 类操作和 2 项免费操作)的费用。另外,您还需要支付 local.txt 文件的存储费用。如果您在创建此文件后很快将其删除,则相关费用几乎可以忽略不计。仅就 12 项收费操作而言,这一系列命令的费用为 $0.000084。


 
Linux 内核 3.10 及更高版本支持 Cloud Storage FUSE。您可以使用“uname -a”查看内核版本。

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面