BorgBackupの暗号化バックアップは、復元とprune失敗まで小さく試す

外付けSSDが一台だけ置かれた木製の机を描いたアイキャッチ画像

Docker Composeやsystemdのunitファイルやアプリのconfigを少しずつ増やしていくと、ある時点で「これ、壊れたら前の状態に戻せるのだろうか」という不安が出てきます。rsyncで別ディスクにコピーしているから大丈夫、と思いたいところですが、コピーした事実と、必要な時に戻せる事実は別物です。

この記事は、家庭ラボの小さな設定ファイル退避にBorgBackupを導入する価値があるかを、使い捨ての検証用VM上で実際に確認した記録です。バックアップを作るところで終わらせず、復元してdiffが一致するか、誤ったパスフレーズではどう失敗するか、世代削除(prune)が何を消そうとするのか、整合性チェックは何を返すのか、まで実コマンドと実際の出力で追いました。

目次

検証環境

  • 実行場所: 使い捨ての検証用VM(Debian 12 bookworm、aptが使える構成)
  • 対象ソフト: BorgBackup 1.2.4(Debianパッケージ)
  • 検証データ: サンプル2ファイル(app.conf、sample.service)
  • 世代数: 1世代(backup-1のみ)
  • パスフレーズ: 検証用の使い捨て文字列(本文では伏せています)

小規模・1世代の構成で、家庭ラボの設定ファイル退避という最小ユースケースに合わせています。大規模データや長期世代運用は今回の検証範囲外です。

導入とバージョン確認

まずBorgBackupを導入します。

# apt-get update && 設定項目=noninteractive apt-get install -y borgbackup
# borg --version

出力(抜粋):

The following NEW packages will be installed:
  borgbackup fuse python3-async-generator ...
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.

Debianのbookwormではborgbackup 1.2.4が入りました。fuse関連の依存も一緒に入ります。

サンプルデータの準備

設定ファイルに見立てた2ファイルを作り、退避元・リポジトリ置き場・復元先の3つのディレクトリを用意します。

# mkdir -p /tmp/borglab/src /tmp/borglab/repo /tmp/borglab/restore
# printf 'config-v1\n' > /tmp/borglab/src/app.conf
# printf 'unit-v1\n' > /tmp/borglab/src/sample.service

暗号化リポジトリの初期化

暗号化リポジトリを作ります。パスフレーズは環境変数で渡します。

# export 設定項目='<検証用パスフレーズ>'
# borg init --encryption=repokey /tmp/borglab/repo

このとき、次のような互換性に関するセキュリティ警告が表示されます(終了コードは0で正常)。

By default repositories initialized with this version will produce security
errors if written to with an older version (up to and including Borg 1.0.8).

これはBorg 1.0.8以前の古いバージョンで書き込むと整合性エラーになる、という仕様変更の案内です。家庭ラボで新規に1.2系を使い始める分には、そのまま進めて問題ありません。

バックアップ作成

backup-1という名前でアーカイブを作成します。

# borg create --stats /tmp/borglab/repo::backup-1 /tmp/borglab/src

出力(抜粋):

Archive name: backup-1
Archive fingerprint: 2290ca698f53bd75d9ccc4b3f62363bf33f894dea934d8e5765b12584aec5502
Number of files: 2
Duration: 0.01 seconds

2ファイルがアーカイブされました。–statsを付けると、ファイル数や所要時間が確認できます。

復元してdiffで一致を確認する

ここが本題です。作っただけでは安心できないので、別ディレクトリへ復元し、元データと差分がないことを確認します。

# cd /tmp/borglab/restore
# borg extract /tmp/borglab/repo::backup-1
# diff -r /tmp/borglab/src /tmp/borglab/restore/tmp/borglab/src

diffは何も出力せず終了コード0で終わりました。つまり復元したファイルは元データと完全に一致しています。「戻せること」をこの一手で確認できるのが、作成だけで終えないバックアップの最低条件です。

誤ったパスフレーズではどう失敗するか

暗号化バックアップで一番怖いのは、パスフレーズを取り違えて読めなくなることです。あえて誤ったパスフレーズでアーカイブ一覧を取得してみます。

