
Show HN: Google Drive as a file system - harababurel
https://github.com/harababurel/gcsf
======
harababurel
Hello everyone!

I have built a tool that allows Linux and macOS users to mount their Google
Drive account locally as a virtual file system. The file system supports most
typical operations (creating/deleting/moving/renaming files and directories,
reading/writing to them).

It can also export special Drive files as OpenOffice documents and has an in-
memory cache which improves the speed of navigation and file access. Changes
performed on other clients (e.g. on the web or mobile interface) are usually
detected shortly and applied locally as well.

I also wrote a paper[0] on it, as I am using the project for my bachelor
thesis.

It is still rough around the edges and lacks some functionality, but for the
moment it is good enough for my personal use. I am looking forward to hearing
your comments and feedback on how to improve it.

[0]
[https://sergiu.ml/~sergiu/thesis.pdf](https://sergiu.ml/~sergiu/thesis.pdf)

~~~
kbumsik
As an undergrad thesis? Wow you are amazing! I'm wondering how it differ from
the existing Google Drive FUSE project? [1]

[1]: [https://github.com/astrada/google-drive-
ocamlfuse](https://github.com/astrada/google-drive-ocamlfuse)

~~~
cheez
I did one as well. It's a no brainer: a semester to do whatever you want as
long as you get someone to agree to mark it.

~~~
chatmasta
It was required for us, one semester of “independent study” where you must
select a research adviser (professor) and produce a final report. I did mine
on “TorCoin” and it was an awesome experience, the only time I legitimately
enjoyed school.

~~~
cheez
Definitely not the only time I enjoyed school, but definitely my favourite
part.

------
c1yd3i
What about Google Drive File Stream?

[https://support.google.com/drive/answer/7329379?hl=en](https://support.google.com/drive/answer/7329379?hl=en)

~~~
qrbLPHiKpiux
I use this at work and it’s very good.

~~~
discreditable
Same here. I wish they offered it for personal accounts. I would happily start
paying for Drive to use it.

~~~
applecrazy
I’m not sure if it’s what you’re looking for, but Backup and Sync is a similar
Drive sync utility made by google for personal accounts. The only feature that
it doesn’t have is file-level sync settings (afaik B&S only has folder level
sync options)

~~~
discreditable
Backup and Sync lacks the coolest feature of File Stream. File Stream allows
you to download files when you access them instead of keeping them all on your
PC. For someone like me with lots of photos, a smallish SSD, and a fast
internet connection it's very convenient.

~~~
qrbLPHiKpiux
Saves a huge amount of machine resources, too. Some folders are GB’s big we
have to share.

------
hemancuso
Very cool!

I ship a similar product that has included Google Drive integration (and many
other back ends) since 2013 -
[https://www.expandrive.com](https://www.expandrive.com) \- happy to answer
any questions too!

~~~
bklaasen
When is Linux support coming?

~~~
hemancuso
In beta!

------
_hl_
Very cool, I think I will try using this as my standard google drive solution
on linux.

One thing I haven't found in your paper is how the software handles conflicts.
Suppose I have two or more machines hooked up to the same account, all
simultaneously modifying the same file in different ways. What's going to
happen? I guess this would be mostly up to the server side and out of your
control, but maybe you can point me to a specification on how such issues are
handled?

~~~
harababurel
Some unwanted behavior might occur in scenarios like the one you describe.
Most probably, the change performed by one client will silently overwrite the
other. If there is however a small gap between the operations, the earlier one
will have a better chance of being picked up by Drive and detected by the
other file system instance. In this lucky case there might be no data loss.

I would set the `sync_interval` configuration parameter to a low value to
improve the chances of detecting changes as soon as they appear, but I would
also try to make sure that only one client works on a certain file/directory
at one time.

This case looks like a good area for future improvement. Thank you for
addressing the issue!

------
Immortalin
Congrats on shipping! How does this compare to
[https://github.com/astrada/google-drive-
ocamlfuse](https://github.com/astrada/google-drive-ocamlfuse)

aside from the programming language?

~~~
harababurel
Thank you! I think google-drive-ocamlfuse is an excellent product. It is
clearly more mature and has more features than GCSF.

I made a comparison between the two projects in sections 4.2 and 4.3 of my
thesis [0]. In short, GCSF tends to be faster in several cases (listing files
recursively, reading large files from Drive). The caching strategy it uses
also leads to very fast reads (x4-7 improvement compared to google-drive-
ocamlfuse) for files that have been cached, at the cost of using more RAM.

On the other hand, I arrived at the conclusion that google-drive-ocamlfuse
provides a better overall experience, as it already has an active community
behind it. My goal with GCSF is to more or less close the gap between the two
projects and reach the same level of functionality.

[0]
[https://sergiu.ml/~sergiu/thesis.pdf](https://sergiu.ml/~sergiu/thesis.pdf)

~~~
rb2k_
Any comparisons to rclone's gdrive integration? Seems that rclone probably has
the biggest userbase of the "google drive fuse mount" tools.

~~~
carewornalien
Ditto. I'm using clone for this same function. I'm using it for casual file
access (not lots of intensive access every day all day) but I'd like to know
of there is any benefit to this over rclone, since as mentioned rclone has a
pretty big user base..

------
TheNetEffect
Fuse has been around for a while, in fact MacFuse was an implementation that
was open sourced by Google, although no longer workable given the advances of
the MacOS. There is now OSXFuse which is used by a few commercial applications
including Transmit and the Storage Made Easy Cloud Service which uses it to
support multiple backends including Google Drive and Google Storage.

On Windows there are Fuse implementations but they are not as rock solid as
OSXFuse on Mac. The best commercial implementation Windows FUSE I'm aware of
is CallbackFS.

------
Bromskloss
I'm getting an error when compiling (`cargo build`), both on stable and
nightly Rust:

    
    
        error: failed to run custom build command for `fuse v0.3.1`
        process didn't exit successfully: `/home/bromskloss/code/gcsf/target/debug/build/fuse-46607682b28e6d4c/build-script-build` (exit code: 101)
        --- stderr
        thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Failure { command: "\"pkg-config\" \"--libs\" \"--cflags\" \"fuse >= 2.6.0\"", output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "Package fuse was not found in the pkg-config search path.\nPerhaps you should add the directory containing `fuse.pc\'\nto the PKG_CONFIG_PATH environment variable\nNo package \'fuse\' found\n" } }', libcore/result.rs:945:5
        note: Run with `RUST_BACKTRACE=1` for a backtrace.
    

Am I doing it wrong?

~~~
harababurel
See this issue[0]. tl;dr: make sure you have the libfuse-dev package
installed.

[0]
[https://github.com/harababurel/gcsf/issues/9](https://github.com/harababurel/gcsf/issues/9)

------
amelius
It's always good to see services of big companies being turned into highly
useful but faceless commodities!

------
mobitar
There's a similar tool someone made for Standard Notes to mount your notes as
a filesystem:

[https://github.com/tannercollin/standardnotes-
fs](https://github.com/tannercollin/standardnotes-fs)

~~~
dddw
now that is helpfull for me migrating to standard notes!

------
ranfdev
Hey, thanks for the awesome work! I always wanted something like "one drive on
demand"[0] but for linux. Maybe in the future you could add an option to keep
some files offline. By doing that, Linux would have a real alternative to one
drive [0][https://support.office.com/en-us/article/learn-about-
onedriv...](https://support.office.com/en-us/article/learn-about-onedrive-
files-on-demand-0e6860d3-d9f3-4971-b321-7092438fb38e)

------
partycoder
Back in ~2005 someone did this with Gmail.

[https://en.wikipedia.org/wiki/GmailFS](https://en.wikipedia.org/wiki/GmailFS)

It did not turn out very well, though.

------
nkkollaw
I don't get it. Isn't this the same as what implemented natively in GNOME, or
with Backup and Sync on Windows and MacOS?

~~~
harababurel
Not sure what you are referring to as implemented natively in GNOME.

One crucial difference is the fact that Backup and Sync picks up local files
(which exist physically on the user's machine) and uploads them to a special
Drive directory in the background. GCSF does not store anything locally unless
you tell it to. It simply creates a virtual directory and reports its content
and file tree structure so that it matches whatever exists on Drive.

~~~
quiq
I think GP is referring to the Gnome Virtual File System (GVfs) [1], which has
a number of pluggable backends, one of which being Google Drive. I've used it
lightly and it seemed to "just work."

[1]
[https://wiki.gnome.org/Projects/gvfs](https://wiki.gnome.org/Projects/gvfs)

~~~
federicoponzi
Yeah probably he was talking about that. But for my Mate, GVfs is not an
option :(

------
webmaven
Stupid question[0]: What do the initials _GCSF_ stand for?

[0] Yes, I know there are no stupid questions, only inquisitive idiots.

~~~
harababurel
The question is not stupid at all, but the answer is :). GCSF stands for
"Google Conduce Sistem de Fișiere" \-- a (bad) word-by-word Romanian
translation of "Google Drive File System".

~~~
webmaven
And I see that you've now added the explanation to the README:

[https://github.com/harababurel/gcsf/commit/3d5ba8ffff2a18bf0...](https://github.com/harababurel/gcsf/commit/3d5ba8ffff2a18bf010d329df876e08550e15c57)

------
johnboyer
Although this is fairly nice, I would recommend Syncthing over this. It has
the benefit of not relying on any third party to store your data, it's all
exclusively on your devices, along with some very solid security.

~~~
WhyNotHugo
Syncthing is pretty much a compeltely different thing.

I use Syncthing a bunch, but I don't really see any overlap between it and
this tool.

~~~
johnboyer
From my understanding, the primary purpose of this is for backup and syncing
your Google Drive files between multiple devices, which is very similar in
nature to Syncthing. Is there something else that I am missing?

------
Bromskloss
Could you please rewrite it in Ru… Oh, it _is_ written in Rust! :-)

------
Pmop
Ain't FUSE a really wonderful thing?

Edit: "fuse" to uppercase.

------
vasili111
What about Windows support?

~~~
egeozcan
Paid but actively developed with responsive developers:
[https://mountainduck.io/](https://mountainduck.io/)

------
dustingetz
The drive app will sync a folder in your home directory if you are a busy
person like me and need a one click 90% solution.

I once synced my whole home directory but that turned out to be a bad idea
because random applications put their junk there.

------
IloveHN84
I use it from GnomeShell 3.28, it works pretty solid

------
jpatokal
How does this differ from Google's own Filestore?

[https://cloud.google.com/filestore/](https://cloud.google.com/filestore/)

~~~
fulafel
Filestore seems NFS-based and can't access Google Drive, just its own GCP
volumes.

------
mandeepj
is this drive same as the drive\directory that you get when you install
"OneDrive"?

~~~
harababurel
I haven't use OneDrive, but I think it is similar to the Backup and Sync app
for Google Drive, which targets a different purpose than this project.

------
Tenobrus
How does this compare to `rclone`?

~~~
namibj
Seconded, there are widely deployed alternatives, specifically rclone (mount)
and plexdrive. The former is, for backup purposes, better used via it's CLI,
mostly due to how it relays IO errors up and the fact that many applications
are too dumb to retry filesystem errors, or even not crash completely.

------
mikevm
Does this support Team Drives?

~~~
harababurel
Not at the moment. I would like to add this feature in an upcoming version.

------
FuckOffNeemo
How far away are from making the 'Download More RAM' meme redundant I wonder?

Excellent work harababurel :)

Edit: words

------
Endy
Why do you trust Google enough to do this?

