Linux 講座 / tar 圧縮・バックアップと復元の検証
圧縮はデータのサイズを減らすことであり、バックアップは特定の時点のデータを別途保存して復元できるようにする作業です。バックアップの成功はファイル作成だけで判断せず、別の場所に実際に復元した後、内容・権限やアプリケーションの使用可能性を確認する必要があります。
ここでは手動で作成したバックアップを別のパスに復元して、内容と権限を比較します。この確認を通過した手順を定期バックアップと無人運用時の点検において自動化する順序で学んでください。
圧縮・アーカイブ・同期の区別
| 作業 | 主な目的 | 注意点 |
|---|---|---|
| アーカイブ | 複数のファイルとメタデータを1つの束として保存 | 保存するメタデータと復元権限を確認 |
| 圧縮 | 同じ情報をより小さい形で保存 | 暗号化や別のコピーを意味するものではない |
| 同期 | 元と対象の現在の状態を一致させる | 誤った削除・変更も伝播する可能性がある |
| バックアップ | 過去の時点での復元と別の保管 | 復元テスト・保管期間・分離されたストレージが必要 |
同じディスクの別のフォルダーにだけコピーすると、うっかり上書きしたファイルには役立っても、ディスク故障で一緒に失われる可能性があります。元のデータと独立したストレージ、複数の時点のコピー、アカウント侵害やランサムウェア攻撃を受けても、攻撃者がすぐに変更・削除できないコピーを設計してください。暗号化が必要な場合は保管キーを別に安全に管理し、復旧担当者がアクセスできる方法も確保します。
安全な練習用データを作る
lab=$(mktemp -d "$HOME/linux-backup-lab.XXXXXX")
mkdir -p "$lab/source/docs" "$lab/archives" "$lab/restore"
printf "version 1\n" > "$lab/source/docs/note.txt"
printf "enabled=yes\n" > "$lab/source/settings.conf"
chmod 600 "$lab/source/settings.conf"
find "$lab/source" -type f -print
作業パスが新しい一時ディレクトリの下にあるか出力で確認します。元のデータ、圧縮ファイル、復元ディレクトリを分け、元の中にバックアップファイルを戻す循環を避けました。例は一般ユーザーのファイルのみ扱うため、root所有権、ACL・拡張属性、データベース整合性を検証する練習ではありません。
相対パスでtar.gzを作成し、一覧を確認する
tar -czf "$lab/archives/source.tar.gz" -C "$lab" source
tar -tzf "$lab/archives/source.tar.gz"
(cd "$lab/archives" && sha256sum source.tar.gz > source.tar.gz.sha256)
(cd "$lab/archives" && sha256sum -c source.tar.gz.sha256)
-cは作成、-zはgzip圧縮、-fの次は圧縮ファイルの名前です。-Cで基準ディレクトリを変更し、絶対パスの代わりにsource/...を含めます。リストに予想した2つのファイルがあるか確認し、チェックサム検証でOKが出るか見ます。チェックサムは記録後にファイルが変わったか確認しますが、同じ権限でチェックサムまで変更できる攻撃者に対する真偽保証ではありません。
別の場所に復元し、元のデータと比較する
tar -xzf "$lab/archives/source.tar.gz" -C "$lab/restore"
diff -r "$lab/source" "$lab/restore/source"
stat -c "%a %n" "$lab/source/settings.conf" "$lab/restore/source/settings.conf"
cat "$lab/restore/source/docs/note.txt"
diffが出力なしで0で終わる場合、探索したファイルの内容は同じです。statで設定ファイルの600権限を比較し、復元したファイルでversion 1を確認します。diffは所有権・ACL・拡張属性などすべてのメタデータを検査しないため、実際のサービス復旧では必要な項目を別途検証する必要があります。
元のnote.txtをversion 2に置き換えてdiffを再実行すると差異が表示されるはずです。バックアップには依然としてバージョン1が残っている点が「現在状態に合わせる」と「以前の時点に復元する」の違いです。検証後は元のファイルに上書きせず、復元ディレクトリに保管した状態で結果を確認してください。
信頼できない圧縮ファイルと実行中のサービス
出所が不明なアーカイブは、まず一覧を確認し、一般アカウントの隔離された新しいディレクトリに展開します。予想外のパス・シンボリックリンク・ファイル数とサイズを確認し、ルートディレクトリに管理者権限で展開しないでください。形式の検査だけでは安全を保証できないため、重要なシステムと分離された環境を利用する方が適切です。
稼働中のデータベースの保存ディレクトリを単純にtarでまとめると、異なる時点のファイルが混ざる可能性があります。データベースが提供する論理バックアップ・物理バックアップ手順、停止または一貫したスナップショット条件を使用してください。災害復旧時間と許容できるデータ損失範囲も設定し、実際の復元時間で評価します。
rsyncを使用する際は、まず変更予定リストを確認します
rsync -av --dry-run "$lab/source/" "$lab/restore/source/"
rsyncがインストールされた環境で--dry-runは変更予定リストを表示します。ソースの後の/はディレクトリ自体ではなく、その内容が対象であることを示す重要な意味があります。--deleteは対象にのみ存在するファイルを削除できますが、この例には含めていません。同期対象のパスを確認し、異なる時点のバックアップを保持した上で、必要な作業だけを適用してください。




