rclone browserでGoogle Driveにガッツリ同期させる

業務で大容量のファイルサーバを廃止してGoogle Driveの共有ドライブに引っ越しが必要になりました。しかしこのファイルサーバが本格的な業務用で利用するサーバであるため、手作業でGoogle Driveの所定のドライブにアップロードするのが非常に大変。エラーが起きたり、ミスったり。。そこでこれをもっと確実に手軽にできないか?ということで発見したのがrclone

ただしコマンドラインアプリなのでこれをGUIで扱えるrclone Browserも同時に導入して実験してみました。Drive APIを使ってアップロード制御を行ってるようです。

今回利用するアプリ

今回はWindowsおよびmacOSでの利用を前提にインストール方法や使い方をまとめてみました。Amazon S3やDropbox, Sambaなど非常に様々なストレージサービスに対応しているため、Google Driveだけじゃなくマルチなバックアップタスクの実現を安定的に行うにはもはや必須のツールと言えます。

最近は個人のレベルでも数TBのクラウドストレージやローカルNASがありバックアップ手段としては利用する機会が多いのではないかと思います。

差分バックアップも可能なので通常の手動ではできないようなアクションを実現できます。

※可能であればNASがある場所に一番近いサーバー上で動かすとより高速にアップロードが完了するでしょう。遠隔のNASからrcloneのあるPCを経由してアップロードはオーバーヘッドが掛かるので望ましくないです。

※現在のNASのファイル数を調査する場合は、VBAを使ってディレクトリ内の調査を行わせると、対象のディレクトリ配下以下にどれだけのファイルがあるのか?どれだけの階層があるのか?を調べることが可能です。以下のエントリーにコードがあるので改造して使ってみてください。

Google Apps Scriptで共有ドライブをコントロールする【GAS】

Google Driveの問題点

このツールを導入する前に、Google DriveアプリおよびChromeの2パターンを使ったファイルのアップロードを行っていました。対象のファイル数は軽く60万ファイルを超えており、故に複数の共有ドライブを用意してそちらに分散する形でアップロードをしておりました。そこで遭遇した問題点を以下に記述しておきます。

1つのフォルダ内には数万のファイルと、数百GBものファイルが詰まっており、手作業はかなり苦痛な作業となっていました。以下の問題点を解決する選択肢がこのrcloneとrclone Browserとなります。

ドライブの制限

Google Driveはファイルのアップロードに制限があります。アカウントの制限と共有ドライブの制限の2つになります。

  1. 1共有ドライブの最大ファイル数は最大で50万ファイルまで
  2. 1アカウントが1日にアップロード出来るファイルサイズ合計は750GBまで
  3. フォルダ階層は最大で100階層まで
  4. 個々のファイルの最大ファイルサイズは5TBまで

故に莫大な数とファイルサイズを考えた場合、1アカウントで1日で移動出来る量というのは制限されることになります。故に事前に以下のような対策を講じておく必要があります。

  • でかいファイルサイズである仮想環境の仮想HDDなどは、事前にコンパクションなどをしてサイズを小さくしておく(ファイルサイズの低減)
  • ログファイルや多数のパッチ、あまり使わない過去ファイルなどはZIPなどで圧縮・アーカイブしておく(ファイル数の低減)
  • 階層が深い場合にはまずその階層のままアップできないので可能な限りフラットな階層にしておく
  • ファイル数が多すぎる場合は、個別の共有ドライブを複数作成しておき、それらに分散して制限をクリアする

Google Driveアプリの場合

Google Driveデスクトップ版、こちらはかなり問題がありました。業務用のファイルサーバの1フォルダを共有ドライブの1ドライブにそのままアップロードする作業なのですが

  • Google Driveアプリは1度自身にキャッシュしてから同期を掛けるので、HDDやSDDが一杯になってしまう
  • 余りにも多数のファイルを同期しようとしてエラーが発生したり同期に失敗してそのままになるケースがあった
  • 同期が動いてる間は共有ドライブが削除不能になる
  • どれだけアップロードが完了してるのか非常にわかりにくい(人によってその表示がまちまち)
  • 同期したはずなのに、ブラウザ上ではアップロードできていないということがあった

小規模な同期ならばGドライブとしてマウントして使うには便利なツールですが大規模な引っ越しでは正直言って使い物にはならないという結論です。NASなどから移動させたい場合に使うにはオススメできません。

Chromeの場合

