rcloneでGoogleDriveとかDropBoxとかをお洒落にマウントする
クラウドストレージを自分のパソコンにマウントすると、 ローカルのディレクトリツリーに組込まれるので、 速度は別としてもクラウドストレージであることを意識しなくてよくなり、 とても便利に使うことが出来るようになります。
そして、これを実現してくれるのがrcloneです。 このノートでは、archlinuxでrcloneを利用し、 クラウドストレージをマウントして活用する具体的な方法を紹介します。
さて、 巷には、無料でも利用できるクラウドストレージ、例えば、GoogleDriveやDropBoxがあります。 このノートを読み始める前に、クラウドストレージをrcloneに登録しておいて下さい。 rcloneへクラウドストレージを登録する方法は、 「 rcloneでお洒落にクラウドストレージを扱う 」 でGoogle driveでの登録例を紹介しています。参考にして下さい。
rcloneのmountコマンド
まず、rcloneには、クラウドストレージをマウントするコマンドがあります。 登録したクラウドストレージの名前を「okgstrage」とし、 マウントする場所を ~/GoogleDrive/ ディレクトリとすると、 マウントするためのrcloneコマンドは、次の様になります。
$ rclone mount okgstrage: ~/GoogleDrive/
このコマンドを実行すると、マウント処理がフォアグラウンドで行なわれるため、 プロンプトが戻ってきません。 別のターミナルを開いて、~/GoogleDrive/をlsコマンド等で確認してみて下さい。
マウントを終了するには、rcloneを実行したターミナルで、 Ctrl+C を押します。
または、別のターミナルで、 umount コマンドを実行します。
$ umount ~/GoogleDrive/
バックグラウンドでの起動と終了
バックグラウンドで実行させる場合は &をコマンドの末尾に付けるか、 --daemonオプションを付けます。
$ rclone mount okgstrage: ~/GoogleDrive/ &
または、
$ rclone mount okgstrage: ~/GoogleDrive/ --daemon
バックグラウンドで実行されている場合は、umountコマンドでアンマウントします。
$ umount ~/GoogleDrive/
rclone mountのオプション
rcloneで、クラウドストレージを利用する場合、
Virtual File Systemの機能を十分活用するために、
--vfs-cache-mode
オプションを付ける必要があります。
まずは、適当な場所にキャッシュ用のディレクトリを作成します。
$ mkdir -p ~/.local/var/rclone
rclone mountコマンドを実行する時、 vfsキャッシュを利用するために、次のオプションを付けるようにします。
$ rclone mount okgstrage: ~/GoogleDrive/ --daemon \
--cache-dir ~/.local/var/rclone \
--vfs-cach-mode full
マウントはrcloneだけで出来るが、、
この様に、rcloneには、マウントをするためのコマンドが用意されており、 これを使えば簡単にマウントすることが出来ます。
しかし、マウントは自動的にされた方がやはり便利です。 通常、ローカルストレージは、 archlinuxの場合、systemdによって自動的にマウントされています。 そして実は、rcloneで管理するクラウドストレージも systemdで管理して、自動的にマウントする事が出来ます。 次の項目から、systemdでの管理の仕方を紹介します。
mountコマンドとrclone mountコマンド
Unix系のシステムでマウントするために使われる/bin/mountコマンドは、 -t FSTYPEオプション毎に/bin/mount.FSTYPEが呼び出されるようになっています。 そこで、rcloneについて、以下のシンボリックリンクを張ることで、 mountコマンドでrcloneを呼び出すことが出来るようになります。
$ sudo ln -s /usr/bin/rclone /bin/mount.rclone
2022年12月現在のarchlinuxのパッケージでrcloneをインストールする場合、 このシンボリックリンクも自動的に作られているはずです。 一方、以前にこの記事を読んで自分でシンボリックリンクを張った場合、 rcloneパッケージのアップデートしようとした時にコンフリクトのエラーが出るので、 その場合は、自分で張ったシンボリックリンクを一旦削除してから、アップデートをしましょう。
シンボリックリンクが張れたら、mountコマンドに
-t rclone
オプションを渡して、
マウントしてみましょう。
$ mount okgstrage: ~/GoogleDrive -t rclone
mountコマンド経由で、rclone mountのオプションを渡す事が出来ますが、
書式がmountのものになります。先に示した
--cache-dir
や
--vfs-cache-mode
の書き方は次のようになります。
$ mount okgstrage: ~/GoogleDrive -t rclone \
-o cache-dir="~/.local/var/rclone",vfs-cache-mode=full
以上の様に、rclone mountは、システムの中で、
mountコマンドで置き換える事が出来るようになりました。
つまり、システムは、mountコマンドを使って、
他のファイルシステムと同じ様に、
GoogleDriveやDropBoxをマウント出来るようになったのです。
どういうことかと言えば、
/etc/fstab
に
クラウドストレージとマウントポイントとオプションを書いておけば、
システムが自動でマウントしてくれるということです。
ですから、rclone mountでクラウドストレージを自動でマウントする場合、 自分で自動マウント用のスクリプトなんかを書いたりはしないのです。 rcloneによって、mountで扱えるファイルシステムを拡張するイメージです。 「自動マウント」自体は、システムがmountのために使っている、 systemdを利用します。
systemd --userを設定
systemdについて、さっぱり解らないという人は、 「 systemd archwiki(jp) 」 を見てみましょう。
systemdには、システム全体を設定するものと、 各ユーザーが自分のために起動できるものの2種類があります。
一般的に、ストレージデバイスのマウントは、
システム全体の話なので、システム全体の設定として行なわれます。
先に紹介したように、実際、
/etc/fstab
に書かれた設定から、
マウントを行なうのは、システムの設定を行なうsystemdが行なっています。
しかし、個人的なクラウドストレージのマウントの場合、 特定のユーザーが自分のために、 自分のホームディレクトリ以下のどこかのディレクトリに マウント出来るほうが自然ですし、 それをユーザーが自分の権限で出来るようにしたほうが便利です。
ですから、ここでは、ユーザーサービスとしてのsystemdでの管理を紹介します。
systemdのユーザー用のユニットファイルを置く場所
systemdでは、各設定の単位を「ユニット」と呼んでいるので、 設定ファイルのことも「ユニットファイル」と呼んでいます。
ユーザー用のユニットファイルは、
~/.config/systemd/user/
ディレクトリ以下に配置します。
ユニットファイルの名前
実は、マウントに関するユニットファイルは、
そのファイル名がマウントポイントのパスを表わします。
ですから、作業を始める前に、マウントポイントを決めておきましょう。
うちでは、
/home/neko/GoogleDrive
です。
この場合のユニットファイル名は、
home-neko-GoogleDrive.mount
になります。
パス区切りをハイフンにして、拡張子を.mountにします。
このユニットファイルを
~/.config/systemd/user/
に作成します。
$ vim ~/.config/systemd/user/home-neko-GoogleDrive.mount
ユニットファイルの中身
このユニットファイルの雛形は、以下のようになります。
[Unit]
After=network-online.target
[Mount]
Type=rclone
What=okgstrage:
Where=/home/neko/GoogleDrive
Options=vfs-cache-mode=full,cache-dir=/home/neko/.local/var/rclone
[Install]
WantedBy=default.target
雛形の中で自分の環境に合せて書き換える必要がある部分は、 まず、「What」項目です。rcloneに登録したクラウドストレージ名にします。 そして、セミコロンを忘れないようにしましょう。
次は、「Where」項目です。自分で決めたマウントポイントに書き換えます。
最後は、「Options」項目です。 先に紹介したとおり、rcloneでは、 Virtual File System用のキャッシュが必要で、 そのために作った自分用のディレクトリパスに書き換えます。
ユニットの起動と終了
ユニットの起動は、 systemctlコマンドで行ないます。
$ systemctl --user start /home/neko/GoogleDrive
引数で渡している、マウントポイントのパスは各自のマウントポイントのパスに書き換えて下さい。
ユニットの終了は、次の様になります。
$ systemctl --user stop /home/neko/GoogleDrive
ユニットの自動起動
上記の作業で、マウントが上手く出来ることが確認できたら、 システムが起動したときに、いつでも自動でマウントしてくれるようにします。 次のコマンドを実行しましょう。
$ systemctl --user enable home-neko-GoogleDrive.mount
他のコマンドのように、マウントポイントで指定するとエラーになるようなので、 引数にマウントポイントでは無く、ユニットファイル名を指定します。
上記の様なエラーが出た場合、慌てず、ユニットファイル名で指定しなおしてあげればOKです。
enableコマンドは、「今」ユニットを起動するコマンドでは無いことに注意が必要です。 システムを再起動してみましょう。
ユニットの状況については、systemctl statusコマンドで確認できます。
$ systemctl --user status /home/neko/GoogleDrive
また、自動起動をやめたい場合は、systemctl disableコマンドを使います。
$ systemctl --user disable home-neko-GoogleDrive.mount
No comments: