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本にまとめています。
ラボ構成のまとめを見る →