ChromeでGoogle Driveを表示しての手動でのアップロード。前述のGoogle Driveアプリよりもまだ実際に使うには使えるという印象でしたが、やはり大きなファイルサイズと莫大なファイル数となると致命的なエラーが多く発生し、やり直しが発生してしまったため、フォルダを小分けにしてアップロードするという実にアナログな手間暇が必要でした。

  • 親フォルダのアップロード中にネットワークセッションが何らかの問題で切れた場合、全てがロールバックされるため何一つアップロードが完了していなかったという事があった
  • やたらと長いフォルダ名や妙なファイル名がついてるものが含まれてる場合、アップロードが失敗と出てそこでストップしてしまう。どこまで完了したのかわからずやり直しとなる。
  • ファイル数と完了数は出るけれど、どこまで完了したのか非常にわかりにくい
  • アップロード失敗と出たものは△の表示で対象ファイルが出て、最後に再更新をするとアップが完了しない
  • 残り何時間という予測時間がいつまで立っても減らない

アップロードの失敗する確率はドライブアプリよりは低いといえどやはり、小分けにアップロードをしないと非常に手戻りが多く、かなり苦痛が強いられました。

インストール

いずれの場合も、rcloneのコマンドラインファイルとrclone BrowserのGUIアプリの両方をインストールして、パスを指定して利用可能となります。

Windows版

Windows版のrcloneとrclone Browserのインストールは以下の手順で行います。

  1. こちらのサイトからインテル 64bit のWindowsのバイナリをダウンロード
  2. ZIPを解凍する
  3. rclone.exeというのが入ってるディレクトリを適当な場所に配置する(マイドキュメントのドキュメントフォルダ直下など)
  4. 3.のrclone.exeをShiftを押しながら右クリック→パスをコピーでフルパスをコピーしておく
  5. こちらのサイトからrclone Browser 64bit windows 64bitをダウンロード
  6. 4.のexeを3.のディレクトリの中にでも入れておく(例:rclone-browser-1.8.0-a0b66c6-windows-64-bit.exe)

これでインストール作業自体はオッケー。できればこの3.のパスを環境変数にでも登録しておくと利便性がアップします。

macOS版

