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/*