# 設定項目='<誤ったパスフレーズ>' borg list /tmp/borglab/repo

出力:

passphrase supplied in 設定項目, by 設定項目 or via 設定項目 is incorrect.

終了コードは2でした。メッセージは明確で、「パスフレーズが違う」とはっきり言ってくれます。データが壊れたわけではなく、正しいパスフレーズがあれば読めます。逆に言えば、パスフレーズを失うと復元できません。暗号化を選ぶなら、パスフレーズの保管が運用の中心になります。

prune の削除候補を実行前に確認する

世代管理で怖いのは、prune(古い世代の削除)で必要な履歴まで消してしまうことです。BorgBackupはまず–dry-runで「何を残し、何を消すか」を確認できます。

# borg prune --dry-run --list --keep-daily=1 /tmp/borglab/repo

出力:

Keeping archive (rule: daily #1):        backup-1                             Thu, 2026-06-25 12:34:58 [2290ca698f...]

–keep-daily=1なので、唯一のアーカイブbackup-1は「Keeping(残す)」と判定されました。dry-runでは実際の削除は行われません。本番のpruneを実行する前にこの一覧を必ず確認し、消えてはいけない世代がKeepingに入っているかを見るのが安全な手順です。

整合性を確認する

最後に、リポジトリとアーカイブの整合性をチェックします。

# borg check --verbose /tmp/borglab/repo

出力:

Starting repository check
Index object count match.
Finished full repository check, no problems found.
Archive consistency check complete, no problems found.

リポジトリ・インデックス・アーカイブのいずれも問題なしでした。定期的にcheckを回しておくと、いざ復元したいタイミングで初めて破損に気づく、という事態を避けやすくなります。

検証後はディレクトリごと削除して片付けています。

# rm -rf /tmp/borglab

rsync単純コピーとの比較

今回の検証を踏まえ、設定ファイル退避という用途で、単純なrsyncコピーとBorgBackupの暗号化リポジトリを比較すると次のようになります。

観点 rsync単純コピー BorgBackup(暗号化リポジトリ)
復元確認 コピー先をそのまま読める borg extract後にdiffで一致確認できた
暗号化 標準では平文のまま repokey暗号化で保存される
世代管理 上書きすると前の状態は消える prune –dry-runで削除候補を事前確認できる
整合性確認 専用手段なし borg checkでno problems foundを確認できた
パスフレーズ管理 不要 必須。誤るとexit=2で読めない
手間 少ない init・パスフレーズ・世代設定が増える

rsyncは手間が少なく、単に最新状態を別ディスクに置くだけなら十分です。一方BorgBackupは、暗号化・世代管理・整合性確認を一つの道具で扱える代わりに、パスフレーズ管理と初期設定という手間が増えます。

導入する価値があるか

設定ファイル退避にBorgBackupを入れる価値があるのは、おおむね次の条件に当てはまる場合です。

  • 退避先を他人やクラウドに置く可能性があり、暗号化された状態で保管したい
  • 「直前の状態」だけでなく、いくつかの世代をさかのぼれるようにしたい
  • prune –dry-runやborg checkで、消す前・壊れる前に確認する運用を回せる
  • パスフレーズを失わない保管手段を持っている

逆に、暗号化も世代管理も不要で、単に最新の設定を別ディスクへ写したいだけなら、rsyncのままで構いません。パスフレーズの保管に自信が持てないうちは、BorgBackupの暗号化リポジトリは導入を急がない方が安全です。

今回の検証はサンプル2ファイル・1世代という最小構成です。実際の家庭ラボに入れる前には、自分のデータ量と世代数で同じ「作成→復元diff→誤パスフレーズ→prune –dry-run→check」の流れを一度なぞり、復元できることを自分の目で確認することをおすすめします。

この検証を回している環境

この検証は、自宅の常設ラボ(使い捨てVM/LXCを回す母艦+GPU+VLAN分離ネットワーク)で動かしています。使っている機材と選定理由、全体構成は1本にまとめています。

ラボ構成のまとめを見る →
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次