ArkVault:ドライブがLinuxマシンをまるごと復元するBorgBackup GUI

公開日
2026年7月11日
著者
Jacob Lloyd — プロジェクト完了後、AIの支援を受けて執筆
読了時間
約12分で読めます

かんたんに言うと: Linuxパソコン向けの無料バックアップソフトで、クリック操作だけで使えるシンプルな画面が付いています。大切なファイルを暗号化して外付けドライブに保存し、ドライブ自体に復元手順のガイドを書き込みます。パソコンが壊れても、新しいマシンをそのドライブから丸ごと再構築できます。

OSを入れただけの、何も設定していないまっさらなLinuxにバックアップドライブを挿すと、ファイル以上のものが返ってきます。ArkVaultは暗号化バックアップの隣に、ガイド付きのリストアキットをドライブ自身に書き込みます。つまり、マシンの再構築手順をドライブが知っている状態です。dotfiles、SSH鍵、ランチャーのシンボリックリンク、systemdユニット、一式まるごと。

TL;DR

  • これは何: BorgBackupを包むGTK4製GUI(フル機能のヘッドレスCLIつき)。バックアップのたびに、install-mapマニフェストと自分自身のコピーをドライブへ書き込みます。
  • 費用: 無料、MITライセンス。ソースのzipは下にあります。アカウント不要、クラウド不要。
  • 必要なもの: GTK4/libadwaita入りのLinux(Fedora/GNOME系は標準装備、Debian/Ubuntuはaptの1行)、余っているドライブ、そして「何を守る価値があるか」のカタログを書くためのひと晩。
  • 得られるもの: 暗号化+重複排除されたバックアップと、何も入っていないマシンでドライブから直接動くリストアウィザード。リストア訓練は、ハッピーパスだけでなく実際にやりました。

できあがるもの

理屈は後回しで、まずツールから。以下はダミーデータでのサンドボックス実行です。実機のファイル一覧ではありません。

ArkVaultのメインウィンドウ:バックアップ先の選択、サイズ見積もりをライブ表示する4つのプロファイルトグル、SettingsとDotfilesプロファイルの鍵バッジ、そして『Back up everything important』ボタン

プロファイルは4つ、サイズ見積もりはライブ更新。SSH鍵のようなシークレット指定の項目に触れるプロファイルには鍵バッジが付きます。オンにしたもの全部を、ボタンひとつでバックアップします。

ArkVaultのリストアウィザード。install-mapの項目がProjectsとSettingsのカテゴリ別に並び、チェックボックス付きで、sshの項目には鍵アイコン、Set optionsボタンがある

ここがこのツールの核心です。リストアウィザードはドライブからinstall-mapを読み込んで、何が保存されているのかをそのまま見せます。カテゴリ分けされてチェック可能、機微なものには鍵アイコン。正体不明のバイナリの塊ではありません。

ArkVaultのドラッグ&ドロップバックアップ画面。名前を付けたコレクション、ファイルやフォルダのドロップゾーン、Add files / Add folderボタン

メインのカタログに入れるほどでもない単発のファイル群のために、ドラッグ&ドロップモードもあります。

項目
コードPythonで約7,100行、48ファイル
pip依存ゼロ — GTKはシステムから、requirements.txtは意図的に空
テストスイート82/82チェックがパス、pytest不要
zipサイズ108 KB、53エントリ(Borgのバイナリは同梱せず、インストーラが取得)
リストア訓練の結果2つ目のまっさらな$HOMEに、8項目中8項目が正しく着地
ライセンスMIT、無料

Borgが引き受けてくれること

ArkVault自体はバックアップエンジンではありません。難しい部分を担うBorgBackupのフロントエンドです:

  • 暗号化: repokey-blake2。鍵はリポジトリの中にあり、パスフレーズで保護されます。ドライブを盗んだ人の手元には何も残りません。
  • 重複排除: 内容定義チャンキング。ゆっくり変化するホームディレクトリのスナップショット10個が、10倍の容量を食ったりしません。
  • 圧縮: zstdのレベル6。バックアップを遅くしない範囲で、ほどよく縮みます。
  • 保持ポリシー: borg pruneがデフォルトで日次7・週次4・月次6を保持(変更可)。古いスナップショットはドライブを食い潰す前に順に消えていきます。

ArkVaultが足すのは、Borgの関知しない部分です。どのファイルが重要で、どんなパーミッションが必要で、ファイルが着地したあとマシンを実際に動かすには何が起きる必要があるのか。

イミュータブルなディストロが設計を変えた理由

