2

我正在尝试使用 gcsfuse 安装一个谷歌存储桶。我可以安装它,但是当我尝试使用触摸测试在其中制作文件时收到输入/输出错误消息。

下面的命令显示尝试连接到谷歌云完全没有错误

my_name@deployment-test:~$ sudo gcsfuse -o rw -o allow_other -file-mode=777 -dir-mode=777 --foreground --debug_gcs --debug_http --debug_fuse --debug_invariants company-name-deployment-test test2

命令给出结果

Using mount point: /home/my_name/test2
Opening GCS connection...

WARNING: gcsfuse invoked as root. This will cause all files to be owned by
root. If this is not what you intended, invoke gcsfuse as the user that will
be interacting with the file system.

Opening bucket...
gcs: Req              0x0: <- ListObjects()
http: ========== REQUEST:
GET http://www.googleapis.com/storage/v1/b/company-name-deployment-test/o?maxResults=1&projection=full HTTP/1.1
Host: www.googleapis.com
User-Agent: gcsfuse/0.0
Authorization: Bearer ya29.EmQkBGU8LBXoLOWE6bt7QU7Ulg9k6_ALV9shBuGILqzZxEf4mE0xXIVuelOscxJiXwLpvNAPO23oNT3oqE1YT8KJxmvcGlhv1XwAV3jOqO2-2NMeB9w1pLreGGXNLMBcxG7NoUIX
Accept-Encoding: gzip

http: ========== RESPONSE:
HTTP/2.0 200 OK
Content-Length: 31
Cache-Control: private, max-age=0, must-revalidate, no-transform
Content-Type: application/json; charset=UTF-8
Date: Wed, 05 Apr 2017 14:53:47 GMT
Expires: Wed, 05 Apr 2017 14:53:47 GMT
Server: UploadServer
Vary: Origin
Vary: X-Origin
X-Guploader-Uploadid: AEnB2Uo_mWOeNeVYEKUDSUgXG5l6OW3rdBghHeFlfzUjDMGMSl4934ZLq57ujokZuJoSAefKXIlqZTjURPcx_HTq0obPy94PgQ

{
 "kind": "storage#objects"
}
http: ====================
gcs: Req              0x0: -> ListObjects() (80.50838ms): OK
Mounting file system...
fuse_debug: Op 0x00000001        connection.go:395] <- init
fuse_debug: Op 0x00000001        connection.go:474] -> OK ()
File system has been successfully mounted.

试图触摸给出:

touch test2/test.txt
touch: cannot touch ‘test2/test.txt’: Input/output error

由于从调试输出看我的凭据似乎没问题 还有什么可能导致此输入/输出错误消息?

在阅读了 Jacobsa 的评论后,我意识到我没有获得所有我能得到的信息,一旦系统安装运行我的命令,我就打开了第二个 ssh 连接,而这仍然是启动并尝试触摸文件产生:

    fuse_debug: Op 0x00000003        connection.go:395] <- LookUpInode (parent 1, name "test.txt")
gcs: Req              0x1: <- StatObject("test.txt")
gcs: Req              0x2: <- StatObject("test.txt/")
http: ========== REQUEST:
GET http://www.googleapis.com/storage/v1/b/tembo-deployment-test/o/test.txt?projection=full HTTP/1.1
Host: www.googleapis.com
User-Agent: gcsfuse/0.0
Authorization: Bearer ya29.EmQmBNtnKIPWQvvhLiCU-178OTVIA44gXrXRzQaNb5tBTfRpusKgmgmF83FR6QCI1Cg6jACSkZ3iCWyqarhS7WSuPfMUih0gZpKXGSdSg4fQ6VbFQnj7ru24k4erRUTVdR04NrcH
Accept-Encoding: gzip

