午前2時の電話と忘れられない教訓
午前2時、電話が激しく鳴り響きました。夜勤の同僚からの衝撃的な知らせ。ステージングDBサーバーのHDDがファイルシステムエラーでクラッシュしたとのこと。飛び起き、冷や汗を流しながらrsyncで動かしていた古いバックアップスクリプトを確認しました。結果はさらに最悪。1TBのHDDは重複したコピーでいつの間にか満杯になり、最新のバックアップは途中で破損していました。
その夜以来、私は手動のtarやrsyncスクリプトをすべて廃止しました。管理している20台以上のUbuntu VPSにおいて、BorgBackupの設定は常に最優先事項です。サーバーを運用しているなら、データが完全に失われるまで待つのではなく、今すぐ対策を講じるべきです。
なぜシステムエンジニアはBorgBackupにこれほど魅了されるのか?
単にファイルをコピーするだけのrsyncとは異なり、BorgBackup(通称Borg)は2つの強力な武器によってデータをよりスマートに処理します。
- 重複排除 (Deduplication): Borgはファイルを小さなデータブロック(チャンク)に分割します。100GBのディレクトリを10日間連続でバックアップし、データの変化が少ない場合、1TB消費する代わりに、Borgなら約110GBで済むこともあります。
- エンドツーエンド暗号化 (Client-side Encryption): データは送信前にサーバー上でAES-256を用いてロックされます。たとえハッカーがバックアップ用HDDを入手しても、パスワードがなければ無意味な文字列の羅列に過ぎません。
- 驚異の圧縮率: LZ4やZstandardなどのアルゴリズムにより、重複排除後さらにストレージ容量を30〜50%削減できるのが一般的です。
ステップ1:Ubuntuでのクイックインストール
Borgは公式リポジトリにあるため、インストールは1分もかかりません。私は通常、Ubuntu 22.04または24.04 LTSで以下のコマンドを実行します。
sudo apt update
sudo apt install borgbackup -y
以下のコマンドで準備が整ったか確認します:
borg --version
ステップ2:リポジトリ(Repository)の初期化
バックアップを保存する場所、リポジトリが必要です。これは外付けHDDでも、SSH経由のリモートサーバーでも構いません。ここでは、パスワードでデータを暗号化するrepokeyモードを使用します。
# リポジトリ用ディレクトリを作成
mkdir -p /mnt/backup/my_webapp_repo
# 最も強力な暗号化規格でリポジトリを初期化
borg init --encryption=repokey /mnt/backup/my_webapp_repo
「死活的」な注意: Borgはパスフレーズ(パスワード)の入力を求めます。このパスワードはBitwardenなどのパスワードマネージャーに保存するか、紙に控えておいてください。パスフレーズを紛失すると、すべてのデータが失われます。「パスワードを忘れた場合」のボタンはありません!
ステップ3:最初のバックアップを実行する
例えば、/var/www/htmlにあるコードと/etc/nginxにあるNginxの設定をバックアップするとします。管理しやすいように、バックアップ名には日付を付けます。
borg create --stats --progress /mnt/backup/my_webapp_repo::web-2026-05-12 /var/www/html /etc/nginx
コマンドが完了すると、--statsによって実際の数値が表示されます。元の容量と、Borgがどれだけ「削ぎ落とした」かが分かります。初回は少し時間がかかりますが、次回からは変更されたデータのみを送信するため、非常に高速になります。
ステップ4:トラブル時の復元方法
実行済みのバックアップリストを表示するには、listコマンドを使用します:
borg list /mnt/backup/my_webapp_repo
重要な設定ファイルを誤って削除してしまった場合でも、GB単位のデータをすべて復元する必要はありません。そのファイルだけを「抽出」できます:
cd /tmp/restore
borg extract /mnt/backup/my_webapp_repo::web-2026-05-12 etc/nginx/nginx.conf
もう一つの便利な機能はMountです。バックアップリポジトリ全体をディレクトリとしてマウントし、lsやcpコマンドで通常のドライブのようにファイルを閲覧できます。手動で解凍するよりもはるかに便利です。
ステップ5:自動化とリポジトリの整理
真のシステム管理者は、毎日手動でバックアップコマンドを打ちません。シンプルなBashスクリプトを作成し、Crontabに登録しましょう。また、HDDが再び満杯にならないよう、pruneコマンドを使って古いバックアップを自動的に削除することを忘れないでください。
# 自動バックアップスクリプトの例
export BORG_PASSPHRASE='あなたのパスワード'
borg create /mnt/backup/my_webapp_repo::web-{now:%Y-%m-%d} /var/www/html
# 日次を7世代、週次を4世代、月次を6世代分保持する
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /mnt/backup/my_webapp_repo
このスクリプトをcrontab -eで午前1時に実行するように設定すれば、夜中に「飛び起きる」心配をせずに安心して眠れます。
最後に
実戦経験から学んだことは、バックアップは保存して満足するものではなく、必要な時に即座に復元できるべきだということです。BorgBackupは、サーバーの「突然死」という状況で私を3回以上救ってくれました。高速で、効率的で、非常に信頼できます。
今日、10分だけ時間を割いてBorgを設定しましょう。すべてのデータを失ってから「もっと早くインストールしておけばよかった」と後悔しないでください。