これはBazzite機のために作りました。イミュータブルでアトミックなFedora、ルートは読み取り専用。この制約がツール全体の形を決めました:

  • すべて~/.local配下にインストール。/には一切触れません。
  • venvは--system-site-packagesで構築。読み取り専用のベースに対してバインディングをコンパイルする代わりに、GTK4/PyGObjectをホストからもらいます。
  • pip install borgbackupはこの環境では端的に動きません。liblz4のヘッダもなければ、合うwheelもない。インストーラが公式アップストリームのスタンドアロンBorgバイナリ(FUSE同梱のPyInstallerビルド)をダウンロードする本当の理由がこれです。
  • sudoはどこにも出てきません。root権限が要る唯一の操作 — ドライブのフォーマット — はpolkit/pkexecのプロンプトを通ります。

本題:ドライブがマシンを再構築する

普通のバックアップツールはファイルを返してくれるだけです。どこに何を置くか、どのsystemdユニットを再有効化するかは、自分で覚えておくしかない。ArkVaultはその知識を、バックアップのたびにドライブへ書き込みます:

  • arkvault-repo/ — 暗号化されたBorgリポジトリ。
  • ArkVault-App/ — ArkVault自身のコピー(ソース+インストーラ)。tmpディレクトリに書いてからリネームするアトミックコピーなので、途中で中断されても中途半端なアプリがドライブに残りません。
  • arkvault-install-map.jsonRESTORE-README.md — 保存内容のマニフェストと、ツールなしで読めるプレーンテキストの手順書。

install-mapに記録されるのは、そのファイルがシークレットであるという事実だけで、中身は決して記録されません。ドライブは自分が何を運んでいるか知っていますが、一滴もこぼしません。

バックアップ実行時に実際起きること

バックアップの実行は一本道です。カタログに一致するものを探し出し(存在しないパスはスキップ)、必要に応じて書き込みの多いサービスを静止させて稼働中のデータベースを整合状態で取得し、borg createborg prune、そして最後にリストアキットをドライブへ書き込みます。

用心深すぎるくらいの部分