http: ========== REQUEST:
GET http://www.googleapis.com/storage/v1/b/tembo-deployment-test/o/test.txt%2F?projection=full HTTP/1.1
Host: www.googleapis.com
User-Agent: gcsfuse/0.0
Authorization: Bearer ya29.EmQmBNtnKIPWQvvhLiCU-178OTVIA44gXrXRzQaNb5tBTfRpusKgmgmF83FR6QCI1Cg6jACSkZ3iCWyqarhS7WSuPfMUih0gZpKXGSdSg4fQ6VbFQnj7ru24k4erRUTVdR04NrcH
Accept-Encoding: gzip

http: ========== RESPONSE:
HTTP/2.0 404 Not Found
Content-Length: 165
Cache-Control: private, max-age=0
Content-Type: application/json; charset=UTF-8
Date: Fri, 07 Apr 2017 15:29:07 GMT
Expires: Fri, 07 Apr 2017 15:29:07 GMT
Server: UploadServer
Vary: Origin
Vary: X-Origin
X-Guploader-Uploadid: AEnB2Uo2tVrtHfLuSn2RDpYqO3bgg6gEPL1fjOO2wdBgKGGyNzKHVQXlEoh4ObOx0YH1soFOQijWzXuewbAtMBdNcSxmeHzuGg

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}
http: ====================
gcs: Req              0x2: -> StatObject("test.txt/") (54.298126ms): gcs.NotFoundError: googleapi: Error 404: Not Found, notFound
http: ========== RESPONSE:
HTTP/2.0 404 Not Found
Content-Length: 165
Cache-Control: private, max-age=0
Content-Type: application/json; charset=UTF-8
Date: Fri, 07 Apr 2017 15:29:07 GMT
Expires: Fri, 07 Apr 2017 15:29:07 GMT
Server: UploadServer
Vary: Origin
Vary: X-Origin
X-Guploader-Uploadid: AEnB2UrAcoLYqm97VH1sDql_CLiVM3_q0EXW_gy1VaxmWJOLksZkcIV78WRFN-Y9hkWmDKN1LJfSz767jkWAhomwoaLqwlFeyw

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}
http: ====================
gcs: Req              0x1: -> StatObject("test.txt") (57.69261ms): gcs.NotFoundError: googleapi: Error 404: Not Found, notFound
fuse_debug: Op 0x00000003        connection.go:476] -> Error: "no such file or directory"
fuse_debug: Op 0x00000004        connection.go:395] <- CreateFile (parent 1, name "test.txt")
gcs: Req              0x3: <- CreateObject("test.txt")
http: ========== REQUEST:
POST http://www.googleapis.com/upload/storage/v1/b/tembo-deployment-test/o?ifGenerationMatch=0&projection=full&uploadType=resumable HTTP/1.1
Host: www.googleapis.com
User-Agent: gcsfuse/0.0
Content-Length: 156
Authorization: Bearer ya29.EmQmBNtnKIPWQvvhLiCU-178OTVIA44gXrXRzQaNb5tBTfRpusKgmgmF83FR6QCI1Cg6jACSkZ3iCWyqarhS7WSuPfMUih0gZpKXGSdSg4fQ6VbFQnj7ru24k4erRUTVdR04NrcH
Content-Type: application/json
X-Upload-Content-Type: text/plain; charset=utf-8
Accept-Encoding: gzip

