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

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

はじめに

あなたは、将来有望なテック系スタートアップ企業で新たに任命されたシステム管理者、「バックアップの守護者」です。最近、軽微な電力サージによりサーバーの不具合が発生し、重要ではないログファイルが一時的に破損しました。今回は重要なデータは失われませんでしたが、これは深刻な警告となりました。

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

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

重要な注意点
今後のチャレンジは、Quick Start with Linux コースの範囲を超える可能性があります。
チャレンジ中に困難に直面した場合:
  1. 一時的にそのチャレンジをスキップし、Linux学習パス の後続のガイド付きラボを続けてください。
  2. Labbyに相談するか、解答を確認してください。

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

バックアップを作成する前に、どのデータが重要かを特定する必要があります。システム全体のバックアップは、多くの場合非効率的です。私たちのアプリケーションサーバーにおいて、最も重要な資産は dataconfig、および logs ディレクトリにあります。

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

タスク

  • ~/project ディレクトリに backup-list.txt という名前のファイルを作成します。
  • このファイルには、バックアップ対象となる3つの重要ディレクトリへの相対パスを、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 のような形式を生成します。
  • コマンドの出力を別のコマンド内で使用するには、$(command) を使用します。
  • 重要: crontab内では、パーセント記号 (%) は特別な意味(改行として扱われる)を持ちます。date コマンドで使用する場合は、バックスラッシュ (\%) でエスケープする必要があります。
  • crontab内の最終的なコマンドは、* * * * * tar -czf /path/to/backup-$(date +\%F_\%T).tar.gz -C /path/to/source dir1 dir2 のようになるかもしれません。

まとめ

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

このチャレンジを通じて、あなたはいくつかの基本的なシステム管理スキルを習得しました:

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

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

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