rcloneを使ってLinuxからクラウド(Google Drive、S3、OneDrive)にデータを同期・バックアップする方法

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

rcloneが必要になる場面

以前、VPSのSSDが突然故障してデータをすべて失ったことがある。スナップショットもバックアップも何もなかった。それ以来、大切なデータを一か所だけに置くのは怖くなった。問題は、rsyncscpはLinuxマシン間の同期しかできないことだ。Google DriveやS3にプッシュしたいなら、別のツールが必要になる。

rcloneはまさにこの問題を解決してくれる。オープンソースのコマンドラインツールで、Google Drive、Amazon S3、OneDrive、Backblaze B2、Dropbox、SFTPなど70以上のクラウドストレージプロバイダーに対応している。構文はrsyncに近いが、マシン間の同期ではなく、クラウドをターゲットにしている点が異なる。

始める前に押さえておく3つの基本概念

ここを飛ばすと、最初のコマンドから迷子になる。以下の3つを理解しておけば十分だ:

  • Remote:クラウド接続に付ける名前(例:gdrive:mys3:)。マウントポイントのようなものと考えればいい。
  • Path:remote内のディレクトリパス。gdrive:backups/vps1はGoogle Drive上のbackups/vps1フォルダを意味する。
  • Config file:rcloneは認証情報を~/.config/rclone/rclone.confに保存する。作成したremoteはすべてここに記録される。

よく使う3つのコマンド:

  • rclone copy — ソースからデスティネーションにファイルをコピーする。デスティネーションの既存ファイルは削除しない
  • rclone sync — 完全同期。ソースに存在しないファイルはデスティネーションから削除される
  • rclone ls / rclone lsd — remote内のファイル・フォルダを一覧表示する

LinuxへのrcloneのインストQL

どのディストリビューションでも動く公式インストールスクリプト:

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

Ubuntu/Debianならaptを使う方が手軽だ:

sudo apt update && sudo apt install rclone -y

インストール後の確認:

rclone version

実践:各クラウドの設定方法

1. Google Drive

対話型の設定コマンドを実行する:

rclone config

メニューに従って以下の手順を進める:

  1. nを押して新しいremoteを作成する
  2. 名前を入力:gdrive
  3. ストレージの種類を選択:driveと入力(またはGoogle Driveに対応する番号)
  4. client_idclient_secretは空のまま — rcloneのデフォルトで問題ない
  5. スコープ:1(フルアクセス)を選択
  6. VPSにブラウザがない場合は、Use auto configの手順でnを選択する。rcloneがURLを表示するので、ローカルマシンで開いてGoogleの認証を行い、返されたトークンをVPSのターミナルに貼り付ける。

完了後、Drive内のフォルダを一覧表示して確認する:

rclone lsd gdrive:

2. Amazon S3

S3はGoogleのようなOAuthではなく、Access KeyとSecret Keyで認証する。先にAWS ConsoleでIAMユーザーを作成し、AmazonS3FullAccess権限を付与してクレデンシャルを取得してから、以下を実行する:

rclone config
  1. 名前mys3で新しいremoteを作成する
  2. ストレージタイプを選択:s3
  3. プロバイダー:AWS
  4. access_key_idsecret_access_keyを入力する
  5. リージョン:例えばap-northeast-1(東京)やap-southeast-1(シンガポール)
  6. 残りの手順はEnterを押してデフォルトを使用する

接続確認:

rclone lsd mys3:your-bucket-name

3. Microsoft OneDrive

rclone config
  1. 名前onedriveでremoteを作成する
  2. ストレージタイプ:onedrive
  3. client_id/secretは空のままにする
  4. ブラウザで認証 — Google Driveと同様のフロー
  5. アカウントの種類を選択:onedrive(個人)またはbusiness(Microsoft 365)

実践的なバックアップコマンド

フォルダをクラウドにコピーする

# /var/www/html をGoogle Drive(backups/webフォルダ)にコピー
rclone copy /var/www/html gdrive:backups/web --progress

# データベースダンプをS3にコピー
rclone copy /backup/db.sql.gz mys3:my-backup-bucket/db/ --progress

完全同期 — このコマンドは慎重に

