それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rclone コマンドで google ドライブにデータを転送する(rcloneインストール方法と使い方)

rclone コマンドが便利

rclone コマンドは、各種のストレージサービス間でデータの転送が出来るように設計されたクライアントコマンド。

rclone は数多のクラウドと連携してクラウド間でデータ転送を行うことが出来て、各種サービスのフロントエンドプログラムを個別にインストールしなくてもまとめて使えるのでとても便利。

rclone で出来ること

強いよね。

対応してるクラウド

メジャーなものはたいてい対応してる

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を設定

GoogleAPI Consoleにログインして

  • 新規プロジェクト作成
  • 作ったプロジェクトで Google drive api を有効にする。
  • 作ったプロジェクトのoauthクライアントIDを作る
  • 作ったプロジェクトのoauthシークレットを取り出す。

つまり、誰のGoogle アカウントのAPI権限で rclone を動かすのかって言う設定ですね。

create credentials で oauth client を選べばおっけ

f:id:takuya_1st:20171227202056p:plain:w400

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のバージョン管理(旧版)として認識されている。

f:id:takuya_1st:20171227204437p:plain

表示を少なくしたいとき

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 でも wgetrsync のように 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