Google Driveをマウントする

目次

google-drive-ocamlfuse を使用して、Google Drive を Linux (Ubuntu)にマウントした。このマウントした Google Drive のフォルダを Samba で共有する時には、マウント時にallow_otherオプションが必要だった。

目的

Google Drive のフォルダのファイルをアップロードしたいが、直接インターネットに接続できないマシンにファイルがある。そのため、一旦 Samba マシンにファイルをコピーして、そこから Google Drive にファイルをアップロードしていました。

この手間をなくすため、Google Drive をファイルシステムと同じように直接マウントしてしまい、それを Samba でネットワークで共有することにしました。

方法

Google Drive とローカルファイルシステムを同期させるには、Rcloneを使用しています。

しかし今回は、ファイルやディレクトリを同期させたいのではなく、ただマウントしたいだけですのでgoogle-drive-ocamlfuseを使用します。

インストール方法

インストールは、Ubuntu の場合パッケージが用意されているので、Getting started にしたがってインストールするだけです。

$ sudo add-apt-repository ppa:alessandro-strada/ppa
$ sudo apt update
$ sudo apt install google-drive-ocamlfuse

Google Drive をマント

Google Drive の毎度ライブをマウントするディレクトリーを指定してgoogle-drive-ocamlfuseを実行します。

初回起動時は、Web ブラウザーが立ち上がり、必要ならユーザ認証の後で Google Drive へのアクセス許可を求められます。

$ google-drive-ocamlfuse ~/gdrive

Google Drive をアンマント

Google Drive アンマウントするときには、sudo umountでもいいですが、FUSE を使用しているのでfusermount -uを使用します。

$ fusermount -u ~/gdrive

オプション

google-drive-ocamlfuseには、次のようなオプションがあります。

オプション 機能
-debug マウント後もフォアグラウンドにとどまります。^Cで終了し、同時にアンマウントされます。
-o nonempty マウントポイントが空でなくともマウントします。もともとあったファイルなどは、マウントにより見えなくなります。
-o allow_other 他のユーザも読み書きできるようにします。ただしパーミッションの設定で許可されていれば。

特定フォルダをマウント

共有アイテムや特定のフォルダをマウントしたい場合には、google-drive-ocamlfuseの設定ファイル.gdfuse/default/configを編集してルートとなるフォルダの ID をroot_folderに設定します。

フォルダの ID は、Web ブラウザで開いた時のアドレスがhttps://drive.google.com/drive/folders/123456789abcdefgfとすると、最後の/から右の数字とアルファベットです。この例だと123456789abcdefgfが ID で、.gdfuse/default/configを次のように記載します。

# 編集前
#root_folder=

# 編集後
root_folder=123456789abcdefgf

共有アイテムをマウント

共有ドライブをマウントしたい場合は、google-drive-ocamlfuse 複数の GoogleDrive アカウントを ubuntu で使うによるとteam_drive_idを指定する必要があるとなっていました。

しかし共有アイテムと名称が変わって仕様も変わったのか、ただroot_folderにマウントしたいフォルダの ID を指定するだけでマウントできました。

Samba で共有

マウントした Google Drive を Samba で共有するときには、-o allow_otherオプションを付ける必要があります。

また同時に-o allow_otherを使用できるように、/etc/fuse.confを次のように修正する必要があります。Ubuntu のパッケージでは、user_allow_otherがコメントアウトされていました。

# 編集前
# user_allow_other

# 編集後
user_allow_other

この設定が必要なのは、Samba が別のユーザで動いているからではないかと思っています。

他のアプリ

Google Drive をマウントできるアプリには、このgoogle-drive-ocamlfuseの他に、gcsfがあります。google-drive-ocamlfuseよりも少し速いという噂です。

コンパイル済みのバイナリが用意されていますので、インストールはダウンロードして un-tgz するだけです。

ただし Ubuntu 20.04 では、libssl のバージョンが合わず使用できませんでした。そのため使用するには、Rust のコンパイル環境を整えて、自分で実行ファイルを作成する必要があります。

トラブル

例によって何もしていないのに Google Drive をマウントしたら次のようなエラーが発生した。

$ google-drive-ocamlfuse -o allow_other ~/gdrive
$ ls ~/gdrive

ls: ディレクトリ 'gdrive' を読み込んでいます: 入力/出力エラーです
ls: reading directory 'gdrive': Input/output error

似た症例を探すとcannot access ‘directory’: Input/output error #607が見つかりました。しかし、有効なワークアラウンドは示されていません。

私の場合は、次のように cache を削除したら解消しました。

rm .gdfuse/default/cache/*