Skip to content
VDS · バックアップとディスク

Restic:暗号化と履歴付きのバックアップ

エンドツーエンド暗号化、重複排除、日付ベースのスナップショットによるバックアップの設定、自動化、整合性の検証方法について説明します。

更新日 2026年8月23日

Resticはrsyncでは解決できない課題を解決します。送信前にデータを暗号化し、スナップショット履歴を保持し、同じチャンクを二重にコピーせず、S3互換ストレージにバックアップを保存できます。依存関係のない単一のプログラムです。

インストールと最初のリポジトリ

sudo apt install -y restic
restic version

リポジトリとはバックアップが保存される場所です。ディレクトリ、SFTP経由のマシン、またはオブジェクトストレージを指定できます。

export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init

リポジトリのパスワードは復元できません。忘れるとデータは失われます。仕様上、ここにサポートは存在しません。パスワードはマシンとは別に保管してください。パスワードマネージャー、紙、どこでも構いませんが、バックアップ対象のマシン上の /root/.restic-pass ファイルだけに置かないでください。

バックアップの作成

restic backup /var/www /etc/nginx /opt/myapp \
  --exclude-file=/root/restic-exclude.txt \
  --tag daily
restic snapshots
restic ls latest
restic stats

2回目以降の実行は高速です。新しいデータのチャンクだけが転送されます。

復元

restic restore latest --target /restore
restic restore <snapshot-id> --target /restore --include /var/www/uploads

すべてを展開せずに内容を確認するほうがさらに便利です。

mkdir /mnt/snapshots
restic mount /mnt/snapshots

ディレクトリにはすべてのスナップショットが日付ごとに通常のフォルダーとして表示されます。誤って削除した1つのファイルを取り出す最良の方法です。

スケジュールとクリーンアップ

/usr/local/bin/backup.sh スクリプト:

#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

docker compose -f /opt/myapp/compose.yaml exec -T db \
  pg_dump -U postgres app | gzip > /var/backups/db.sql.gz

restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh

次にsystemdタイマーを設定します。定期タスクを参照してください。forget --prune は余分なスナップショットを削除して容量を解放します。--prune を付けない場合、スナップショットは一覧から消えますがデータは残ります。

整合性チェック

restic check
restic check --read-data-subset=5%

最初のコマンドは構造をチェックし、2番目のコマンドはデータの一部を読み取ってチェックサムを検証します。2番目は月に1回実行してください。ディスクと帯域に負荷がかかりますが、静かな破損を検出できるのはこのコマンドです。

構造チェックは実際の復元の代わりにはなりません。復元訓練を参照してください。

リソース

Resticはインデックスをメモリに保持します。大規模なデータセットでは数百メガバイトになります。RAMが2 GBのVDS-1では、数十ギガバイトのバックアップで不足する可能性があります。並列度を制限するか、重いバックアップを1つ上のティアに移してください。ディスク負荷が顕著なので、夜間にスケジュールしてください。ディスク速度を参照してください。

よくある間違い

  • パスワードがバックアップ対象のマシンにのみ保存されている。 典型的な例です。マシンがバックアップの鍵とともに失われます。
  • --prune なしの forget。 容量は解放されず、リポジトリは増え続けます。
  • 同じディスク上の同じディレクトリへのバックアップ。 復元する場所がなくなります。別拠点でのバックアップを参照してください。
  • キャッシュと /var/lib/docker が除外されていない。 バックアップが意味もなく4倍に膨らみます。含めるべきものの一覧は何をバックアップするかの記事にあります。
  • 並列実行。 2回目の実行はリポジトリのロックに衝突します。呼び出しを flock でラップしてください。