GCP桶在UI中可达,但在云壳中不能被gcsfuse访问



嗨,我想从云shell终端到达GCP桶中的一些文件(出于sftp原因),gcsfuse成功地挂载了父目录,除了我需要的目录外,它拥有所有目录,任何想法我做错了什么?

在Google Cloud Storage中,以斜杠(/)结尾的对象名称代表一个目录,所有其他对象名称代表一个文件。默认情况下,目录不是隐式定义的,只有当以斜杠(/)结尾的匹配对象存在时,目录才存在。

由于通常的文件系统操作,如mkdir将做正确的事情,如果有人只使用gcsfuse设置一个桶的结构,那么他们不会注意到这有什么奇怪的。但是,如果有人使用其他工具在Google Cloud Storage中设置对象(例如Google Cloud Console中的存储浏览器),他们可能会注意到,在为它们创建领先目录之前,并非所有对象都是可见的。

例如,假设有人通过在Google Cloud Console的存储浏览器部分选择文件夹上传选项上传了一个对象demo/start.txt,然后用gcsfuse挂载它。文件系统最初将显示为空,因为没有demo/对象。但是,如果他们随后运行mkdir demo,他们现在将看到一个名为demo的目录,其中包含一个名为start.txt的文件。

为了缓解这个问题,gcsfuse支持一个名为--implicit-dirs的标志。当启用此标志时,名称查找请求使用Google Cloud Storage API的Objects.list操作来搜索对象,这些对象将隐式地定义具有相关名称的目录的存在性。因此,在上面的示例中,将出现一个名为demo的目录,其中包含一个文件start.txt

所以在你的情况下,我怀疑你无法看到的文件是你上传到谷歌云存储桶的文件夹。由于您已经用目录挂载了gcsfuse,如果您使用--implicit-dirs标志再次挂载它,它将抛出一个错误。因此,我建议您通过运行以下命令来卸载该目录—

fusermount -u /path/to/mount/directory

再次挂载的目录运行以下命令——

gcsfuse --implicit-dirs BUCKET_NAME /path/to/mount/directory

您也可以创建一个新目录并使用gcsfuse挂载该目录,而无需卸载现有的挂载目录。

请注意,--implicit-dirs标志有一些缺点。我建议你通过这个github问题来获得关于它的详细信息。

最新更新