如何将 Google 存储桶作为本地磁盘挂载到 Linux 具有完全访问权限的实例上

How to mount Google Bucket as local disk on Linux instance with full access rights

使用以下五行在全新的 Ubuntu14 实例上安装 gcsfuse

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update
sudo apt-get install gcsfuse

现在在本地磁盘上创建一个文件夹(此文件夹将用作Google Bucket的挂载点)。授予此文件夹完全访问权限:

sudo mkdir /home/shared 
sudo chmod 777 /home/shared 

使用gcsfuse 命令将Google 存储桶安装到我们之前创建的安装点文件夹。但首先,列出链接到您的 Google 项目的 Google 存储桶的名称:

gsutil ls

我从事的 Google 项目有一个名为 "my_bucket" 的存储桶。知道存储桶名称后,我可以 运行 gcsfuse 命令将 my_bucket 存储桶挂载到本地 /home/shared 安装文件夹:

gcsfuse my_bucket /home/shared 

此命令的执行记录它是成功的:

Using mount point: /home/shared
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.

但现在当我尝试在映射的 /home/shared 安装点文件夹中创建另一个文件夹时,我收到错误消息:

mkdir /home/shared/test

错误:

mkdir: cannot create directory ‘/home/shared/test’: Input/output error

尝试解决问题我成功地 un-mount 它使用:

fusermount -u /home/shared

并将其映射回来,但现在使用另一个 gcsfuse 命令行:

mount -t gcsfuse -o rw,user  my_bucket /home/shared

但它会导致完全相同的权限问题。

最后我尝试通过编辑 /etc/fstab 配置文件来解决这个权限问题:

sudo nano /etc/fstab

然后在文件末尾追加一行:

my_bucket /home/shared gcsfuse rw,noauto,user

但对解决这个问题没有帮助。

需要更改什么以允许所有用户完全访问映射的 Google 存储桶,以便用户能够创建、删除和修改存储在 Google 存储桶中的文件和文件夹?

我看到你的问题是因为我遇到了完全一样的问题,我也做了和你一样的步骤。 给root用户完全控制挂载的云文件夹的解决方案:

你必须去你的 Google Cloude 地方,搜索 "Service account" 并点击它。

然后您必须导出服务帐户的密钥文件(.json) (我使用以下命令使用 Google Cloud Shell consol 创建了一个新服务帐户:gcloud auth application-default login 然后按照 shell 提示我的步骤进行操作。)

点击创建密钥并选择 JSON 将 .JSON 密钥文件上传到您的 linux 服务器。 然后在你的 Linux 服务器上,运行 这个命令:gcsfuse -o allow_other --gid 0 --uid 0 --file-mode 777 --dir-mode 777 --key-file /path_to_your_keyFile_that_you_just_uploaded.json nameOfYourBucket /path/to/mount

要查找您的根用户 GID 和 UID,请以根用户身份登录到您的服务器并在终端类型中输入:id -u root 用于 UID 和 id -g root 用于 GID

希望我能帮上忙,因为我已经苦苦挣扎了很长时间,互联网上没有任何资源能真正帮到我。干杯。

@Keytrap 给出的答案是正确的。但是自 2017 年以来,gcsfuse 和 GCP 都发生了变化,并且有更多(也许更容易)的选项可以让 gscfuse 连接到 Google 帐户:

  1. 如果您 运行 在 Google Compute Engine 实例上配置了 storage-full 范围,则 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 将使用这些凭据。

来源:Cloud Storage FUSE