使用 gcsfuse 安装在 Compute Engine 实例上的 Google Cloud Bucket 不会创建文件

Posted

技术标签:

【中文标题】使用 gcsfuse 安装在 Compute Engine 实例上的 Google Cloud Bucket 不会创建文件【英文标题】:Google Cloud Bucket mounted on Compute Engine Instance using gcsfuse does not create files 【发布时间】:2021-12-05 19:16:03 【问题描述】:

我已经能够使用

挂载 Google Cloud Bucket
gcsfuse --implicit-dirs " production-xxx-appspot /mount

或同等

sudo mount -t gcsfuse -o implicit_dirs,allow_other,uid=1000,gid=1000,key_file=service-account.json production-xxx-appspot /mount

安装效果很好。

发生的情况是,当我在挂载后执行以下命令时,它们也可以正常工作:

mkdir /mount/files/
cp -rf /home/files/* /mount/files/

但是,当我使用 :

mcedit /mount/files/a.txt

vi /mount/files/a.txt

输出显示没有可用的有意义的文件。

有没有其他方法可以解决这种情况,并以可以直接在挂载的谷歌云存储桶上创建文件的方式使用应用程序,而不是在本地创建文件然后再复制。

【问题讨论】:

检查 Compute Engine 范围(在 Google Cloud Web GUI 中编辑实例。您的 VM 可能只有 Cloud Storage READ 的范围。单击启用 WRITE 选项。您必须关闭实例才能进行更改,但您可以在实例运行时检查设置。 它在 Web UI 中的 VM 实例上显示“存储读/写”。我可以创建目录,甚至可以将文件复制到谷歌云存储。但例如当我使用 MP4Box 或 mcedit 或 vi 等应用程序时,它无法创建或使用这些文件,因为它们还不存在。 “尚不存在”是什么意思?您是指在一个系统上创建文件而在另一个系统上看不到的缓存吗? “尚不存在”意味着,例如,文本编辑器试图打开已挂载的谷歌云存储桶上的文件。它不能这样做并返回一个错误,说“文件无法打开”。但是使用相同的挂载存储桶,我可以创建目录并从其他挂载的驱动器复制文件。 【参考方案1】:

如果您不想在本地创建文件并稍后上传,您应该考虑使用像Google Drive这样的文件存储系统

Google Cloud 存储是一个对象存储系统,这意味着对象不能被修改,您必须一次完整地写入对象。对象存储也不能很好地与传统数据库配合使用,因为编写对象是一个缓慢的过程,而编写一个使用对象存储 API 的应用程序并不像使用文件存储那么简单。

在file storage system 中,数据作为单个信息存储在文件夹中,就像您在马尼拉文件夹中组织纸张一样。当您需要访问该数据时,您的计算机需要知道找到它的路径。 (注意——这可能是一条漫长而曲折的道路。)

如果您想使用 Google Cloud Storage,您需要在本地创建文件,然后将其推送到您的存储桶。

这里有一个如何configure Google Cloud Storage with Node.js: File Upload example的例子

这是一个关于如何mount Object Storage on Cloud Server using s3fs-fuse的教程

如果您想了解更多关于存储格式的信息,请follow this link

有关读取和写入 Cloud Storage 的更多信息in this link

【讨论】:

以上是关于使用 gcsfuse 安装在 Compute Engine 实例上的 Google Cloud Bucket 不会创建文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 gcsfuse 挂载谷歌存储时 Docker 构建失败

使用 gcsfuse 挂载时 Docker 文件已存在

构建 docker 容器时 gcsfuse 无法挂载

在 Google App Engine 上运行 gcsfuse 时出现问题

GCSFuse 提供范围未授权错误

使用 gcsfuse-mounted Bucket 中的数据在 Google Cloud 实例上运行 Docker