HomeLabでの「悲劇」
6ヶ月分の設定作業が一瞬で消え去った、あの深夜2時のパニックは今でも忘れられません。新しいDockerコンテナをいじっていた際、永続ボリュームのマッピングを誤り、メインのMariaDBインスタンスを誤って削除してしまったのです。バックアップはありませんでした。ProxmoxのチューニングやHome Assistantの自動化に費やした何時間もの作業が失われたと気づいた時のあの絶望感は、すべての愛好家が恐れる「通過儀礼」のようなものです。私たちは自分のラボをエンタープライズ環境のように扱いますが、バックアップの管理となると後回しにしがちです。
手動のバックアップ戦略は、すでに失敗していると言っても過言ではありません。「月に一度、USBドライブを接続することを忘れない」という計画であれば、それはすでに破綻しています。ハードドライブは(多くの場合、前触れなく)故障しますし、水害やサージ電流などの局所的な事故は、内部の「予備」ドライブなどお構いなしに襲ってきます。必要なのは、意識せずとも自動的に動作し、地理的に冗長化されたシステムです。
なぜ単純なファイルコピーだけでは不十分なのか
多くの初心者は rsync や基本的なドラッグ&ドロップによるコピーから始めます。しかし、このアプローチは3つの理由で安全性テストに不合格となります。第一に、隔離性が欠如していることです。電源ユニットが故障してサーバーを巻き込んだ場合、通常、接続されているすべてのSATAドライブも道連れになります。第二に、標準的なコピーは驚くほど非効率的です。
重複排除(デデュプリケーション)機能がないと、同じ20GBのOSイメージを10回保存することになり、高価なストレージを無駄にします。そして最後に、プライバシーの問題があります。ほとんどの自作スクリプトは、保存時のデータを暗号化しません。それらのファイルをパブリッククラウドにアップロードすれば、プライベートキーや個人文書は実質的に平文で公開されているのと同じです。
信頼できるシステム管理者は「パイプライン」を構築します。月々のコストをコーヒー1杯分以下に抑えつつ、3-2-1ルールを遵守するプロセスを目指すべきです。
3-2-1戦略:あなたのセーフティネット
ターミナルを操作する前に、まずはフレームワークを定義しましょう。3-2-1ルールは、データ保護における業界のゴールドスタンダードです。
- 3つのデータコピー: 本番環境のライブデータに加え、2つの独立したバックアップを保持します。
- 2種類の異なるメディア: バックアップは異なる物理デバイスに保存します。例えば、ローカルのSSDと、独立したNASまたは外付けドライブなどです。
- 1つのオフサイトコピー: 少なくとも1つのコピーは、異なる郵便番号の場所(通常はクラウド)に保存する必要があります。
これを手間なく実現するために、私は Restic と Rclone を信頼しています。Resticは「頭脳」の役割を果たします。重複排除を行い(150GBのデータセットを90GB程度まで圧縮することもしばしばあります)、ネットワークから出る前にすべてをローカルで暗号化します。Rcloneは「架け橋」として機能します。これにより、Resticは隠れた手数料がなく、1テラバイトあたり月額固定6ドルで利用できるBackblaze B2を含む、ほぼすべてのプロバイダーと通信できるようになります。
実践:バックアップパイプラインの構築
事前準備
Linuxベースのサーバー(UbuntuまたはDebianが最適)と、Backblaze B2のアカウントが必要です。B2は最初の10GBを無料で提供しており、テストには最適です。B2のダッシュボードで「バケット(Bucket)」を作成し、Application Key を生成してください。Key ID と Application Key は、すぐにパスワードマネージャーに保存してください。
ステップ1:ツールのインストール
古いバージョンで妥協しないでください。最新のセキュリティパッチを適用するために、公式リポジトリから直接ツールをインストールします。
sudo apt update && sudo apt install restic rclone -y
ステップ2:クラウドへの接続
RcloneがBackblazeと通信するには「リモート(remote)」プロファイルが必要です。インタラクティブな設定を開始します。
rclone config
メニューに従って以下の設定を行います:
- 新規リモート作成のため n を入力。
- 名前を
b2-remoteに設定。 - リストから「backblaze」を選択(通常はオプション5)。
- あなたの
Account IDとApplication Keyを入力。 - 残りの項目はデフォルト設定を受け入れ、保存。
バケット一覧を表示して接続をテストします: rclone lsd b2-remote:
ステップ3:リポジトリの初期化
Resticは単にファイルを「ダンプ」するのではなく、構造化されたリポジトリを作成します。ここで重複排除の魔法がかかります。これをBackblaze B2上に直接初期化します。
警告: 強力なパスワードを選択してください。これを紛失すると、Backblazeであってもデータを復元することは不可能です。
export RESTIC_PASSWORD="あなたの強力なパスワード"
export RESTIC_REPOSITORY="rclone:b2-remote:あなたのバケット名/backup"
restic init
ステップ4:初回バックアップの実行
まずは /opt/stacks ディレクトリのような重要なデータをバックアップしてみましょう。Resticは増分バックアップ方式を採用しています。この最初のアップロード以降、将来のバックアップでは変更された特定のファイルチャンクのみがアップロードされます。
restic backup /opt/stacks /home/user/documents
スナップショットを確認して、作業が正しく行われたかチェックします: restic snapshots。バックアップされた各時点に対して、一意のIDが表示されます。
ステップ5:自動化の設定
手動のバックアップはもはや現実的ではありません。寝ている間に毎晩実行されるよう、/usr/local/bin/homelab-backup.sh にシンプルなシェルスクリプトを作成します。
#!/bin/bash
export RESTIC_PASSWORD="あなたのパスワードをここに"
export RESTIC_REPOSITORY="rclone:b2-remote:あなたのバケット名/backup"
# 重要なディレクトリをバックアップ
restic backup /opt/stacks /etc/letsencrypt --tag "automated"
# 日次7、週次4、月次6のスナップショットを保持。それ以外は削除。
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
# データの整合性を検証
restic check
chmod +x で実行権限を与え、毎日午前2時に実行されるよう crontab (0 2 * * *) に追加します。
「Forget」と「Prune」の強力な機能
初期の頃、私はすべてのスナップショットを永遠に保存するという間違いを犯しました。B2は安価ですが、データベースの日次スナップショットを3年分保存すればコストが膨らみます。 restic forget コマンドは、保持ポリシーを自動的に管理します。 --prune フラグは非常に重要で、実際にクラウドにアクセスして参照されなくなったデータチャンクを削除し、ストレージコストを最小限に抑えます。
最後に
30分のセットアップで、一生ものの安心を買うことができます。現在、私は約150GBの重複排除済みHomeLabデータを月額約0.90ドルで保護しています。次にSSDが書き込み上限に達して故障しても、慌てて復旧ツールを探し回る必要はありません。ただ restic restore を実行するだけです。もし今月バックアップのテストをしていないなら、この記事をきっかけに、実際に機能するパイプラインを構築してみてください。

