Issue
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 ranchown -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 errormkdir: 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.
Solution
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.
Answered By - jacobsa