{"bucket":"tembo-deployment-test","contentType":"text/plain; charset=utf-8","metadata":{"gcsfuse_mtime":"2017-04-07T15:29:07.544167408Z"},"name":"test.txt"}
http: ========== RESPONSE:
HTTP/2.0 403 Forbidden
Content-Length: 208
Content-Type: application/json; charset=UTF-8
Date: Fri, 07 Apr 2017 15:29:07 GMT
Server: UploadServer
Vary: Origin
Vary: X-Origin
Www-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/cloud-platform"
X-Guploader-Uploadid: AEnB2UpoWv_gpFyC_fxo8wV5bFBRUX9DLTWEzmNcymxDjERaaml3m-hv4BBmt_kErbFCYj8SYEwka0rkvomWyz1DbusJr-giLw

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "Insufficient Permission"
   }
  ],
  "code": 403,
  "message": "Insufficient Permission"
 }
}
http: ====================
gcs: Req              0x3: -> CreateObject("test.txt") (14.054889ms): googleapi: Error 403: Insufficient Permission, insufficientPermissions
fuse_debug: Op 0x00000004        connection.go:476] -> Error: "CreateChildFile: googleapi: Error 403: Insufficient Permission, insufficientPermissions"
fuse: 2017/04/07 15:29:07.567837 *fuseops.CreateFileOp error: CreateChildFile: googleapi: Error 403: Insufficient Permission, insufficientPermissions
fuse_debug: Op 0x00000005        connection.go:395] <- LookUpInode (parent 1, name "test.txt")
gcs: Req              0x4: <- StatObject("test.txt")
http: ========== REQUEST:
GET http://www.googleapis.com/storage/v1/b/tembo-deployment-test/o/test.txt?projection=full HTTP/1.1
Host: www.googleapis.com
User-Agent: gcsfuse/0.0
Authorization: Bearer ya29.EmQmBNtnKIPWQvvhLiCU-178OTVIA44gXrXRzQaNb5tBTfRpusKgmgmF83FR6QCI1Cg6jACSkZ3iCWyqarhS7WSuPfMUih0gZpKXGSdSg4fQ6VbFQnj7ru24k4erRUTVdR04NrcH
Accept-Encoding: gzip

http: ========== RESPONSE:
HTTP/2.0 404 Not Found
Content-Length: 165
Cache-Control: private, max-age=0
Content-Type: application/json; charset=UTF-8
Date: Fri, 07 Apr 2017 15:29:07 GMT
Expires: Fri, 07 Apr 2017 15:29:07 GMT
Server: UploadServer
Vary: Origin
Vary: X-Origin
X-Guploader-Uploadid: AEnB2UqxK0wYlDTOf4vT2j_X40E57dJJqEZf8YQL67c_x_3bURpf0xJVJIJuPpc17k0jHUiOAbk4JasDqZd9uD-NK0XNFODJXQ

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}
http: ====================
gcs: Req              0x4: -> StatObject("test.txt") (98.990226ms): gcs.NotFoundError: googleapi: Error 404: Not Found, notFound
fuse_debug: Op 0x00000005        connection.go:476] -> Error: "no such file or directory"

所以我需要向我正在连接的帐户授予权限。

4

2 回答 2

1

运行后$ gcsfuse nmjcloud_jar_test /gcp/gcsfuse/mount --key-file="/home/niaomingjian/gcpconfig/My First Project-6f9cff47c4f0.json"$ touch /gcp/gcsfuse/mount/test.txt在我的测试环境中成功创建了test.txt文件。

于 2018-02-27T11:23:17.640 回答
1

我已经对其进行了测试,这是一个凭据问题。我通过两次尝试得出了结论。

第一次尝试:

  1. 在一个新的虚拟机中,我安装了 gcsfuse。然后我安装了我的存储桶并尝试了以下操作:ls、cp、rm 和 touch。

结果:只有ls没有失败,其余的都报了I/O错误。

然后,在第二次尝试中,我尝试了:

  1. 我重新启动了实例(卸载存储桶)

  2. 我下载了一个具有计算实例中所有活动权限的服务帐户密钥,并将其作为 GOOGLE 应用程序凭据加载,代码为:

    $export GOOGLE_APPLICATION_CREDENTIALS=.json

*请注意我设置了“完整路径”,这意味着使用像“./key.json”这样的相对路径是不够的。必须配置真正的完整路径,否则它将不起作用。它必须是绝对的,例如:“home/ggrimaldo/key.json”。

  1. 安装铲斗并测试 ls、cp、rm 和 touch。他们做了所有的工作。

结论:尽管 gcsfuse 确实引发了 I/O 问题,但它是凭据问题。

创建你的 json 文件

gcloud iam service-accounts keys create ~/key.json --iam-account 245583959095-com

如果您不知道自己使用的是什么帐户

gcloud auth list
于 2018-03-19T17:55:39.397 回答