DAY 09: バックアップの守護者

LinuxBeginner
オンラインで実践に進む

はじめに

あなたは、急成長中のテック系スタートアップに新しく任命されたシステム管理者、「バックアップの守護者(Backup Sentinel)」です。先日、軽微な電圧サージによってサーバーに不具合が発生し、重要度の低いログファイルが一時的に破損しました。今回は重要なデータの損失はありませんでしたが、これは重大な警告となりました。

CTO はあなたに、会社のメインアプリケーションサーバーに対して堅牢なバックアップとリカバリ戦略を実装するという重要な任務を課しました。しかも、期限は「今日中」です。ユーザーデータ、アプリケーション設定、そして重要なログの整合性は、今やあなたの手に委ねられています。

これは、あなたの実力を示す絶好の機会です。バックアッププロセスの作成、検証、そして自動化を成功させることで、会社の最も貴重な資産である「データ」を守るだけでなく、デジタルインフラの不可欠な守護者としての地位を確立できるでしょう。システムは稼働中、時間は刻一刻と過ぎています。さあ、作業に取り掛かりましょう。

重要なお知らせ
このチャレンジの内容は、Quick Start with Linux コースの範囲を超えている場合があります。
チャレンジ中に困難に直面した場合:
  1. 一時的にこのチャレンジをスキップし、Linux 学習パス の後続のガイド付き実験(Guided Labs)を進めてください。
  2. Labby に相談するか、解決策(Solution)を確認してください。

バックアップ対象となる重要データの特定

バックアップを作成する前に、まずどのデータが重要かを特定する必要があります。システム全体のフルバックアップは、効率的でない場合が多いです。今回のアプリケーションサーバーにおいて、最も重要な資産は dataconfiglogs の 3 つのディレクトリにあります。

バックアッププロセスをクリーンで管理しやすくするために、バックアップしたいすべてのディレクトリをリストアップしたファイルを作成します。このリストは、バックアップスクリプトのマニフェスト(目録)として機能します。

タスク

  • ~/project ディレクトリに backup-list.txt という名前のファイルを作成してください。
  • このファイルには、3 つの重要ディレクトリへの相対パスを、1 行に 1 つずつ記述してください。

要件

  • ファイル名は正確に backup-list.txt としてください。
  • ファイルは ~/project ディレクトリに配置してください。
  • ファイルには以下の 3 つの項目を、それぞれ独立した行で含めてください:
    • data
    • config
    • logs

backup-list.txt ファイルを作成した後、プロジェクトディレクトリには既存のディレクトリと並んで新しいマニフェストファイルが存在するはずです:

~/project/
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

cat backup-list.txt を実行すると、3 つの重要ディレクトリがリストされているのが確認できるはずです:

data
config
logs

ヒント

  • nano などのテキストエディタを使用してファイルを作成・編集できます。
  • または、echo コマンドと出力リダイレクト(> で新規作成、>> で追記)を使用して作成することも可能です。

システムバックアップアーカイブの作成

重要ディレクトリのリストが準備できたら、いよいよバックアップアーカイブを作成します。Linux でこの作業に使用する標準的なツールは tar (Tape Archive) です。これは複数のファイルやディレクトリを 1 つのファイルにまとめることができます。また、容量を節約するために gzip を使ってアーカイブを圧縮します。

タスク

  • tar コマンドを使用して、圧縮されたバックアップアーカイブを作成してください。
  • アーカイブ名は system-backup.tar.gz としてください。
  • アーカイブは ~/project/backups/ ディレクトリに配置してください。
  • アーカイブの内容は、前のステップで作成した backup-list.txt ファイルに基づいて決定してください。

要件

  • 最終的なアーカイブのパスは ~/project/backups/system-backup.tar.gz である必要があります。
  • tar コマンドを使用してください。
  • tar-T オプションを使用して、backup-list.txt からファイル/ディレクトリのリストを読み込んでください。
  • アーカイブは gzip で圧縮してください(tarz オプションを使用)。

バックアップアーカイブを作成した後、backups ディレクトリには新しい圧縮アーカイブが含まれているはずです:

~/project/backups/
└── system-backup.tar.gz

