【第8回】Linuxエンジニアの最終防衛線!アーカイブとバックアップ戦略(tar / gzip / rsync)完全攻略

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
全8回でお届けしてきた特大連載「Linuxエンジニアになるための基礎」も、いよいよ今回が最終回となります。これまでにLinuxのファイル操作、テキスト処理、パッケージ管理、ユーザーと権限管理、プロセス監視、そしてsystemdによるサービス自動化や、journalctlを用いたログ解析という、インフラエンジニアに必須の強力な武器を授けてきました。

しかし、どれほど堅牢にサーバーを構築し、どれほど完璧にプロセスやログを管理したとしても、ハードウェアの物理的な故障、データセンターの障害、人為的なミス(ヒューマンエラー)、そして悪意あるランサムウェアなどのサイバー攻撃を「100%防ぐ」ことは物理的に不可能です。
だからこそ、インフラエンジニアにとっての真の最終防衛線となるのが、今回のテーマである「アーカイブとバックアップ戦略」なのです。

コウ君

先生、実は昨日、開発環境のディレクトリを整理しようとして rm -rf を打ったら、間違えて本番のNoSQLデータストアのJSONファイルを全部吹き飛ばしてしまいました……。幸い、前日のスナップショットがあったのでなんとか復旧できましたが、生きた心地がしませんでした。バックアップって本当にエンジニアの命綱ですね。

リナックス先生

コウ君、無事に復旧できたのは奇跡だけど、それは典型的な大惨事(インシデント)よ!
バックアップのないサーバーを運用するのは、パラシュートを持たずにスカイダイビングをするようなもの。プロの現場では、単にファイルを別フォルダにコピーするだけではなく、tar で権限情報ごと一つのファイルにまとめ、gzip で圧縮し、さらに rsync と cron を使って別サーバーに隔離するという高度な自動化パイプラインを構築するの。
今日は、企業のデータを永遠に守り抜くための「プロのバックアップ術とディザスタリカバリ」を徹底的に叩き込むわよ!


    1. 📚 本連載のカリキュラム(全8回)
  1. 第1章:データ保護の絶対原則「3-2-1ルール」と RPO / RTO
    1. 1-1. バックアップの「3-2-1ルール」
    2. 1-2. ビジネス要求を定義する RPO と RTO
  2. 第2章:アーカイブの王様「tar」コマンドの真実(Tape Archive)
    1. 2-1. tar は圧縮コマンドではない
    2. 2-2. 頻出オプション(呪文)の解読
  3. 第3章:圧縮アルゴリズムの比較と最適解(gzip / bzip2 / xz / zstd)
    1. 3-1. 各アルゴリズムの比較とプロの使い分け
  4. 第4章:プロの tar コマンド実践(除外・相対パス化・権限保持)
    1. 4-1. 特定のディレクトリやファイルを除外する(–exclude)
    2. 4-2. 絶対パスの警告と -C オプションによる相対パス化
  5. 第5章:精密なリストア!巨大アーカイブから特定ファイルだけを救出する
    1. 5-1. アーカイブの中身を解凍せずに覗き見る(-t オプション)
    2. 5-2. 特定のファイルだけをピンポイントで抽出する
  6. 第6章:稼働中システムの無停止バックアップ戦略(NoSQL・JSONデータ)
    1. 6-1. NoSQL(JSON)データの安全なアーカイブスクリプト
  7. 第7章:rsyncによる高速差分同期とSSHを活用したセキュア転送
    1. 7-1. 宇宙最強の同期ツール「rsync」
  8. 第8章:Cronを組み合わせた完全無人化バックアップシステムの構築
    1. 8-1. crontabの設定とプロのログ管理手法
  9. 総まとめ:Linuxエンジニアとしての誇りと責任を胸に
    1. ▼ 【確固たるLinuxスキルを武器に次のステージへ】 ▼

第1章:データ保護の絶対原則「3-2-1ルール」と RPO / RTO

Linuxコマンドの打ち方を学ぶ前に、インフラエンジニアとして絶対に知っておくべき「バックアップの設計思想」について解説します。技術がどれほど進歩しようとも、データ保護の世界には、アメリカ政府機関(CISA)なども推奨する不変の黄金ルールが存在します。

1-1. バックアップの「3-2-1ルール」

データを永遠に失わないための究極の原則です。この3つの条件を満たしていないバックアップは、真のバックアップとは呼べません。

  1. 3つのデータコピーを持つ: 本稼働しているマスターデータ(1つ)に加え、バックアップデータを最低でも(2つ)作成し、合計3つの同一データを世界に存在させます。
  2. 2種類の異なるメディア(媒体)に保存する: 例えば「ローカルのSSD」と「外部のオブジェクトストレージ(AWS S3など)」、あるいは「NAS」と「磁気テープ」など、物理的な構造が異なる媒体に分散させます。同じサーバーの別ディレクトリにコピーするだけでは、ディスククラッシュ時に全てを失います。
  3. 1つはオフサイト(遠隔地)に保管する: データセンターの火災、水害、地震などの大規模災害に備え、物理的に数百キロ以上離れたリージョン(例えば、東京と大阪)にデータを逃がします。

1-2. ビジネス要求を定義する RPO と RTO

バックアップシステムを設計する際、エンジニアが独断で決めるのではなく、経営層やクライアントと事前に必ず握るべき2つの最重要指標があります。

  • RPO (Recovery Point Objective – 目標復旧時点): 「過去どれくらいのデータ損失までならビジネス上許容できるか」。例えば「毎日深夜3時に1回だけバックアップを取る」という運用の場合、翌日の午後2時に障害が起きれば「11時間分のデータ」を永遠に失うことになります。金融システムやECサイトなど、1秒のデータロストも許されない場合は、RPOをミリ秒単位に設定し、リアルタイムのレプリケーション(複製)を構築する必要があります。
  • RTO (Recovery Time Objective – 目標復旧時間): 「障害が発生した瞬間から、何時間(何分)でシステムを復旧し、ビジネスを再稼働させるか」。500GBのデータをバックアップしていても、それをネットワーク経由でダウンロードし、解凍してシステムを再構築するのに24時間かかるなら、RTOは24時間です。RTOを短縮するためには、リストア(復元)の自動化スクリプトや予備サーバー(スタンバイ環境)を日頃から準備しておく必要があります。

第2章:アーカイブの王様「tar」コマンドの真実(Tape Archive)

Windowsの世界では「ZIP」形式がファイルのアーカイブ(おまとめ)と圧縮を同時に行いますが、Linuxの伝統的な世界では「アーカイブ(複数のファイルやディレクトリを1つのストリームにまとめること)」と「圧縮(データサイズ自体を小さくすること)」は全く別の概念として扱われます。

2-1. tar は圧縮コマンドではない

tar コマンドの語源は Tape ARchive です。大昔、巨大なデータを磁気テープに連続して書き込むために作られたツールであり、その最大の目的は「ディレクトリ構造、ファイルの所有者(chown情報)、パーミッション(chmod情報)、タイムスタンプといったLinuxのメタデータを完全に保持したまま、複数のファイルを1つの連続した巨大なファイルに結合する」ことです。

# 単純なアーカイブの作成(圧縮はしていないので、出力ファイルのサイズは元の合計値とほぼ同じ)
tar -cvf backup.tar /var/www/html/

2-2. 頻出オプション(呪文)の解読

Linuxエンジニアは息をするように tar -czvf という呪文を叩きますが、プロとしてそれぞれのアルファベットの意味を完璧に理解しておかなければ、リストア時に大事故を起こします。

オプション 意味(プロの視点と注意点)
-c (create) 新しいアーカイブファイルを作成する。バックアップを取る際の基本。
-x (extract) アーカイブファイルから中身を抽出(展開・解凍)する。障害復旧時に使用する。
-t (list) アーカイブを展開せずに、中身のファイルリストだけを確認(テスト)する。解凍前に必ず実行すべきプロの防衛手段。
-v (verbose) 処理しているファイル名を画面に詳細表示する。手動実行時は安心感があるが、Cronによる自動化スクリプトでこれをつけるとログが肥大化してディスクを食いつぶすため、自動化時は必ず外します。
-f (file) 出力先(または読み込み元)のファイル名を指定する。必ずオプション群の最後(末尾)に記述し、その直後にファイル名が続くようにします(例:-cvf backup.tar)。

