user1476207 user1476207 - 3 months ago 37
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

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.