macOS版は、ターミナルからインストールします。事前にHomebrewをインストールしておきましょう。

  1. ターミナルを起動する
  2. brew install rclone」を実行してrcloneをインストールする
  3. type rclone」を実行して、rcloneが入ってるフルパスを調べる(通常は、/opt/homebrew/bin/rclone
  4. こちらのサイトからrclone Browser macos.dmgをダウンロード
  5. 4.をマウントして中に入ってるrclone browserをアプリケーションフォルダにコピーする

使い方

ここから先は全プラットフォーム共通となります。まずはrclone Browserを起動しましょう。使う場合、Google Driveアプリを稼働状態にしておくといちいちそっちでも同期が走るので、切っておくと良いでしょう。

また複数台のマシンで同一アカウントにて回すことも可能なので、750GBの制限だけ気をつければ、複数台で違う共有ドライブを指定してアップロードを行う事で実質的なアップロード速度を稼ぐことも可能(もちろんWAN側の通信速度が結果的に制限にはなるので、企業で使う場合はより効果が出る)

GCPでの作業

あらかじめGCPが利用できるようにしておく必要があります。以下の手順でClient IDおよびClient Secretを取得しておきましょう。

  1. GCPにログインする
  2. 左サイドバーから「APIとサービス」を開き、「有効なAPIとサービス」を開きます。
  3. 上部にらうAPIとサービスの有効化をクリック
  4. Driveと検索して、Google Drive APIをクリック
  5. 有効化をクリック(管理と出てる場合は既に追加済みです)
  6. 2.の画面に戻って今度は認証情報をクリック
  7. 上部にある「認証情報を作成」をクリックする
  8. OAuthクライアントIDを選択する
  9. アプリケーションの種類は「デスクトップアプリ」を選択する
  10. Client IDおよびSecretが作成されるので、これらをコピーしておく

これをしておかなくても使えるのですがその場合、世界で共通のキーを使う為、あっという間に1日750GB制限に引っかかったりしますので、必ず作成しましょう。回線が高速で750GBを超えられる見込みを想定して別アカウントにてClient IDとSecretも用意しておくと尚良いです。

Google Cloud Consoleを弄ってみる

初回起動時の設定

初回起動時になにやらダイアログが出て、設定しろと言われます。ここではrclone locationsを設定します。rclone.exeやrcloneのバイナリへのフルパスをここに追記して、OKをクリックするだけです。

図:rclone locationsを設定する

rcloneで設定を作る

ここではrcloneでOAuth認証や共有ドライブの指定(バックアップ先)などの様々な設定をします。注意点として1つの設定でバックアップ先に指定出来る共有ドライブは1個なので、複数の共有ドライブがバックアップ先にある場合はその数だけ設定を作る必要がある点です。それらの設定に対してバックアップタスクを作っていく事になります。

以下はmacOSのターミナルからの作業ですが、Windowsのコマンドプロンプトからも同様の作業になります。Windowsの場合はフォルダのパスを取得しておいて、cd フォルダのフルパスで移動してから以下の作業を行います。

  1. rclone config」を実行する
  2. 新規作成なのでnキーでnew remoteを選択する
  3. nameでは適当な名前をつけるけれど、共有ドライブの数だけ作ることを考慮して、gdrive_sharednameとでも入れておきます。(今回はgoogleとだけ入れておきました)
  4. Option Storageでは様々なクラウドストレージを選べますが、Google Driveを使うので今回は18を指定します(バージョンによってこの番号が変わるので注意)
  5. Option Client_idは前述のGCPで取得したClient IDをコピペ
  6. Option Clinet_secretは前述のGCPで取得したClient Secretをコピペ
  7. Option ScopeではFull Access許可を与えるので、1を選択します。
  8. Option Service_Accountは空のままEnter
  9. Edit Advanced Configではnを選択(詳細な指定をしたい場合はyを入力する)
  10. Use Webbrowser to ・・・と出たら、yを入力する
  11. ウェブブラウザが起動してOAuth認証が始まるのでアカウントを指定して、ログインし許可を与える
  12. Successfullyと出たらターミナルに戻る
  13. Configure this as a Shared Driveと出たら、yを選択
  14. そのアカウントで利用可能な共有ドライブの一覧が出てくるので、バックアップ先として利用する共有ドライブの番号を入力してEnter
  15. Keep Thisと出たら、yを入力してEnter
  16. Quit Configを選ぶので、qを入力してEnter
  17. rclone Browserに戻ってremotesタブのrefreshをクリックすると今作った設定が出てくる

これで、rcloneの設定が完了しました。なぜかrclone Browserからconfigをクリックしても開かない場合は、rclone configで実行した後に、nじゃなくeを選択して、設定ファイルの番号を指定すれば作っておいた設定を編集する事が可能です。

図:共有ドライブの指定

バックアップタスクを作る

さて、指定の共有ドライブに対して、バックアップするタスクを作成します。このタスクはコピー、移動、同期の3種類があり、通常は同期を選ぶと良いでしょう。Syncが同期になります。

  1. Remotesタブから作っておいたrcloneの設定をダブルクリックする
  2. 指定した名前のタブが生成されて、Google Driveの指定の共有ドライブの中身がツリーで出てくる
  3. 予めアップロード先フォルダを作っておきます(今回はtomatoというフォルダを作りました)
  4. 3.で作った指定のフォルダ(rootフォルダも可能)を選ぶ
  5. uploadをクリックする
  6. タスク作成画面が出てくるので、Task Descriptionにタスク名を適当に入れる
  7. Sourceの欄の隣のフォルダのアイコンをクリックする
  8. 同期元となるフォルダを指定します。
  9. Destinationは指定した共有ドライブのフォルダのパスがすでに入ってる。今回はgoogleという名前を付けてるので、google:tomato/と指定すると共有ドライブ直下のtomatoというフォルダ内に7.の中身が同期されるようになります。
  10. ModeはSyncを選び、Delete During Transferを選んでおきます。
  11. 2回目の同期で同じファイルをアップロードを防ぐために、Skip files that are newer on the destinationにチェックを入れておくと良いでしょう。
  12. Transferタブでは一度にアップするファイルの個数やコンペアチェックするファイルの個数、転送速度規制などを細かく指定可能です。
  13. Excludeはコピー除外するファイルの指定が可能です。
  14. Save taskをクリックしてタスクを保存する

図:フォルダを選ぶ画面

図:バックアップタスクの設定

バックアップを実行する

前述のタスクはTasksタブに登録されるので、後はこれを選択して、Runを実行すると指定した同期設定にてファイルのアップロードが始まります。実行するとJobsに実行中のタスクが表示されます。

Google Driveの問題点で指摘したいような数々の問題点をクリアしており、非常に安定してバックアップを任せる事が可能で手戻りが殆どありません

約40GBの合計サイズで50,000ファイル、同時4アップロード指定、Nuro光の1GB回線の802.11axの回線で実験してみたところ、およそ50%処理まで2時間17分100%処理では4時間30分でアップロードが完了しました。

図:タスクを実行する画面

図:タスク実行中の様子

サービスアカウントを使ってアップロード

概要

前述までの処理は通常のClient ID/Secretを使った実際のGoogle Workspaceのアカウントを利用してアップロードを行っています。一方で、rcloneはサービスアカウントにも対応しており、こちらは実アカウントを利用する必要性がありません。大規模な移行をする場合に引っかかる1ユーザ/750GBのリミットがGoogle Driveには存在する為、複数の実GWSアカウントを用意する必要がありましたが、サービスアカウントであればGCPでいくらでも作成が可能です(サービスアカウントでも750GBの制限はあるので要注意)

そこで、サービスアカウントを使っての共有ドライブへのアップロード手順を調べてみました。合わせて以下のエントリーの内容も参照してみてください。

GCPのサービスアカウントでファイルを操作する時の注意点

サービスアカウントを作成する

Google Cloudにてサービスアカウントを作成し、Google Workspaceにてドメイン全体の委任に追加、対象の共有ドライブにサービスアカウントのメアドをコンテンツ管理者権限で追加まで一通り行う必要性があります。

以下の注意点をクリアしておく必要があります。

  • サービスアカウントはテナントからしたらそのままでは外部のメアド扱いで、外部公開していないドライブにアクセス出来ない。
  • リストアップ時に対象の共有ドライブに対してサービスアカウントにアクセス権限が無いとリストアップしてくれず404エラーなる。
  • サービスアカウントのメアドを共有ドライブのメンバーとして追加し、コンテンツ管理者以上の権限を付けないとアップロードが出来ない。
  • 対象の共有ドライブは外部公開がオンの状態である必要があり、またドライブをその組織部門に所属させておく必要があります。

といったことに遭遇することになります。詳細な手順は以下のエントリーにまとめています。この時入手したサービスアカウントのJSONキーファイルはrcloneで利用するので、適当なフォルダに格納しておきましょう(service.jsonとリネームしておきました)

※デフォルトではプロジェクトに最大100個までサービスアカウントは作れます割当増加をリクエストも出来るらしい

※サービスアカウントのマイドライブ容量は15GBまでとなっている為、共有ドライブ以外にアップしてしまうと制限に抵触してしまい制限が掛かるようです

Google Cloud Consoleを弄ってみる

Rcloneで設定を作る

基本的にはこれまでの流れと対して変わりません。ただし、Client ID/Secretを利用しないのでブラウザを起動してユーザアカウントで認証といった手順はありません

  1. rclone config」を実行する
  2. 新規作成なのでnキーでnew remoteを選択する
  3. nameでは適当な名前をつけておく
  4. Option Storageでは様々なクラウドストレージを選べますが、Google Driveを使うので今回は19を指定します(バージョンによってこの番号が変わるので注意)
  5. Option Client_idはブランクのままEnter
  6. Option Clinet_secretはブランクのままEnter
  7. Option ScopeではFull Access許可を与えるので、1を選択します。
  8. Option Service_Accountはyを入力する
  9. service_account_fileでは、前述でJSONキーファイルを配置した所までのフルパスを入力(例:/Users/ユーザ名/service/service.json)
  10. Edit Advanced Configではnを選択(詳細な指定をしたい場合はyを入力する)
  11. Configure this as a Shared Driveと出たら、yを選択
  12. そのアカウントで利用可能な共有ドライブの一覧が出てくるので、バックアップ先として利用する共有ドライブの番号を入力してEnter

あとはこれまでの処理と変わりません。これでサービスアカウントにてアップロードが可能になります。

図:サービスアカウントでドライブ指定

実際にアップロードしてみる

実アカウントではないサービスアカウントを持ってしてRcloneで適当なファイルを軽く20GB程度アップロードを仕掛けてみました。スタート時点では特になにも問題なくアップロードは開始されました。

ちょっと遅い回線でやってたのでアレですが、20.51GBを6時間9分でアップロード完了しています。同じ回線で単発5.6GBのファイル1個だと7分で完了。自分の自宅の環境ならばもっと早いハズ。

15GB超えていますが、共有ドライブなのでオーナーは組織、更新者はrcloneとして記録されています。今追加で何本かテスト中。これが共有ドライブではない場合、オーナーがrcloneになってしまうので15GBの制限を受けてしまいます。よって、ユーザのマイドライブにアップしたい場合は、ユーザのアカウントを使うべきでしょう。

差分アップロードに関してもきちんと動作。Rcloneはやはりクラウドバックアップとしては非常に優秀なツールですね。

図:アップロードは普通に開始されました。

図:問題なく完了しました。

その他の機能

非常に高機能で素晴らしいバックアップ支援ツールですが、rcloneの機能はこれだけじゃなく

  • Google Driveアプリの用にクラウドストレージをローカル環境に対してマウントする事が可能(macOSの場合macFUSEが必要だが、セキュリティ設定を緩めないと使えない)
  • rclone about 設定名:」でGoogle Driveの容量表示が可能です。
  • Google Driveで暗号化を行うことが可能。googleという名前の設定を作っていたら、google:Crypt/をリモート名として指定すると可能です。

興味のある人は各項目について設定を行い、使えるようにしておくと、Google Driveを更にディープに使えるようになるというおまけ機能です。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)