第3章:圧縮アルゴリズムの比較と最適解(gzip / bzip2 / xz / zstd)

tar コマンドでまとめた(アーカイブした)ファイルを、数学的なアルゴリズムを用いて小さく(圧縮)します。現代のLinux(AlmaLinux 9等)では、tar コマンドのオプションに特定の「圧縮指定文字」を付与することで、アーカイブと圧縮を意識せずにワンライナーで同時実行できます。

3-1. 各アルゴリズムの比較とプロの使い分け

データの種類(テキストか画像か)や、サーバーのCPUリソースの余裕度合いによって、プロは最適な圧縮アルゴリズムを選択します。無駄に高い圧縮率を求めると、CPUが100%に張り付いてWebサーバーのレスポンスが極端に悪化する二次被害(バックアップ障害)を引き起こします。

コマンド / 拡張子 tarオプション 圧縮率 処理速度(CPU負荷) プロの使いどころ・現場のリアル
gzip (.tar.gz) -z 標準的 非常に高速(負荷低) 不動のデファクトスタンダード。日次のWebディレクトリバックアップやDBダンプなど、本番環境のCPUに負荷をかけずに素早く処理を終わらせたい場合に最適。迷ったらこれを使います。
bzip2 (.tar.bz2) -j 高い 遅い(負荷中) gzipより圧縮率は高いですが、処理時間が長く中途半端な立ち位置になったため、現在ではレガシーシステム以外ではあまり利用されなくなりました。
xz (.tar.xz) -J 最強(極小) 非常に遅い(負荷激高) OSのインストールイメージの配布や、数年に一度しか解凍しない法令保存用のログファイルなど、時間がかかってもディスク容量を極限まで節約したい「長期アーカイブ用」に利用します。稼働中のWebサーバーで実行するのは危険です。
zstd (.tar.zst) --zstd 高い 超高速 Facebook(Meta)が開発した次世代アルゴリズム。AlmaLinux 9など最新環境ではサポートされており、gzip並の速度でxzに迫る圧縮率を叩き出すゲームチェンジャーです。
# 一般的な日次バックアップ(gzipで圧縮)
tar -czf backup_20260822.tar.gz /var/www/html/

# ディスク容量を極限まで節約したい長期保存用(xzで圧縮)※処理に多大な時間がかかります
tar -cJf archive_2025.tar.xz /var/log/old_logs/

# 最新環境での次世代圧縮(zstdを利用)
tar -c --zstd -f backup_modern.tar.zst /var/www/html/

第4章:プロの tar コマンド実践(除外・相対パス化・権限保持)

実際のインフラ現場のバックアップ作業では、単にディレクトリを指定して圧縮するだけでは不十分です。「この巨大なキャッシュディレクトリはバックアップから除外したい」「本番環境と開発環境でディレクトリ構造が違うため、展開時に柔軟に対応したい」といった高度な要件に応える必要があります。

4-1. 特定のディレクトリやファイルを除外する(–exclude)

Webアプリケーションのディレクトリをバックアップする際、フレームワークが生成するキャッシュファイル(/tmp や /cache)や、既に別で管理している巨大なログファイルを含めてしまうと、バックアップサイズが無駄に膨れ上がり、I/O負荷でサーバーを圧迫します。

# /var/www/html をバックアップするが、その中の cache ディレクトリと、すべての .log ファイルは除外する
tar -czf webapp_backup.tar.gz \
    --exclude='/var/www/html/cache' \
    --exclude='*.log' \
    /var/www/html/

4-2. 絶対パスの警告と -C オプションによる相対パス化