ls -lh ~/project/backups/ を実行すると、アーカイブファイルとそのサイズが表示されます:

-rw-rw-r-- 1 labex labex 1.2K Sep 11 15:08 system-backup.tar.gz

ヒント

  • tar で圧縮アーカイブを作成する際の一般的なオプションは、c (作成)、z (gzip で圧縮)、v (詳細表示、進行状況の確認)、f (ファイル名の指定) です。
  • -T オプションは、アーカイブするファイル名をコマンドラインからではなく、指定されたファイルから取得するよう tar に指示します。
  • コマンドの構造は tar -czvf [アーカイブ名] -T [リストファイル] のようになります。

バックアップの整合性検証

バックアップは、破損していたり不完全だったりすると意味がありません。バックアップ戦略において重要なステップは「検証」です。作成したアーカイブに意図したすべてのファイルが含まれており、読み取り可能であることを確認する必要があります。

タスク

  • tar コマンドを使用して、system-backup.tar.gz アーカイブを展開(解凍)せずに内容をリスト表示してください。
  • このコマンドの出力を、~/project ディレクトリにある backup-contents.txt という新しいファイルにリダイレクトしてください。

要件

  • ~/projectbackup-contents.txt という名前のファイルを作成してください。
  • このファイルには、system-backup.tar.gz 内に保存されているすべてのファイルとディレクトリのリストが含まれている必要があります。
  • ファイルを展開しないでください。リスト表示のみを行ってください。

検証ファイルを作成した後、プロジェクトディレクトリには新しい backup-contents.txt ファイルが存在するはずです:

~/project/
├── backup-contents.txt
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

cat backup-contents.txt を実行すると、アーカイブ内のすべてのファイルの詳細なリストが表示されるはずです:

drwxrwxr-x labex/labex       0 2025-09-11 15:08 data/
-rw-rw-r-- labex/labex      46 2025-09-11 15:08 data/transactions.csv
drwxrwxr-x labex/labex       0 2025-09-11 15:08 config/
-rw-rw-r-- labex/labex      72 2025-09-11 15:08 config/app.conf
drwxrwxr-x labex/labex       0 2025-09-11 15:08 logs/
-rw-rw-r-- labex/labex      49 2025-09-11 15:08 logs/app.log

ヒント

  • tar コマンドには、アーカイブの内容をリスト表示 (t) するオプションがあります。
  • t オプションを z (gzip 用)、v (詳細リスト用)、f (ファイル指定用) と組み合わせます。
  • 出力リダイレクト演算子 > を使用して、コマンドの出力をファイルに保存します。

バックアップからのファイル復元

大変です!新人開発者がスペースを確保しようとして、誤ってメインアプリケーションの設定ファイル app.conf を削除してしまいました。アプリケーションは現在ダウンしています。「バックアップの守護者」であるあなたの出番です。バックアップからこの重要なファイルを復元し、窮地を救ってください。

タスク

  1. まず、config/app.conf ファイルを削除して、事故をシミュレートしてください。
  2. 次に、tar コマンドを使用して、system-backup.tar.gz アーカイブから config/app.conf ファイルだけを復元してください。ファイルは元の場所に復元される必要があります。

要件

  • タスク完了後、~/project/config/app.conf ファイルが存在している必要があります。
  • アーカイブ全体ではなく、単一の config/app.conf ファイルのみを抽出してください。

app.conf ファイルを復元した後、config ディレクトリには復元されたファイルが含まれているはずです:

~/project/config/
├── app.conf
└── ...

ls -l ~/project/config/app.conf を実行すると、復元されたファイルが確認できるはずです:

-rw-rw-r-- 1 labex labex 72 Sep 11 15:08 /home/labex/project/config/app.conf

ファイルの内容が正しいことを確認するために、期待される設定が含まれているかチェックできます:

## データベースと API キーの設定が表示されるはずです
cat ~/project/config/app.conf

ヒント

  • ファイルの削除には rm コマンドを使用します。
  • tar コマンドでファイルを抽出するには x オプションを使用します。
  • 特定のファイルを抽出するには、tar -x コマンドの最後に(アーカイブ内でのパスと同じ)ファイルパスを追加します。
  • アーカイブ内のファイルのフルパスは config/app.conf です。

