我正在尝试使用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"
所以我需要为我正在连接的帐户授予权限。
答案 0 :(得分:1)
我测试了它,这是凭证的问题。我通过两次尝试得出结论。
第一次尝试:
结果:只有ls没有失败,其余的都给出了I / O错误。
然后,在第二次尝试中我尝试了:
我重新启动了实例(卸载存储桶)
我下载了一个服务帐户密钥,其中包含计算实例中的所有权限,并将其作为GOOGLE APPLICATION CREDENTIALS加载,代码为:
$ export GOOGLE_APPLICATION_CREDENTIALS = .json
*请注意我设置了“完整路径”,这意味着使用像“./key.json”这样的相对路径是不够的。必须配置真正的完整路径,否则它将无法工作。它必须绝对像:“home / ggrimaldo / key.json”。
结论:即使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文件。