時間を食ったのはこのあたりのコードです:

  • フォーマットガードはシステムディスクを拒否します。 間違ったドライブのフォーマットは、バックアップツールの古典的な大惨事です。ArkVaultは/sys/class/block/*/slavesをたどって、LUKS/LVMのdevice-mapperチェーンを物理ディスクまで解決します。暗号化ルートのmapper名は元のディスクと似ても似つかないので、名前の単純チェックでは見逃すからです。システムディスクをそもそも列挙できない場合はフェイルクローズして、一切フォーマットしません。それでも最後は、正確なデバイス名を手で打って確認します。
  • リストア時のパス封じ込め。 壊れた、あるいは改ざんされたinstall-mapでも、ターゲットのホームの外には書き込めません。途中のシンボリックリンクは解決し、末端のシンボリックリンクはあえて辿らず、ホームから逃げ出そうとする再配置先は拒否します。
  • ログのシークレット衛生。 パスフレーズと、シークレット登録されたものはすべて、リテラル一致に加えてapiKey:Bearerのようなパターンの正規表現バックストップでスクラブされます。
  • リカバリーシート。 初回バックアップで表示されるパスフレーズシートは、テキストが選択不可(うっかりクリップボードに乗らない)で、「パスフレーズを保存した」にチェックを入れるまで閉じるボタンが無効のまま。シートは決してドライブには書き込まれません。パスフレーズをなくせば、バックアップも道連れです。本物の暗号化とはそういうものです。
  • FAT32はリポジトリ先として拒否します — 4GBのファイルサイズ上限がBorgを完全に壊すので。exFATは警告つきで許可です(BorgはUnixメタデータを内部に持つため)。
  • 空のアーカイブは拒否します。 ソースパスが全部消えていた場合(ドライブのアンマウント、カタログのタイプミス)、ArkVaultは「成功に見える空アーカイブ」を書くことを拒否します。
  • 検証はいつでも、あなたの好きなときに。 borg checkは本物の整合性チェックとしてUIからもCLIからも実行でき、「Browse snapshot」はアーカイブをFUSEで読み取り専用マウントするので、信用する前に中身をつつき回せます。

セットアップ

必要なのはGTK4/libadwaitaのPyGObjectバインディング、udisks2、polkitです。Fedora/GNOME系なら標準装備、Debian/Ubuntuなら1行:

sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1

次にインストーラを実行します。冪等なので、再実行しても安全です:

bash install.sh

これでアプリが~/.local/share/arkvaultにコピーされ、--system-site-packagesのvenvが組まれ、公式のBorgスタンドアロンバイナリがダウンロードされて、~/.local/bin/arkvaultとデスクトップエントリが置かれます。続けて:

arkvault probe

すべてOKと出るはずです。arkvaultだけで起動するとGUI。同じコアがヘッドレスのCLIも動かします:

arkvault probe|backup|restore|list|check

そして本当に大事なステップはひとつだけ:カタログを編集すること。同梱のカタログは汎用のサンプルです。core/discovery.pyprofiles.pycore/quiesce.pycore/containers.pycore/installmap.pyに「EDIT ME」の印が付いたブロックがあります。「新規インストールでは返ってこないもの」を吟味したリストこそがこのツールの存在意義で、あなたのリストはあなたにしか書けません。

最初のバックアップを実行したら、リカバリーシートをバックアップドライブ以外の場所に保存して、「Copy app to drive」をクリック。無人実行にはsystemdユーザータイマーのテンプレートがREADME-SETUPにあります。パスフレーズはキーリングかARKVAULT_PASSPHRASEから読まれます。

本当に動くという証拠

リストアを一度も試したことのないバックアップは、バックアップではなくただの願望です。というわけで、偽の$HOMEを相手に:

  1. ソースを展開し、install.shを実行 — 本物のBorgダウンロード、27.9 MB。
  2. arkvault probe:すべてOK。
  3. サンプルプロファイル3つをarkvault backupでスクラッチのドライブディレクトリへ:8項目が入り、repokey-blake2でリポジトリが初期化され、install-map + RESTORE-README + 自己バンドルが書き込まれた。
  4. arkvault list、続けてarkvault check:パス。
  5. arkvault restore別のまっさらなホームへ:8項目すべてが正しいパスに着地し、残りは手動チェックリストとして表示された。

依存ゼロのテストスイートは、zipに入っているそのままのツリーで82/82です。

ハマりどころ

  • zip版では、元のインストールスクリプトにあったバグを修正済みです。 BorgのGitHubリリースにはGPGの.asc署名はあっても.sha256のサイドカーがなく、インストーラのチェックサム取得が404になり、スクリプト自身のフォールバックが走る前にset -eがインストールを殺していました。ここでは修正済みで、既知の正しいハッシュを固定するためのARKVAULT_BORG_SHA256環境変数もオプションで追加してあります。ちなみに自分のマシンでは踏みませんでした。Borgバイナリが既にあったので、ダウンロードの分岐がそもそも走らなかったのです。
  • FAT32は静かにあなたの1週間を台無しにします。 ArkVaultは検出して拒否しますが、市販のUSBドライブには工場出荷時からFAT32のものが山ほどあります。
  • 実行がクラッシュすると、古いリポジトリロックが残ります。 borg break-lockで解除でき(GUIにボタンがあります)、BORG_LOCK_WAIT=120を設定しておくと、実行が重なったときに即失敗せず待つようになります。
  • WALモードで稼働中のSQLiteは、db・wal・shmの3ファイルを一緒に取るか、先にサービスを止める必要があります。quiesceステップが存在する理由がこれで、再起動はfinallyブロックの中にあるので、バックアップが途中で死んでもサービスは戻ってきます。
  • 別のユーザー名への復元は動きます。 すべての配置先がホーム相対で記録されているからです。新しいユーザーに対応づけられない所有権は、黙ってスキップされる代わりに手動チェックリスト行きになります。
  • GNOMEキーリングがない(ヘッドレス機、CI)? 失敗する代わりに、メモリ上のパスフレーズ+プロンプトに格下げして動き続けます。
  • 地味なバグ: python -m arkvault backup ...は以前、黙って何もしませんでした。GUIの引数パーサがサブコマンドを食べて、終了コード0で帰っていたのです。今は__main__.pyがCLIのサブコマンドを明示的にディスパッチします。怖いバグは音を立てて壊れます。本当に危険なやつは、正常終了して何もしません。
  • 同梱カタログが空同然のサンプルなのは、わざとです。 私が実際に使っているカタログには大事なものの在り処が正確に書いてあって、それは公開zipに入れてはいけないものの筆頭です。代わりに、同じ構造でパスだけ抜いた、再配置サンプル付きのProjects/Settingsのきれいな例が入っています。

ダウンロード

個人利用は無料です。役に立ったら、コーヒーをおごってもらえると嬉しいです。


← ツールとダウンロードをもっと見る