# /home/ubuntu/data をOneDriveに同期
rclone sync /home/ubuntu/data onedrive:vps-backup/data --progress

# 実際に何が行われるか確認するため、必ず先に --dry-run で実行する
rclone sync /home/ubuntu/data onedrive:vps-backup/data --dry-run

10台以上のVPSを3年間管理してきた経験から学んだ教訓がある:rclone syncを本番実行する前に、必ず--dry-runを実行すること。syncコマンドはソースに存在しないファイルをデスティネーションから削除する。ソースとデスティネーションを誤って入れ替えて、S3バケットを丸ごと消しそうになったことがある。あの心臓が止まりそうな感覚は二度と味わいたくない。

ファイルのフィルタリングと除外

# .sql と .gz ファイルのみコピー
rclone copy /backup gdrive:backups --include "*.{sql,gz}" --progress

# node_modules と .git を除外 — 容量を大幅に節約できる
rclone copy /var/www/myapp gdrive:backups/myapp \
  --exclude "node_modules/**" \
  --exclude ".git/**" \
  --progress

バックアップ前後の確認

# remote内のファイルを一覧表示
rclone ls gdrive:backups/web

# ローカルとremoteを比較 — 欠落ファイルや差分を検出
rclone check /var/www/html gdrive:backups/web

cronによる自動化

シンプルなバックアップスクリプトを作成する:

cat > /usr/local/bin/backup-to-cloud.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
LOG="/var/log/rclone-backup.log"

echo "[$(date)] バックアップを開始..." >> $LOG

# データベースのダンプ
mysqldump -u root -p"$MYSQL_PASS" mydb > /tmp/mydb-$DATE.sql
gzip /tmp/mydb-$DATE.sql

# クラウドにアップロード
rclone copy /tmp/mydb-$DATE.sql.gz gdrive:backups/db/ >> $LOG 2>&1
rclone sync /var/www/html gdrive:backups/web/ >> $LOG 2>&1

# 7日以上前のファイルを削除
find /tmp -name "mydb-*.sql.gz" -mtime +7 -delete

echo "[$(date)] 完了!" >> $LOG
EOF
chmod +x /usr/local/bin/backup-to-cloud.sh

トラフィックが少ない時間帯にサーバーへの影響を最小限にするため、毎日午前2時に実行されるようcrontabに追加する。ログファイルが肥大化しないようlogrotateも合わせて設定しておくと、ディスクを無駄に消費せずに済む:

crontab -e
# 以下の行を追加:
0 2 * * * /usr/local/bin/backup-to-cloud.sh

便利なTips

  • 帯域制限:日中のバックアップはネットワークを圧迫しやすい。--bwlimit 10Mを追加して10MB/sに制限すれば、バックアップ実行中もサーバーが正常に動作し続ける。本番サーバーのパフォーマンス最適化と組み合わせることで、バックアップ中のレスポンス低下を防げる。
  • 並列転送:rcloneはデフォルトで4ファイルを同時にコピーする。小さなファイル(1MB未満)を大量にバックアップする場合は--transfers 16に増やすと速度が大幅に向上する。
  • クラウドをドライブとしてマウントrclone mount gdrive: /mnt/gdrive --daemon — このコマンドを実行すると、Google Driveが通常のフォルダとして表示され、ls /mnt/gdriveでファイルを確認できる。Linuxのディスクマウントの仕組みを理解していると、マウントオプションの選択もより直感的になる。
  • アップロード前の暗号化:remoteタイプcryptを使えば、クラウドにプッシュする前にファイルを暗号化できる。プロバイダーでさえ読めない状態になるため、機密データをS3や会社のDriveにバックアップする際に役立つ。

まとめ

rcloneには何度もピンチを救ってもらった。VPSのバックアップだけでなく、ローカルにダウンロードせずにクラウドプロバイダー間でデータを移行する際にも活躍してくれる。構文は明確でプロバイダーへの対応が幅広く、完全にスクリプト化できる。VPSを管理していてオフサイトバックアップをまだ用意していないなら、今すぐ導入すべきツールだ。まずはrclone configでremoteを一つ接続して、rclone copy --dry-runを試してみよう。それだけで十分安全に始められる。

Share: