Linuxで複数ファイルを一つにまとめる基本はtar --create --file=archive.tar SOURCEです。gzip圧縮を加えると.tar.gz、xz圧縮なら.tar.xzとして保存できます。ただし、アーカイブ作成はバックアップの一部にすぎません。入力が更新中なら不整合な組み合わせになり、秘密鍵や設定を含めればアーカイブにも複製され、出力先容量が尽きれば途中ファイルが残ります。対象、除外、権限、整合性、検証、暗号化、保管期限を先に決めます。
アーカイブ化と圧縮と暗号化
- アーカイブ化:複数のファイル、ディレクトリ、メタデータを一つのtarへまとめる。
- 圧縮:gzipやxzでバイト数を減らす。データの種類によってはほとんど縮まらない。
- 暗号化:鍵を持たない相手から内容を保護する。tarやgzip自体は暗号化ではない。
- バックアップ:復元可能性、世代、別媒体、アクセス制御、監視、復旧訓練まで含む運用。
拡張子がtar.gzだから安全ということはありません。圧縮された秘密情報は展開でき、ファイル名やサイズなどメタデータも露出します。機密データには組織の暗号化基盤、鍵管理、アクセスログを使います。暗号鍵を同じアーカイブや同じ共有先へ置きません。
対象を一覧化する
作成前に、入力の絶対パス、所有者、容量、ファイル数、更新中か、シンボリックリンク、マウント境界を確認します。ホームディレクトリ全体を推測で固めると、SSH秘密鍵、ブラウザプロファイル、クラウド資格情報、キャッシュ、個人情報まで含む可能性があります。必要なディレクトリだけを許可リストで指定し、除外リストだけに頼りません。
du -sh -- ./project
find ./project -type l -print
findの結果が多い場合は保護された確認ファイルへ保存し、秘密パスを公開チケットへ貼らないでください。出力アーカイブは入力ツリーの外へ作ります。入力内へ作ると、自分自身を読み込もうとしたり、次回アーカイブに過去世代が再帰的に含まれたりします。
圧縮なしのtarを作る
カレントディレクトリのprojectディレクトリをtarへまとめる例です。保存先は存在しない新しいファイル名を使い、実行前に同名がないことと空き容量を確認します。--createは新しいアーカイブを作り、既存の同名ファイルを置き換えるため、バックアップ名の衝突を防ぎます。
umask 077
tar --create --file=../project-20260716.tar -- ./project
umaskは作成するアーカイブのアクセス権へ影響しますが、tar内に記録される各メンバーのモードとは別です。共有が必要でも最初は限定権限で作り、承認されたグループと保管場所へ移します。tarの標準エラーと終了状態を確認し、警告を無視しません。入力が途中で変化した警告は、アーカイブが作られたように見えても整合性に疑問があることを示します。
gzipとxzで圧縮する
gzipは速度と互換性のバランスがよく、xzは一般に高圧縮ですがCPUと時間を多く使う傾向があります。既にJPEG、MP4、ZIPなど圧縮済みのデータはほとんど縮まず、CPUだけを使うことがあります。本番サーバーで最高圧縮を無条件に使わず、代表データで容量、時間、CPU、復元速度を測ります。
tar --create --gzip --file=../project-20260716.tar.gz -- ./project
tar --create --xz --file=../project-20260716.tar.xz -- ./project
短い形ではgzipがtar -czf、xzがtar -cJfです。-fの次が出力アーカイブ名になるため、短縮オプションの順序を理解して使います。GNU tarの--auto-compressは拡張子から圧縮方式を選べますが、名前の打ち間違いが方式へ影響するため、運用では明示オプションの方がレビューしやすい場合があります。
-Cで記録パスを整理する
絶対パスを入力すると、tarは通常先頭スラッシュを除きますが、展開時の分かりやすさと移植性のため、親ディレクトリへ移動する-Cを使って相対名を記録します。シェル自身の作業ディレクトリを変えず、対象を明示できます。
tar --create --gzip --file=/secure-backup/project-20260716.tar.gz --directory=/srv -- project
出力先/secure-backupは例です。実環境では存在、所有者、マウント、容量、暗号化、バックアップ対象外設定を確認します。入力の祖先ディレクトリを他利用者が書き換えられる場合、作成中の競合やリンク差し替えが起き得ます。信頼境界を整理します。
除外は具体的に指定する
--excludeはキャッシュ、ビルド成果物、一時ファイルなど復元不要な項目を外すために使えます。パターンはtarが解釈するよう引用し、意図より広く一致しないかテストします。除外で秘密情報を守る設計は、将来別名の秘密ファイルが追加されると漏れるため、入力を許可リスト化する方が安全です。
tar --create --gzip --file=../project-20260716.tar.gz \
--exclude='./project/cache' \
--exclude='./project/build' \
-- ./project
一覧表示で除外が効いたことを確認します。パターンの相対位置はアーカイブ内メンバー名に合わせます。.gitignoreとtarのexcludeは同じ構文・意味ではありません。除外ファイルを使う場合も、所有者と変更履歴を管理します。
シンボリックリンクをたどるか
tarは通常、シンボリックリンク自体を記録し、リンク先の内容をたどりません。--dereferenceを使うと参照先を読み込み、対象外ディレクトリや巨大な別マウント、循環へ広がる可能性があります。移行要件でリンク先実体が必要な場合だけ、リンク一覧、境界、容量、権限を調査して使います。復元先でリンクがどこを指すかも確認します。
稼働中データの整合性
tarは読み取り時点のファイルを順に格納します。データベース、メールボックス、仮想マシンディスク、頻繁に更新されるログをサービス稼働中に直接まとめても、全体として同じ瞬間の状態とは限りません。データベースの公式バックアップ/スナップショット、アプリケーションのエクスポート、ファイルシステムスナップショット、短時間停止など、製品が保証する整合手順を使います。tarが成功してもアプリが復元できる保証にはなりません。
所有者、権限、ACL、拡張属性
tarはモード、所有者ID、時刻、リンクなどを記録できますが、ACL、拡張属性、SELinuxコンテキスト、ケーパビリティ、疎ファイル、ハードリンクの要件は別途確認します。GNU tarには対応オプションがありますが、作成側と復元側のOS・ファイルシステム・権限が対応しなければ完全復元できません。単純な文書移送とシステムバックアップで必要メタデータは異なります。復元試験で検証します。
一覧表示で作成結果を確認する
tarの終了状態が0でも、期待した対象と除外かを一覧で確認します。tar -tfは展開せずメンバー名を表示し、-vを加えるとモード、所有者、サイズ、時刻などの詳細を確認できます。大量一覧は秘密パスを含むため、保護された場所へ保存します。
tar -tzf ../project-20260716.tar.gz > ../project-20260716.members.txt
printf 'list status=%s\n' "$?"
一覧ファイル自体もアーカイブ内容のメタデータを漏らすため、アーカイブと同等に保護します。件数、最上位ディレクトリ、予想外の秘密名、出力アーカイブ自身が含まれていないかを確認します。
圧縮ストリームとハッシュを検査する
gzipアーカイブならgzip -tで圧縮データの整合を検査できます。さらにSHA-256などのハッシュを計算し、転送後の同一性確認に使います。ただしハッシュは復元可能性や真正性を単独では保証しません。署名、アクセス制御、別媒体、世代管理、復元テストが必要です。
gzip -t -- ../project-20260716.tar.gz
sha256sum -- ../project-20260716.tar.gz
復元テストをする
最も重要な検証は、隔離された空のディレクトリや検証環境へ実際に展開し、ファイル数、ハッシュ、権限、リンク、アプリケーション起動やデータ検査を行うことです。本番へ上書き復元してテストしません。定期バックアップは定期的にサンプル復元し、所要時間と手順を計測します。暗号化した場合は鍵の復旧、担当者不在、期限切れ証明書なども含めます。
再現可能なアーカイブ
同じソースから同じハッシュのtarを作りたいビルド用途では、ファイル順、所有者、グループ、時刻、ロケール、圧縮ヘッダーなど変動要素を固定する必要があります。GNU tarの再現可能性に関する公式文書を参照し、ビルドシステムで設定します。一方、バックアップでは実際の時刻や所有権を保持する方が重要な場合があります。目的を混同しません。
差分・増分バックアップの注意
GNU tarには増分アーカイブ機能がありますが、スナップショットファイル、世代順、削除記録、完全バックアップとの依存が増えます。一つでも欠けると復元できない可能性があります。単発のコマンド例で本番バックアップへ導入せず、世代管理、監視、オフサイト複製、復旧訓練を含む製品または正式設計を使います。ランサムウェア対策では、通常アカウントから変更できない世代も必要です。
作成前後のチェックリスト
- 復元目的、対象、除外、保持期間、機密区分、整合性要件を決める。
- 入力容量・ファイル数・更新状態・リンク・マウント境界・読み取りエラーを確認する。
- 出力を入力ツリー外の新規名へ作り、容量、権限、暗号化、同名衝突を確認する。
- tarの終了状態と警告を確認し、一覧、圧縮検査、ハッシュで成果物を検証する。
- 空の検証環境へ復元し、内容、メタデータ、アプリケーション整合性、所要時間を確認する。
- 別媒体・別権限へ複製し、監視、世代、廃棄、鍵管理、定期復旧訓練を運用する。
tar作成の基本コマンドは短いものの、価値のあるアーカイブは復元要件から逆算して設計します。入力を限定し、出力を入力外へ新規作成し、一覧と復元試験まで行って初めてバックアップとして信頼できます。

コメント