user1476207 user1476207 - 1 year ago 106
Linux Question

gcsfuse Input/Output error

I'm getting an Input/Output error when I try and create a directory or file in a google cloud storage bucket mounted on a linux (Ubuntu 15.10) directory.

Steps I have done:


  • Created a user named transfer

  • Created a
    /mnt/backups
    directory and ran
    chown -R transfer /mnt/backups

  • As the user transfer, ran
    gcsfuse --implicit-dir backup01-bucket
    /mnt/backups
    . The file system mounts successfully

  • Run
    mkdir test
    and get the error
    mkdir: cannot create directory test: Input/output error



Is there something I missed? What I'm trying to do is be able to ftp files to the server and store them in the google storeage bucket rather than local storage.

Update
I modified the command to get some debug information:

gcsfuse --implicit-dirs --foreground --debug_gcs --debug_fuse backup01-bucket /mnt/backups


Then ran
mkdir /mnt/backups/test
as the
transfer
user.

The following bedug information came out:

fuse_debug: Op 0x00000060 connection.go:395] <- GetInodeAttributes (inode 1)
fuse_debug: Op 0x00000060 connection.go:474] -> OK
fuse_debug: Op 0x00000061 connection.go:395] <- LookUpInode (parent 1, name "test")
gcs: Req 0x3a: <- StatObject("test/")
gcs: Req 0x3b: <- ListObjects()
gcs: Req 0x3c: <- StatObject("test")
gcs: Req 0x3c: -> StatObject("test") (53.375107ms): gcs.NotFoundError: googleapi: Error 404: Not Found, notFound
gcs: Req 0x3b: -> ListObjects() (59.061271ms): OK
gcs: Req 0x3a: -> StatObject("test/") (71.666112ms): gcs.NotFoundError: googleapi: Error 404: Not Found, notFound
fuse_debug: Op 0x00000061 connection.go:476] -> Error: "no such file or directory"
fuse_debug: Op 0x00000062 connection.go:395] <- MkDir
gcs: Req 0x3d: <- CreateObject("test/")
gcs: Req 0x3d: -> CreateObject("test/") (22.090155ms): googleapi: Error 403: Insufficient Permission, insufficientPermissions
fuse_debug: Op 0x00000062 connection.go:476] -> Error: "CreateChildDir: googleapi: Error 403: Insufficient Permission, insufficientPermissions"
fuse: 2016/04/04 06:51:02.922866 *fuseops.MkDirOp error: CreateChildDir: googleapi: Error 403: Insufficient Permission, insufficientPermissions
2016/04/04 06:51:08.378100 Starting a garbage collection run.
gcs: Req 0x3e: <- ListObjects()
gcs: Req 0x3e: -> ListObjects() (54.901164ms): OK
2016/04/04 06:51:08.433405 Garbage collection succeeded after deleted 0 objects in 55.248203ms.


Note: If I create a directory in the web console I can see the directory fine.

Answer Source

It appears from the Insufficient Permission errors in your debug output that gcsfuse doesn't have sufficient permissions to your bucket. Probably it has read-only access.

Be sure to read the credentials documentation for gcsfuse. In particular, if you're using a service account on a GCE VM make sure to set up the VM with the storage-full access scope.