なぜResticは従来のrsyncやtarよりも優れているのか?
長年Linuxシステムを管理してきた中で、rsyncやtarのスクリプトによる手動バックアップにデータを委ねるのは非常にリスクが高いと感じています。従来の方法には、ストレージ容量の浪費と、データ量が増えた際のバックアップ速度の低下という2つの大きな問題があります。例えば500GBのサーバーを管理している場合、毎日tarで圧縮してGoogle Driveにアップロードするのは、帯域幅とコストの面ですぐに限界が来るでしょう。
Resticは、重複排除(Deduplication)技術によってこの問題を根本的に解決します。毎日10GBのデータベースをバックアップすると想像してみてください。従来の方法では10日間で100GBを消費しますが、Resticならデータが1%しか変更されていない場合、10回分のバックアップ合計で約10.1GBしか消費しません。また、すべてのデータはクライアント側でAES-256暗号化されます。たとえクラウドプロバイダーがハッキングされたとしても、攻撃者にとってあなたのデータは無意味な暗号の塊に過ぎません。
Resticを使う上で押さえておくべき3つの基本概念
操作中に混乱しないよう、以下の3つのコンポーネントを明確に区別しておく必要があります。
- Repository: バックアップデータの保存先。外付けハードディスク、SSH経由のサーバー、またはAWS S3、Backblaze B2、MinIOなどのオブジェクトストレージが利用可能です。
- Snapshot: 特定の時点におけるデータのバージョン。いわゆる「復元ポイント」です。Resticを使用すると、任意のスナップショットに非常に素早く遡ることができます。
- Password: Resticはこのパスワードを使用してデータ暗号化キーを生成します。パスワードを紛失すると、データをすべて失うことになります。「パスワードを忘れた場合」のボタンはないので、厳重に保管してください。
Resticのインストール:一瞬で完了
Go言語で書かれ、単一の実行ファイルとして配布されているため、Resticは非常に軽量で安定しています。パッケージマネージャーを使用して素早くインストールできます。
# Ubuntu / Debian
sudo apt update && sudo apt install restic -y
# CentOS / RHEL / AlmaLinux
sudo dnf install restic -y
# インストールが成功したか確認
restic version
初期化と最初のバックアップの実行
ステップ1:ローカルリポジトリの作成
クラウドにアップロードする前に、まずはローカルでテストして動作の流れを理解しましょう。/srv/my-backupにリポジトリを作成します。
restic init --repo /srv/my-backup
システムからパスワードの設定を求められます。Bitwardenや1Passwordなどのパスワードマネージャーに保存するのを忘れないでください。
ステップ2:バックアップの実行
設定ディレクトリ /etc とウェブコード /var/www/html をバックアップしてみましょう:
restic -r /srv/my-backup backup /etc /var/www/html
初回はResticが全データをスキャンするため少し時間がかかります。2回目以降は、実際に変更されたデータブロック(チャンク)のみを転送するため、速度が数倍速くなります。
クラウドへのデータ転送(Backblaze B2 または AWS S3)
物理的な故障リスクを避けるため、クラウドを利用するのは賢明な選択です。私は、標準的なAWS S3よりも約4倍安く、月額約$6/TBで利用できる Backblaze B2 を好んで使用しています。
コマンドを打つたびに情報を入力する手間を省くため、環境変数(Environment Variables)を設定しましょう:
export B2_ACCOUNT_ID="your_id"
export B2_ACCOUNT_KEY="your_key"
export RESTIC_REPOSITORY="b2:your-bucket-name:backup-folder"
export RESTIC_PASSWORD="your_repo_password"
これで、すべてのResticコマンドが自動的にクラウドを操作対象として認識します:
# クラウド上のリポジトリを初期化
restic init
# 重要なデータをバックアップ
restic backup /home/user/data
スナップショットの管理と復元
バックアップリストの確認
現在どのようなバックアップがあるかを確認するには、次のコマンドを使用します:
restic snapshots
Resticは一意のID(例:76c12f34)を含むデータテーブルを表示します。復元にはこのIDを使用します。
データの復元(Restore)
データを救出する必要があるときは、Resticが展開する先のターゲットフォルダを指定します:
restic restore 76c12f34 --target /tmp/restore-point
自動化と定期的なクリーンアップ
古いバックアップデータでコストが膨らまないようにしましょう。Resticには、期限切れのバックアップを自動的に削除する非常にスマートな仕組みがあります。
例えば、直近7日間のバックアップを7つ、直近4週間のバックアップを4つ、直近12ヶ月のバックアップを12個残す場合は次のようにします:
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
ヒント: forget コマンドはインデックスを削除するだけです。Resticが実際に不要なデータブロックを削除してクラウドの容量を解放するには、必ず --prune を追加する必要があります。
以下は、午前2時に実行するCronジョブ用のサンプルスクリプトです:
#!/bin/bash
source /path/to/env_vars.sh
restic backup /var/www/html --quiet
restic forget --keep-daily 14 --prune --quiet
restic check --quiet # データエラー의 チェック
実践からのアドバイス
ジュニアエンジニアが陥りがちな典型的なミスは、バックアップを過信して一度もテストしないことです。時々 restic check を実行して、データ構造にエラーがないか確認してください。また、リポジトリのパスワードとクラウドのアクセスキーを分けて管理することは、セキュリティ上の鉄則です。Resticをマスターすれば、たとえシステムに深刻な障害が発生しても、データ管理がこれまで以上に楽に感じられるはずです。

