gcsfuse touch:无法触摸'test2 / test.txt':输入/输出错误

时间:2017-04-05 15:34:27

标签: google-cloud-platform google-cloud-storage gcsfuse

我正在尝试使用gcsfuse安装Google存储桶。我能够挂载它,但是当我尝试使用touch来测试其中的文件时,我收到输入/输出错误消息。

以下命令显示,尝试连接到Google云端没有任何错误

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"

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

2 个答案:

答案 0 :(得分:1)

我测试了它,这是凭证的问题。我通过两次尝试得出结论。

第一次尝试:

  1. 在新的虚拟机中,我安装了gcsfuse。然后我安装了我的水桶并尝试了以下操作:ls,cp,rm和touch。
  2. 结果:只有ls没有失败,其余的都给出了I / O错误。

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

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

    2. 我下载了一个服务帐户密钥,其中包含计算实例中的所有权限,并将其作为GOOGLE APPLICATION CREDENTIALS加载,代码为:

      $ export GOOGLE_APPLICATION_CREDENTIALS = .json

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

      1. 安装水桶并测试ls,cp,rm和touch。他们做了所有工作。
      2. 结论:即使gcsfuse确实引发了I / O问题,但它仍然是凭据问题。

        创建你的

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

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

        gcloud auth list
        

答案 1 :(得分:0)

运行$ 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文件。