tar -czvf backup.tar.gz /etc/ のように絶対パス(ルート / から始まるパス)を指定してアーカイブを作成すると、tarコマンドは安全のために tar: Removing leading `/' from member names という警告メッセージを出し、パスの先頭にあるスラッシュを自動的に削除します。
これはバグではなく、仕様です。もし絶対パスのままアーカイブされ、それを後日展開(解凍)した場合、問答無用で現在稼働している本番の /etc/ を上書き破壊してしまう大事故を防ぐための防御機構なのです。

この警告を出さず、よりスマートかつ安全にアーカイブを作成するには、-C (Change directory) オプションを使って、tar実行前に内部的にターゲットディレクトリへ移動させるのがプロのテクニックです。

# /etc/ ディレクトリの中身をアーカイブするが、アーカイブ内のパスは /etc/ ではなくカレントディレクトリ基準の相対パスになる
tar -czf etc_backup.tar.gz -C /etc .

⚠️ パーミッションと所有者の完全保持(-p オプション)
rootユーザーで tar を実行してバックアップを作成し、障害発生時に別のユーザー権限で展開した場合、所有者(chown)やパーミッション(chmod)の情報が失われたり、展開したユーザーのものに書き換わってしまうことがあります。これを防ぎ、メタデータを完全に保持したまま復元するには、展開時に -p (preserve-permissions) オプションを必ず付与します。
展開時のプロのコマンド例:sudo tar -xzpf backup.tar.gz -C /restore_target/


第5章:精密なリストア!巨大アーカイブから特定ファイルだけを救出する

本番環境で開発者から「config.json の1ファイルだけを間違えて上書きしてしまったので、昨日の状態に戻してほしい」という緊急のリストア(復元)依頼が来た時、50GBある backup.tar.gz をすべて /tmp に解凍してディスク容量を食いつぶし、そこからファイルを探すのは三流のエンジニアのやることです。

5-1. アーカイブの中身を解凍せずに覗き見る(-t オプション)

まずは、アーカイブファイルの中に目的のファイルが存在するか、そして「どのような相対パスで保存されているか」を正確に確認します。ここで第2回で学んだ grep コマンドとの合わせ技が光ります。

# アーカイブ内のファイルリスト(数万行)を標準出力に流し、grepで目的のファイル名だけを抽出・検索する
tar -tzf backup_20260822.tar.gz | grep "config.json"

# 【出力例(アーカイブ内に記録されている正確なパス)】
var/www/html/app/config/config.json

5-2. 特定のファイルだけをピンポイントで抽出する

アーカイブ内での正確なパスが判明したら、アーカイブファイルの指定の直後に、抽出したいファイルのパス(先ほど調べたパスと一言一句完全一致させること)を記述して実行します。

# 50GBの巨大アーカイブの中から、config.json 1ファイルだけを抽出し、現在のカレントディレクトリに展開する
tar -xzf backup_20260822.tar.gz var/www/html/app/config/config.json

この技術を知っているだけで、インシデント発生時のリストア(復元)にかかる時間を、数時間からわずか数秒にまで劇的に短縮することができます。まさにプロフェッショナルの仕事です。


第6章:稼働中システムの無停止バックアップ戦略(NoSQL・JSONデータ)

最近のモダンなWebアプリケーション開発では、MySQLなどの複雑なリレーショナルデータベース構成を利用せず、スキーマレスで柔軟なデータ構造を持つ NoSQL データベースや、フラットファイルベースの JSON データストア(ファイルベースDB)を採用するケースが非常に増えています。
このような環境において、システムデータのバックアップとは、まさに「大量のJSONファイル群が格納されたディレクトリ構造を、いかに安全かつ整合性を保ってアーカイブするか」という勝負になります。

コウ君

先生、うちのシステムはリレーショナルデータベースを使っておらず、日々のユーザーのダイエット記録や運動データなどはすべて /var/lib/nosql_data/ 配下に数十万個の JSON ファイルとして保存されているんです。これをバックアップするには、深夜に単純に tar コマンドでディレクトリごと固めるだけでいいんですか?

リナックス先生

良い着眼点だけど、それはとても危険なアプローチねコウ君!
稼働中(数十万アクセスが来ている状態)のシステムで直接 tar を実行すると、tarコマンドがファイルのAからZまでを順番に読み込んでアーカイブしている「数分〜数十分の最中」に、Webアプリが新しいデータを書き込んでしまうの。
結果として、「前半は古いデータ、後半は新しいデータ」が混ざった『不整合(壊れた状態)』のバックアップが出来上がってしまうわ。
プロは必ず、ファイルシステムの機能(LVMスナップショット)を使うか、あるいはディレクトリごと安全な場所に「高速コピー(静止点の作成)」をしてからアーカイブを行うのよ。

6-1. NoSQL(JSON)データの安全なアーカイブスクリプト

LVMなどの高度なファイルシステム機能が使えない一般的な環境において、稼働中のJSONデータストアを無停止(ダウンタイムなし)でバックアップするための、安全なスクリプトの骨格を紹介します。

#!/bin/bash
# 【プロの実践】NoSQL JSONデータストアの安全なバックアップスクリプト

# 変数定義(タイムスタンプを利用して一意なファイル名を作成)
DATA_DIR="/var/lib/nosql_data"
TMP_BACKUP_DIR="/tmp/nosql_snapshot_$(date +%Y%m%d%H%M)"
ARCHIVE_NAME="/backup/nosql_data_$(date +%Y%m%d).tar.gz"

# 1. rsyncを使って、稼働中のデータを一時ディレクトリへ極めて高速にコピー(静止点・疑似スナップショットの作成)
# -a: 権限やタイムスタンプを保持, -q: 静音モード
echo "Step 1: Creating static snapshot..."
rsync -aq ${DATA_DIR}/ ${TMP_BACKUP_DIR}/

# 2. 静的な状態(これ以上書き込まれない状態)になった一時ディレクトリをターゲットに、tarで安全に圧縮アーカイブを作成
echo "Step 2: Archiving data..."
tar -czf ${ARCHIVE_NAME} -C /tmp $(basename ${TMP_BACKUP_DIR})

# 3. アーカイブ圧縮が完了したら、ストレージ圧迫を防ぐため一時ディレクトリを綺麗に削除する
echo "Step 3: Cleaning up temporary files..."
rm -rf ${TMP_BACKUP_DIR}

echo "Backup completely successfully: ${ARCHIVE_NAME}"

このように、一旦 rsync で別領域にデータを静止させてから tar で固めることで、アーカイブ処理中のデータ更新によるファイルの破損や論理的矛盾を完全に防ぐことができます。


第7章:rsyncによる高速差分同期とSSHを活用したセキュア転送

ローカルサーバーの /backup/ ディレクトリにバックアップファイル(.tar.gz)が作成されただけでは、第1章で解説した3-2-1ルールの「オフサイト保管(別サーバー・別リージョンへの隔離)」を満たしていません。作成したアーカイブを、ネットワーク経由で安全なリモートサーバー(バックアップ専用機)へ転送する仕組みが必須です。

7-1. 宇宙最強の同期ツール「rsync」

rsync(Remote Sync)は、ネットワーク越しにファイルやディレクトリを同期するための究極のコマンドです。
単なるコピーコマンド(cp や scp)とは異なり、「前回送ったファイルと、今回送るファイルを比較し、変更があった差分(Delta)だけを計算してネットワークに流す」という極めて高度なアルゴリズムを持っています。そのため、数TBに及ぶデータであっても、2回目以降の同期は数秒〜数分という信じられない速度で完了します。

# ローカルの /backup ディレクトリにあるアーカイブ群を、
# リモートサーバー(192.168.1.50)の /mnt/remote_backup/ ディレクトリに同期する

# -a: アーカイブモード(シンボリックリンク、権限、タイムスタンプをすべて完全維持する)
# -v: 詳細表示(Verbose)
# -e "ssh": 通信経路をSSHで強固に暗号化する(インターネット越しに同期する際の絶対条件)
# --delete: ローカル(転送元)で削除された古いバックアップファイルは、リモート側(転送先)でも削除し、完全なミラー状態を保つ

rsync -av -e "ssh -i /root/.ssh/id_rsa" --delete /backup/ backup_user@192.168.1.50:/mnt/remote_backup/

プロの現場では、パスワード認証を廃止し、SSH公開鍵認証(パスフレーズなしの鍵)を利用することで、この rsync コマンドを無人で自動実行できるようにセッティングします。


第8章:Cronを組み合わせた完全無人化バックアップシステムの構築

インフラエンジニアが、毎日深夜3時に起きて手動でバックアップスクリプトを叩くわけにはいきません。Linuxに標準搭載されているジョブスケジューラである cron(クーロン) にスクリプトを登録し、人間の介入なしに全自動でバックアップからリモート転送までを完遂させます。

8-1. crontabの設定とプロのログ管理手法

# ログイン中のユーザーのcron設定エディタを開く
crontab -e

# 以下の行を追記(毎日、深夜 3:00 に統合バックアップスクリプトを実行する)
0 3 * * * /usr/local/bin/daily_backup.sh > /var/log/backup_cron.log 2>&1

ここで極めて重要なのが、末尾に付与した > /var/log/backup_cron.log 2>&1 というリダイレクトの記述です。
Cronはバックグラウンドの非対話シェルで実行されるため、もしスクリプト内でエラー(ディスク容量不足やリモートサーバーへの接続失敗など)が起きても、画面には一切表示されず「サイレントに失敗」します。標準出力(FD:1)と標準エラー出力(FD:2)を必ずログファイルにリダイレクトし、翌朝に journalctl やテキストログで成否を確認できるようにしておくことこそが、プロフェッショナルな運用設計の真髄です。


総まとめ:Linuxエンジニアとしての誇りと責任を胸に

全8回にわたる長大な「Linuxエンジニアになるための基礎」連載、本当にお疲れ様でした。
最終回で学んだ「バックアップとアーカイブ、そして復元」の技術は、平時には決して脚光を浴びることのない、とても地味な技術かもしれません。
しかし、大規模なランサムウェア攻撃やハードウェアの壊滅的な障害によってシステムが崩壊し、会社が何億円もの損失を出すかどうかの絶望的な瀬戸際に立たされた時。全社員、そして数百万人のユーザーの「唯一の希望の光」となるのは、あなたが tar と rsync と cron を駆使し、誰にも見られない裏側で毎日静かに守り続けていた「バックアップファイル」なのです。

  1. Linuxの哲学「すべてはファイルである」:第1回で学んだディレクトリ構造とファイル操作がすべての基礎でした。
  2. テキストストリームとパイプライン:第2回で学んだ grep や awk。高度なログ解析も、コマンドの連携もすべてテキストストリームの受け渡しで実現します。
  3. パッケージとライブラリの整合性:第3回で学んだ dnf による依存関係地獄の解消。
  4. 権限の要塞化と監査:第4回で学んだ sudo と chmod。最小特権の原則がシステムの内部治安を維持します。
  5. リソースの可視化:第5回で学んだ top と ps。目に見えないメモリとCPUの悲鳴を可視化しました。
  6. systemdによるライフサイクル支配:第6回で学んだデーモン管理。サーバーの再起動にも耐えうる堅牢な自動化を実現しました。
  7. ログという名の真実の探求:第7回で学んだ journalctl。勘に頼らない論理的な障害調査手法を身につけました。
  8. データの絶対防衛:今回学んだ tar と rsync。3-2-1ルールを遵守し、永遠にシステムを守り抜きます。

これらのコマンド群と基盤知識は、単なるIT資格のための暗記物ではありません。世界中のクラウドサーバーを動かし、現代のインターネット社会の根底を支えている「インフラエンジニアの教養」であり「誇り」そのものです。
真っ黒な画面(ターミナル)への恐怖は、もうあなたの中から完全に消え去ったはずです。本連載で得た知識に自信を持ち、数万人のユーザーの日常を裏から支える、本物のプロフェッショナルエンジニアとして大きく羽ばたいてください!

長期の連載に最後までお付き合いいただき、本当にありがとうございました。また次の応用編でお会いしましょう。LINUX工房の「リナックス先生」でした!

▼ 【確固たるLinuxスキルを武器に次のステージへ】 ▼

【本連載の知識を試す!自分専用サーバー環境】
「高コスパおすすめVPS」

VPSランキングを見る

【インフラアーキテクト・SREとして挑戦】
「ITエンジニア専門転職」

転職エージェントを見る

コメント