rclone コマンドが便利
rclone コマンドは、各種のストレージサービス間でデータの転送が出来るように設計されたクライアントコマンド。
rclone は数多のクラウドと連携してクラウド間でデータ転送を行うことが出来て、各種サービスのフロントエンドプログラムを個別にインストールしなくてもまとめて使えるのでとても便利。
rclone で出来ること
強いよね。
対応してるクラウド
メジャーなものはたいてい対応してる
- SFTP
- Google Drive
- Amazon Drive
- DropBox
- OwnCloud / nextCloud
SFTPとowncloud サポートが在るので、rclone 使っててクラウド料金が嵩んだとして、自鯖で生き残れそうですね。
rclone のインストール
macOS / OS X
brew install rclone
debian
sudo apt install rclone
ubuntu server には apt パックに rclone がなかった
ubuntu などその他
curl https://rclone.org/install.sh | sudo bash
rclone を使ってみる
リモート設定をするのはちょっとあとにして、まずは使ってみる
rclone sync ~/Desktop/sample ~/Desktop/backup rclone copy ~/Desktop/sample.txt ~/Desktop/copied.txt
ローカルで使えることがわかった。
google driveにアクセス設定をする
google drive にアクセするには2つの手順が必要
- rclone をOAUTH クライアントとして設定
- Driveのアクセス権限を rclone にOAuthで渡す。
rclone に oauth クライアントIDを設定
- 新規プロジェクト作成
- 作ったプロジェクトで Google drive api を有効にする。
- 作ったプロジェクトのoauthクライアントIDを作る
- 作ったプロジェクトのoauthシークレットを取り出す。
つまり、誰のGoogle アカウントのAPI権限で rclone を動かすのかって言う設定ですね。
create credentials で oauth client を選べばおっけ
google drive の許可設定
つぎに、アクセスしたい google drive のオーナーから 、 rclone に許可を出す必要がある。
rclone に google drive を設定する。
rclone config コマンドで、新規作成する。
takuya@~$ rclone config e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q>
クライアントのIDとシークレットをいれる。
rclone をどのプロジェクトとして動かすかの先程設定したクライアントIDを設定して決定する
Storage> 9 Google Application Client Id - leave blank normally. client_id> lrgchkfmyhsdr7ey Google Application Client Secret - leave blank normally. client_secret> uzhjqwosqs9zgxqa
空白でもいいっていうメッセージが出て来るが、これを空白にすると、403 Rate Limite Exceeded で苦しむことになる。端的に言うと、rclone を使ういろいろな人と クライアントIDを共有するので、転送上限も共有することとなって、上限になっちゃうよってことでしょうね。→ https://github.com/ncw/rclone/issues/1591
OAuthでrclone Drive のアクセス権限を渡す。
最後に、 OAuth して、ブラウザが起動されるので、「使いたいドライブのオーナー」としてログインして、rclone にアクセス権限を渡す。
ブラウザ経由のOAuthの権限委譲の、この処理が挟まるので、出来る限りサーバや仮想マシンや docker イメージで rclone を設定せずにデスクトップの端末でrclone を初期設定するべき。楽だからね。
設定まとめ。
「rclone が、誰のAPIアクセスとして、誰のドライブを扱うのか」です。
登場人物は3つ、
- rclone (アプリ
- API IDの保持者
- ドライブの保持者
ですね。
設定ファイルのコピーと移動
設定ファイルは次の場所に保存される。
~/.config/rclone/rclone.conf
このファイルの中に、クライアントIDとOAuthのアクセストークンが入ってるので厳重に管理する。
このファイルをコピーすれば、別のパソコンやサーバーで設定しなくても同じ設定が使えるようになる。
rclone の設定一覧
rclone でいまどのクラウド・ドライブを設定しているか一覧を見るにはこれ。
rclone listremotes
rclone でGoogle Driveのフォルダを見る
rclone lsd myDrive: rclone lsd myDrive:/ #または
rclone でGoogle Driveの最上位ディレクトリを見ることが出来る。
rclone で 特定のフォルダの中を見てみる
rclone ls myDrive:/name/to/my/forlder
フォルダの名前でアクセスできるから便利!
rclone で同期する
sync で同期する
## dry-run rclone sync -n /path/to/my/folder myDrive:/name/to/my/forlder ## not dry-run rclone sync /path/to/my/folder myDrive:/name/to/my/forlder
sync するとローカルに無くて、リモートに在るファイルは「削除」されるので手作業で試すときはかならず -n
をつけること
同期の書き方
rclone sync SRC DST
同期するときは SRC のファイルがDSTに転送される。SRCとDSTが絶対に同じ状態になる。
- SRC になくて、DSTにだけ在るファイルは削除される。
- DST になくて、SRCにだけあるファイルは新規作成される。
- SRC と DST でサイズが異なり、日付が違うファイルは SRCに合わせる。
オプションをつけないと結構ガンガン消されたり更新されるので注意が必要
日付があてにならないときは md5 などハッシュで当てることも出来る。遅いからやらないけど。
google driveのバージョン管理は???
次のキャプチャが、sync でローカルの更新ファイルをGoogle Driveにコピーした例。
ちゃんと、Google Driveのバージョン管理(旧版)として認識されている。
表示を少なくしたいとき
quiet な表示には -q
オプションで行ける
自動実行なんかはコレで楽になるよね。
転送量について
ちゃんとクライアントIDを設定しても 403 User Rate Limit Exceededが出て来ることがある。複数台で一度に転送しようとすると出てくることがある。ちゃんとクライアントIDを分けてドライブのアクセス上限にかからないようにしたほうがいい。
フォルダが存在しないときはどうなるの
rclone sync /path/to/my/folder myDrive:/name/to/my/no_exists_foldername
存在しないフォルダ名を指定したら、そのフォルダが作成されて、その中にファイルが放り込まれる。上手に使えば毎月のアーカイブを作れる。
ただし、バックアップのログだけはきっちり見ておきましょう。 転送量上限に掛かってエラーになったりするんで
その他のツール
rclone の他にも google drive をぱぱっと使えるコマンドは結構ある。
FUSEでマウントする系もあるんだけど、遅いから使うのやめちゃった。
FUSEマウントより、fsevent/ inotify でファイルシステムの変更イベントでデータ同期したほうが楽だし速いしね。
進捗状況を表示する。
rclone でも wgetや rsync のように show progress オプションがああれば手作業で扱うときに、データ転送のETA(残り時間)や転送済みのバイト数を表示できたら便利。転送のパーセント表示をしたいなとおもってたら、オプションができてた。
root@rclone:~# /usr/bin/rclone --config /root/.config/rclone/rclone.conf --progress --stats-one-line sync gitlab:/var/opt/gitlab/backups gdp:/server/gitlab-backups 400M / 43.740 GBytes, 1%, 12.516 MBytes/s, ETA 59m6s
--progress --stats-one-line sync
をオプションにつければ、転送状況をモニタリングできてるのである。
Google Driveへのアップロードは、MAXで15Mbps程度、平均しても 10Mbps 程度しか出ないので、残り時間を見るのがとても大事。
濫用は禁物
OneDriveもAmazon DriveもDropboxもみんなが乱用して、容量制限ができたり値上げされたりしたので、ほどほどに使ったほうがいいですよ。
みんながガンガン使うと結局は料金プランが値上がりして損をしますから。とくに学生の方々は、無料だからと言って数10TBとか使うとたぶん無料プランなくなるのでほんとうに程々に使いましょうね。
バックアップに使うと便利なんだけど、ご利用は計画的にね。
2018-07-18
記述修正
2020-07-31
転送のモニタリングについて追記。
参考資料
Rclone started returning errors after uploading at most 800gb · Issue #1591 · rclone/rclone · GitHub