バックアップタスクの自動化スケジュール設定

あなたは窮地を救いましたが、ヒーローの仕事に終わりはありません。手動のバックアップに頼るのはリスクが伴います。最後のステップは、人の手を介さずに定期的にバックアップが作成されるようプロセスを自動化することです。これには、Linux の標準的なタスクスケジューラである cron を使用します。

タスク

  • バックアップコマンドを自動的に実行する cron ジョブを作成してください。
  • このチャレンジの目的上、ジョブは 1 分ごと に実行されるように設定してください。
  • コマンドは、~/project/backups/ ディレクトリ内に新しい圧縮 tar アーカイブを作成する必要があります。
  • 上書きを防ぐため、各バックアップファイルにはタイムスタンプを含む一意の名前を付けてください(例:backup-2023-10-27_15-30-00.tar.gz)。

要件

  • crontab -e を使用して cron ジョブを編集してください。
  • cron のスケジュールは、1 分ごとに実行されるよう * * * * * としてください。
  • cron ジョブ内のバックアップコマンドでは、出力ディレクトリとソースディレクトリに 絶対パス を使用してください(例:/home/labex/project/backups)。
  • バックアップファイル名にはタイムスタンプを含めてください。

cron ジョブを設定した後、crontab を確認し、自動バックアップが表示されるのを待つことで動作を確認できます。crontab -l を実行すると、新しいバックアップジョブが表示されるはずです:

## 出力例(実際のコマンドは多少異なる場合があります)
* * * * * tar -czf /home/labex/project/backups/backup-$(date +\%Y-\%m-\%d_\%H-\%M-\%S).tar.gz -C /home/labex/project data config logs

1 〜 2 分後、backups ディレクトリにタイムスタンプ付きのバックアップファイルが表示され始めるはずです:

~/project/backups/
├── backup-2025-09-11_15-30-00.tar.gz
├── backup-2025-09-11_15-31-00.tar.gz
├── backup-2025-09-11_15-32-00.tar.gz
└── system-backup.tar.gz

ヒント

  • crontab -e を実行して cron ジョブエディタを開きます。エディタの選択を求められた場合は、nano が使いやすいでしょう。
  • cron ジョブの形式は [分] [時] [日] [月] [曜日] [コマンド] です。* * * * * は、毎日、毎時、毎分を意味します。
  • date コマンドを使用してタイムスタンプを生成できます。例えば、date +%Y-%m-%d_%H-%M-%S2023-10-27_15-30-00 のような形式を出力します。
  • コマンドの出力を別のコマンド内で使用するには、$(コマンド) を使用します。
  • 重要: crontab 内では、パーセント記号 (%) は特別な意味(改行として扱われる)を持ちます。date コマンドで使用する場合は、バックスラッシュでエスケープ (\%) する必要があります。
  • crontab に記述する最終的なコマンドは、以下のようになります:* * * * * tar -czf /パス/to/backup-$(date +\%F_\%T).tar.gz -C /パス/to/source dir1 dir2

まとめ

おめでとうございます、守護者(Sentinel)!あなたは完全で自動化されたバックアップとリカバリ戦略の設計と実装に成功しました。あなたの勤勉さとスキルのおかげで、会社のデータは安全に守られています。潜在的な危機を回避しただけでなく、将来にわたって会社を保護するシステムを構築しました。

このチャレンジを通じて、以下の基本的なシステム管理スキルを習得しました:

  • 重要データの特定: バックアップが必要なものを正確に見極める。
  • アーカイブの作成: tar コマンドを使用して圧縮バックアップを作成する。
  • 整合性の検証: バックアップが有効で完全であることを確認する。
  • 復元の実行: データ損失から回復するために特定のファイルを抽出する。
  • タスクの自動化: 定期的かつ無人でのバックアップのために cron ジョブをスケジュールする。

これらは、Linux システム管理者、開発者、または DevOps エンジニアにとって不可欠な実務スキルです。あなたは、重要なシステムの信頼できる守護者になるために必要な資質を備えていることを証明しました。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習