RcloneでクラウドストレージをLinuxに自動マウント

## 概要

[Rclone](https://rclone.org/)は、DropboxやOneDriveなどのクラウドストレージをコマンドラインで管理できるツールで、Linux,Windows,Macで利用可能。一旦マウントすると、様々なクラウドストレージにローカルに作ったディレクトリと同じような感覚でアクセスできるので便利！（最初に知ったときは、「待ってましたこのツール！！」と一人盛り上がったw）
今回はLinuxマシンを対象に、Rcloneを使ってクラウドストレージを自動マウントする方法を紹介する。

## 動作確認環境

* OS : Ubuntu 20.04
* クラウドストレージ
    * Google Drive
    * Dropbox
    * Microsoft OneDrive

## 事前準備

具体的な内容は、以下に示した公式サイトのリンクを参照。ここには補足内容のみ記載。

*  [インストール](https://rclone.org/install/)
*  [各ストレージの認証設定](https://rclone.org/docs/)
    * 「Configure」セクションに、対応しているクラウドストレージ一覧がある。そこから対象ストレージへのリンクをクリックして、書かれている手順にしたがって設定すればOK。
    * 設定内容はデフォルトだと、``~/.config/rclone/rclone.conf``に格納される模様
* マウント確認
    * ``storage_name``は「各ストレージの認証設定」の``name>``で設定した名前を記載。マウント元のパスを指定したい場合は、``:``の後にパスを入れればOK
    * ``/path/to/mount``はマウント先のパス名

```
$ rclone mount storage_name: /path/to/mount &
$ ls /path/to/mount
(マウント先のファイルが出てくるはず)
```

上記は確認用なので、一旦マウント解除

```
$ umount /path/to/mount
```

## 自動マウント設定

上記で動作確認したマウントを、Linuxマシン起動と同時に自動でできるようにしたい。
記載する内容は、公式サイトの[Rclone as Unix mount helper](https://rclone.org/commands/rclone_mount/#rclone-as-unix-mount-helper)に書かれている内容からの抜粋なので、ご興味ある方はこちらも参照されたし。

### マウントタイプに「rclone」を追加

cifsとかnfsであれば、必要パッケージを入れれば``mount -t cifs ...``等でマウント時にtype指定できるはず。rcloneも同様に``mount -t rclone ...``でマウントできるようにしたい。そのために以下コマンドで、``/sbin/``配下にシンボリックリンクを作る。

```
$ sudo ln -s /usr/bin/rclone /sbin/mount.rclone
```

念のため、``-t rclone``でマウントできるか確認してみる。
（mountコマンドはrootユーザしか使えないらしいので注意）

```
$ sudo mount storage_name: /path/to/mount \
-t rclone \
-o vfs_cache_mode=writes,config=[rclone.confファイルへのパス]
(エラーが出なければOK)
$ sudo ls /path/to/mount
(マウント先のファイルが出てくるはず)
$ sudo umount /path/to/mount
```

### マウントの設定ファイル追加

``/etc/systemd/system/``に、拡張子が.mountの設定ファイルを追加する

```mount:/etc/systemd/system/path-to-mount.mount
[Unit]
After=network-online.target
[Mount]
Type=rclone
What=storage_name:
Where=/path/to/mount
Options=rw,allow_other,args2env,vfs-cache-mode=writes,config=[rclone.confファイルへのパス],cache-dir=/var/cache/rclone
```

* 補足
    * キャッシュ用ディレクトリがない場合は、併せて作っておく。

        ```
        $ sudo mkdir /var/cache/rclone
        ```

        * ↑22/08/13追記
            * ``/var/cache/rclone``しばらく使っていると容量が肥大化するので注意が必要。
            * 容量削減のためのコマンドが現時点でわかっていないが、手動削除(``sudo rm -rf /var/cache/rclone/*``)しても問題なさそう。ただし消す際は自己責任で。
    
    * 設定ファイル名は自動マウントしたいパスのフルパス名にする必要がある模様。例えば``/mnt/aaaa/bbbb``にがマウント先であれば``mnt-aaaa-bbbb.mount``のようにディレクトリのスラッシュ(/)をハイフン(-)に置き換えたファイル名にすればいいはず。（systemdのmount設定の公式ドキュメントを要確認ですね…）
    * 上記設定のままだとマウント後に所有者がrootになってしまう。他のユーザを所有者にしたい場合は、``Options=``に``uid=[ユーザID],gid=[グループID]``のパラメータを追加すればいいみたい。

### 自動マウント(automount)設定

[公式ドキュメント](https://rclone.org/commands/rclone_mount/#rclone-as-unix-mount-helper)によると、「以下２つのいずれかの方法でsystemdのautomount設定をしてね」と書いてある。（「optionally」と書いてあるので必須ではないと思ったのだが、これをやらないと自動マウントに成功しなかった…）

* (1) ``/etc/systemd/system/``に``.automount``の拡張子で設定ファイルを作る
* (2) ``/etc/fstab``に設定を追加する

筆者はsystemdの設定にあまり習熟してないので、(2)の``/etc/fstab``でやってみた。
以下が``/etc/fstab``への追加例。書いている内容は今まで出てきたので特筆すべき点は無し。

```/etc/fstab
storage_name: /path/to/mount rclone rw,noauto,nofail,_netdev,x-systemd.automount,args2env,vfs_cache_mode=writes,config=[rclone.confファイルへのパス],cache_dir=/var/cache/rclone 0 0
```

設定追加したら、~~PCを再起動~~systemctlで対象サービスを開始。
（もともと「PC再起動」と書いていたが、おそらく再起動不要）

```
$ sudo systemctl start path-to-mount.mount
```

その後、マウントしたはずのパスを確認してみる。

```
$ (sudo) ls -l /path/to/mount
(見事にアクセスできたら成功！)
```

#### トラブルシューティング？（22/05/22 追記）

下記のように上手くアクセス出来ない現象が生じた場合、
```
$ ls -l /path/to/mount
ls: cannot access '/path/to/mount/': No such device
$ ls -l /path/to/
ls: cannot access '/path/to/mount': No such device
total 8
drwxr-xr-x 3 root root 4096 May 19 14:02 ./
drwxr-xr-x 3 root root 4096 May 19 14:02 ../
d????????? ? ?    ?       ?            ? mount/
```

以下の可能性を疑って再確認してみると、解決する可能性あり。
* (1) ``/etc/systemd/system/``に作った``.mount``ファイルの設定ミス
* (2) 自動マウントの設定ファイル（``/etc/fstab``等）の記載ミス
* (3) マウントするディレクトリの権限設定

筆者が実際に直面したのは(1)で、``.mount``ファイルのWhat以降の名前が``rclone.conf``で定義されている名前と一致していなかった。(2)(3)によるエラーが出た経験はないが、可能性として記載する。

## おわりに

ファイルアクセス速度的にも問題なければ、これですごく便利に使えそう！