OffshoreVps
セキュリティ2026年9月25日読了時間 6 分執筆:OffshoreVps チーム

Restic または Borg で VPS をバックアップする

2 台目のサーバーへの暗号化・重複排除バックアップ:restic と borg のコマンド、データベースのダンプ、保持期間、スケジュール、復元のテスト。

復元できるバックアップがあるかどうかが、面倒な午後で済むか、プロジェクトを失うかの分かれ目です。VPS バックアップの基本ガイドでは考え方を説明しています。こちらは restic と BorgBackup でさらに掘り下げます。どちらも、2 台目のサーバーやオブジェクトストレージへ、暗号化・重複排除したバックアップを作成するツールです。

restic または borg で VPS をバックアップするために使うコマンドを、「sudo apt install -y restic」から始めて表示している VPS のターミナルウィンドウ
このガイドでサーバー上で実行するコマンドの例。

単純なコピーではなく restic や borg を使う理由

  • 重複排除。変更されたデータだけが保存されるため、毎日のスナップショットも小さく保てます。
  • 暗号化。データはサーバーを離れる前に暗号化されます。
  • スナップショット。過去のどの日の状態にも復元できます。
  • 検証。どちらのツールもリポジトリの整合性を確認できます。

どちらか一つを選びます。Restic はシンプルで、SFTP や S3 互換ストレージなど多くのストレージに対応します。Borg は非常に効率的で、borg がインストールされたサーバーへ SSH 経由で動作します。

バックアップの送信先

唯一のバックアップを同じサーバーに保存してはいけません。別のロケーションの 2 台目の VPS、S3 互換のバケット、ストレージボックスを使いましょう。大容量ディスクを備えた小さな VPS は、安価なバックアップ先になります。VPS プランをご覧ください。

Restic:セットアップ

sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init

長いランダムなパスワードでパスワードファイルを作成し、コピーをオフラインで保管してください。このパスワードがないと、バックアップを復元できません。

restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
このガイドの手順(順番どおり):1. 単純なコピーではなく restic や borg を使う理由;2. バックアップの送信先;3. Restic:セットアップ;4. データベースには注意が必要;5. スケジュールを設定する;6. 復元をテストする
このガイドの手順(順番どおり)。

Borg:セットアップ

sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check

borg key export でリポジトリの鍵をエクスポートして保管します。

データベースには注意が必要

稼働中のデータベースのファイルをそのままコピーしないでください。先にダンプを取り、そのダンプをバックアップします:

mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz

スケジュールを設定する

systemd タイマーまたは cron からバックアップを実行します。シンプルな cron の行は次のとおりです:

15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

失敗したときに通知が届くようにします。たとえば、スクリプトの最後に監視用の ping を送る方法があります。

復元をテストする

restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test

ときどき予備のマシンで実際に復元をテストしてください。一度もテストしていないバックアップは、希望的観測にすぎません。