LinuxでRcloneを使いこなす:コマンドラインによる高速クラウドバックアップ

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Linuxターミナルからクラウドストレージを管理する

Google Drive、Amazon S3、OneDriveの間でファイルを移動する場合、通常はブラウザやリソースを大量に消費するデスクトップクライアントを使用します。しかし、GUIのないLinuxサーバーではこれらは利用できません。GUIなしでデータを移動する手段が必要です。Rcloneはこのギャップを完璧に埋めてくれます。「クラウドストレージ版rsync」とも呼ばれるこのツールは、標準的なターミナルコマンドを使用して70以上のプロバイダー間でファイルを管理できます。

Rcloneと従来のクラウドツールの比較

Linux管理者は公式ツールを使いがちですが、Rcloneは主に3つの理由から、より優れたエクスペリエンスを提供します。

  • 統一された構文: aws-cligsutilのようなツールは各プラットフォームでは優れていますが、プロバイダーごとに新しい構文を覚える必要があります。Rcloneは、バックエンドに関わらず同じコマンドを使用できます。
  • スマートなFUSEマウント: 標準的な同期クライアントは、すべてのデータをローカルディスクにダウンロードさせることが多いです。Rcloneはクラウドストレージを仮想ディレクトリとしてマウントします。ファイルを開いたときにのみデータを取得するため、SSD容量の少ないサーバーにとって救世主となります。
  • APIの抽象化: クラウドAPI用に独自のPythonスクリプトを書くのはメンテナンスの悪夢です。RcloneがAPIの更新や認証ロジックを処理してくれるため、ユーザーが気にする必要はありません。

パフォーマンスとトレードオフ

Rcloneは速度を重視して設計されていますが、デスクトップアプリのような「設定したらあとはお任せ」というスタイルとは異なる考え方が必要です。

メリット

  • 最小限のフットプリント: Ubuntu 22.04インスタンスでのテストでは、アイドル時のRcloneのメモリ使用量はわずか18MBでした。公式のバックグラウンド同期デーモンが200MB以上消費するのと比べれば、その差は歴然です。
  • ローカル暗号化: 「crypt」オーバーレイにより、データがサーバーを離れる前に暗号化されます。万が一クラウドプロバイダーが侵害されても、ファイルの内容が読み取られることはありません。サーバー上のファイルアクセス権限を適切に管理するには、Linux ACLとChattrによるきめ細やかなセキュリティ管理も合わせて検討してください。
  • 帯域制限: --bwlimit 10Mを使用して速度を制限できます。これにより、ピーク時に大規模なバックアップがサーバーの1Gbpsアップリンクを占有するのを防げます。

課題

  • セットアップの複雑さ: リモートサーバーでGoogleやMicrosoftのOAuthを設定するには、「ヘッドレス」環境用の回避策が必要です。通常のログインより5分ほど長くかかります。
  • 手動同期: Rcloneはデフォルトでファイルの変更を監視しません。リアルタイムの更新が必要な場合は、bisyncコマンドを使用するか、systemdでタスクをスケジュールする必要があります。

推奨環境

最適な結果を得るために、以下の仕様を推奨します:

  • OS: Ubuntu 22.04 LTS または Debian 12。
  • 権限: 初回インストール用のsudo権限を持つユーザー。
  • ハードウェア: 1GBのRAMが最適です。512MBでも動作しますが、同時実行数が多い大規模な転送ではOOM(メモリ不足)エラーが発生する可能性があります。
  • 認証ヘルパー: ブラウザベースのログイン手順を実行するために、手元にデスクトップPCを用意してください。

実装ガイド:Rcloneのセットアップ

ステップ 1:最新バージョンのインストール

ディストリビューションのリポジトリは数ヶ月遅れていることが多いため、apt install rcloneの使用は避けてください。公式スクリプトを使用して、最新のAPI修正が含まれたバージョンを導入しましょう。

sudo -v && curl https://rclone.org/install.sh | sudo bash

インストールが成功したか、バージョンを確認します:

rclone version

ステップ 2:Google Driveへの接続

Rcloneは接続先を「リモート(remote)」として保存します。以下のコマンドで対話型セットアップを開始します:

rclone config
  1. nを押して新しいリモートを作成し、名前をmy-gdriveにします。
  2. リストからGoogle Driveの番号を選択します。
  3. 独自のGoogle Cloudプロジェクトを作成していない限り、Client IDとSecretは空欄のままにします。
  4. フルアクセスのためにスコープ1を選択します。
  5. 「Auto config」の質問にはnを選択します。これはSSHセッションにおいて不可欠です。

ヘッドレス環境のコツ: Rcloneがrclone authorize "drive"のようなコマンドを表示します。これを手元のノートPCで実行してください。ブラウザが開き、ログインを求められます。表示されたトークンをサーバーのターミナルに貼り付ければ連携完了です。

ステップ 3:基本コマンド

クラウドとのやり取りは、ローカルディスクの操作とほとんど変わりません。

フォルダ一覧を表示:

rclone lsd my-gdrive:

ディレクトリをアップロード:

rclone copy /home/user/data my-gdrive:backups --progress

ディレクトリをミラーリング:

注意:サーバー上にないファイルはクラウド側でも削除されます。

rclone sync /var/www/html my-gdrive:web-mirror

ステップ 4:ローカルアクセスのためのマウント

クラウドストレージを外付けハードディスクのように扱うには、mount機能を使用します。まず、FUSEドライバーをインストールします:

sudo apt install fuse3 -y
mkdir ~/cloud-data
rclone mount my-gdrive: ~/cloud-data --vfs-cache-mode full &

--vfs-cache-mode fullを使用すると、即時のファイル書き込みを必要とするアプリとの互換性が向上します。

ステップ 5:バックアップの自動化

バックアップを手動で実行するのはやめましょう。簡単なスクリプトで自動化します。私は本番環境のデータベースで、次のようなスクリプトを調整して使用しています:

#!/bin/bash
# rclone-backup.sh

SOURCE="/opt/app/data"
DEST="my-gdrive:backups/$(date +%Y-%m-%d)"
LOG="/var/log/rclone.log"

# 4つの並列転送でコピーを実行
/usr/bin/rclone copy $SOURCE $DEST --transfers 4 --log-file=$LOG --log-level INFO

# 容量節約のため、30日より古いバックアップを削除
/usr/bin/rclone delete my-gdrive:backups --min-age 30d

ログの確認にはjournalctlによるモダンなログ解析を活用すると、エラーの追跡がより効率的になります。これをcrontab(crontab -e)に登録し、毎晩午前3時に実行するように設定します:

0 3 * * * /home/user/rclone-backup.sh

パフォーマンスの最適化

何千もの小さなファイルを移動する場合、Rcloneが遅く感じることがあります。これは通常、APIのレイテンシが原因です。速度を上げるには、コマンドに--transfers 8--checkers 16を追加してください。これにより、Rcloneはより多くのファイルを同時に処理するようになります。新しい同期スクリプトをテストするときは、必ず--dry-runフラグを使用してください。実際にデータを変更することなく、どのファイルが削除・移動されるかを正確に確認できます。転送速度が期待通りかどうかを客観的に評価するには、Linuxサーバーのベンチマーク実践ガイドを参考にして、ネットワークとディスクのベースライン性能を把握しておくと役立ちます。

Share: