Linux における tar を使用したバックアップの作成と復元

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

はじめに

この実験では、tar(テープアーカイブ)コマンドラインユーティリティを使用して、Linux 環境でファイルシステムのバックアップを作成し、復元する基本的なプロセスを学びます。主な目的は、ユーザー権限の管理やファイルアーカイブの取り扱いを含む、不可欠なシステム管理タスクの実践的な経験を積むことです。ユーザーデータが含まれる /home ディレクトリなど、システムにとって重要なディレクトリにアクセスしてバックアップを行うために、必要に応じて sudo コマンドを使用して管理者権限で操作を実行します。

この実験では、管理タスクに sudo を使用できるデフォルトの labex ユーザーアカウントを用いた実務的なワークフローを案内します。まず /home ディレクトリ全体の圧縮アーカイブを作成し、正しく作成されたことを確認します。次に、復元シナリオをシミュレートするために、テンポラリディレクトリである /tmp に移動し、バックアップアーカイブの内容を展開します。最後に、ファイルとディレクトリ構造が新しい場所に正しく復元されていることを確認し、バックアップと復元プロセスの整合性を検証します。

現在の環境を理解する

このステップでは、現在の環境について学び、管理タスクのために sudo を使用する方法を確認します。labex ユーザーは、sudo(superuser do)を使用して管理者権限でコマンドを実行する権限を持っています。これにより、root ユーザーアカウントに切り替えることなく管理タスクを実行できます。

sudo の使用は、セキュリティ上のベストプラクティスです。ユーザーのコンテキストを維持したまま、特定のコマンドに対してのみ一時的に管理者権限を付与するためです。このアプローチは、完全に root ユーザーに切り替えるよりも安全であり、誤って危険なコマンドを実行してしまうリスクを軽減します。

まず、whoami コマンドと pwd(print working directory)コマンドを実行して、現在のユーザー ID と場所を確認しましょう。

現在のユーザーを確認します:

whoami

出力は labex になるはずです:

labex

次に、現在のディレクトリを確認します:

pwd

出力には、labex ユーザーのプロジェクトディレクトリが表示されるはずです:

/home/labex/project

管理者権限が必要な簡単なコマンドを実行して、sudo 権限をテストできます。通常はアクセス制限がある /root ディレクトリを確認してみましょう:

sudo ls /root

このコマンドが正常に実行されれば、管理タスクを実行するために必要な sudo 権限があることが証明されます。sudo コマンドは、ファイルシステムの制限された領域にアクセスするために必要な権限を一時的に付与します。

環境と sudo の機能について理解できたので、次のステップでバックアップを作成する準備が整いました。

/home ディレクトリのバックアップアーカイブを作成する

このステップでは、sudo を併用した tar コマンドを使用して /home ディレクトリのバックアップを作成します。tar(テープアーカイバ)ユーティリティは、アーカイブファイルの作成、表示、展開を行うための Linux の標準的なツールです。アーカイブとは、複数のファイルやディレクトリを 1 つにまとめたファイルのことで、保管や転送を容易にします。

現在は labex ユーザーとしてログインしており、カレントディレクトリは /home/labex/project です。バックアップファイルは、自分のユーザーアカウントでアクセス可能なホームディレクトリに作成します。

使用するコマンドは sudo tar -cvf ~/backup.tar /home です。オプションの内容を詳しく見ていきましょう:

  • sudo: 他のユーザーが所有するファイルを含め、/home ディレクトリ内のすべてのファイルを読み取るために必要な権限を付与します。
  • -c (create): 新しいアーカイブを作成することを tar に指示します。
  • -v (verbose): アーカイブに追加される各ファイルを一覧表示します。操作の進行状況を確認するのに役立ちます。
  • -f (file): アーカイブのファイル名を指定します。このオプションの直後にアーカイブ名を記述する必要があります。今回は ~/backup.tar です。~ はホームディレクトリ(/home/labex)のショートカットです。
  • /home: バックアップ対象のソースディレクトリです。

ターミナルでコマンドを実行して、バックアップアーカイブを作成します:

sudo tar -cvf ~/backup.tar /home

-v オプションを使用しているため、backup.tar アーカイブに追加されるファイルが画面に次々と表示されます。出力は以下のようになり、/home ディレクトリ内のすべてのファイルがリストアップされます:

tar: Removing leading `/' from member names
/home/
/home/labex/
/home/labex/.bashrc
/home/labex/.profile
/home/labex/.zshrc
/home/labex/project/
/home/labex/.zsh_history
...

tar: Removing leading '/' from member names というメッセージが表示されますが、これは正常です。これは、tar がアーカイブ内のパスを絶対パスではなく相対パスとして保存していることを意味しており、ポータビリティ(移植性)を高めるための標準的な動作です。

次のステップでは、backup.tar ファイルが正常に作成されたことを確認します。

backup.tar ファイルの作成を確認する

このステップでは、前のステップで backup.tar アーカイブが正常に作成されたことを確認します。バックアップのような重要な操作を行った後は、期待通りの出力ファイルが存在するかどうかを常に確認するのが良い習慣です。

バックアップファイルをホームディレクトリ(~/backup.tar)に作成したため、ホームディレクトリを確認する必要があります。ファイルを確認する最も簡単な方法は、フルパスを指定して ls(list)コマンドを使用するか、ホームディレクトリに移動することです。

ls コマンドを実行してホームディレクトリを確認します:

ls ~

コマンドを実行すると、ホームディレクトリ内のすべてのファイルとディレクトリが表示されます。出力の中に backup.tar ファイルがあるはずです:

backup.tar

あるいは、フルパスを使用して直接ファイルを確認することもできます:

ls -l ~/backup.tar

出力は以下のようになります:

-rw-r--r-- 1 root root 10240 <日付> <時刻> /home/labex/backup.tar

この詳細なリストにより、ファイルが存在し、サイズが 0 ではないことが確認でき、バックアップアーカイブとして正しく機能していることがわかります。sudo を使用して作成したため、ファイルの所有者は root になっていますが、アクセス可能なホームディレクトリ内に保存されています。

バックアップの作成と確認が完了しました。次のステップでは、復元シナリオをシミュレートします。

復元のために /tmp ディレクトリに移動する

このステップでは、カレントディレクトリを /tmp に変更します。バックアップの復元を練習する際は、まず中立的な場所にファイルを展開するのが最善です。これにより、既存のファイルを誤って上書きすることを防ぎ、最終的な場所に移動する前に復元されたデータを検査することができます。/tmp ディレクトリは Linux システムにおける一時ファイル用の標準的な場所であり、この目的に最適です。

Linux ファイルシステム内でディレクトリ間を移動するには、cd(change directory)コマンドを使用します。

/tmp ディレクトリに移動するには、次のコマンドを実行します:

cd /tmp

コマンドを実行してもターミナルのプロンプトに大きな変化はないかもしれませんが、ファイルシステム上の場所は変わっています。pwd(print working directory)コマンドを使用して、現在のディレクトリのフルパスを表示し、新しい場所を確認できます。

pwd

出力で /tmp にいることが確認できるはずです:

/tmp

これで /tmp ディレクトリに移動できました。先ほど作成した backup.tar アーカイブの内容を展開する準備が整いました。

バックアップアーカイブをカレントディレクトリに展開する

このステップでは、backup.tar ファイルの内容を現在のディレクトリである /tmp に展開します。このプロセスは、バックアップからの「復元(リストア)」と呼ばれることがよくあります。再び tar コマンドを使用しますが、展開を行うために別のオプションを指定します。

現在は /tmp ディレクトリにいます。バックアップファイル backup.tar はホームディレクトリ(/home/labex)にあります。そのため、コマンドを実行する際にはアーカイブファイルへのフルパスを指定する必要があります。

アーカイブを展開するコマンドは tar -xvf ~/backup.tar です。オプションを確認しましょう:

  • -x (extract): アーカイブからファイルを展開することを tar に指示します。これが作成時のコマンドとの主な違いです。
  • -v (verbose): 前と同様に、展開される各ファイルをリスト表示し、進行状況を確認できます。
  • -f (file): 処理するアーカイブファイルの名前を指定します。ホームディレクトリにあるバックアップファイルを参照するために ~/backup.tar を使用します。

なお、展開先が一般ユーザーでも書き込み可能な /tmp であり、バックアップファイルを読み取るだけ(システムファイルを変更しない)であるため、展開時に sudo は必要ありません。

ターミナルでコマンドを実行してファイルを展開します:

tar -xvf ~/backup.tar

現在のディレクトリ(/tmp)内にファイルやディレクトリが作成される様子が表示されます。出力はアーカイブに含まれるファイルのリストであり、作成時に見たものと同じはずです:

home/
home/labex/
home/labex/.bashrc
home/labex/.profile
home/labex/.zshrc
home/labex/project/
home/labex/.zsh_history
...

この出力は、tar/tmp 内に home ディレクトリを作成し、バックアップされたすべてのファイルとディレクトリをその中に復元したことを示しています。最後のステップで、これを確認します。

/tmp にファイルが復元されたことを確認する

この最後のステップでは、バックアップアーカイブのファイルが /tmp ディレクトリに正しく展開されたことを確認します。これは、データの整合性を保証するために、あらゆる復元プロセスにおいて極めて重要な工程です。

現在は /tmp ディレクトリにいます。新しく作成された home ディレクトリを確認するには、ls コマンドを使用します:

ls

他の既存の一時ファイルと並んで、home ディレクトリが表示されるはずです:

home
...

これにより、アーカイブのトップレベルディレクトリが作成されたことが確認できました。さらに詳しく、この新しい home ディレクトリの中身を見て、期待通りのユーザーデータが含まれているか確認しましょう。

ls home

出力には labex ユーザーのホームディレクトリが表示されるはずです。これはバックアップした元の /home ディレクトリの内容と一致します:

labex

これで、バックアップと復元のプロセスが成功したことが確認されました。sudo 権限を使用して /home のバックアップを作成し、それをホームディレクトリ(/home/labex)に保存した後、/tmp/home という一時的な場所に正常に復元できました。

復元されたファイルがオリジナルと一致するか、いくつかのファイルを比較して検証できます。例えば、.bashrc ファイルが正しく復元されたか確認してみましょう:

ls home/labex/.bashrc

出力により、ファイルが存在することが確認できるはずです:

home/labex/.bashrc

バックアップと復元のプロセスはこれで完了です。ユーザーのコンテキストを維持しながら、システム管理タスクの推奨されるアプローチである sudo 権限を用いた tar によるシステムバックアップの作成方法を習得しました。

まとめ

この実験では、Linux において sudo 権限と tar コマンドを使用し、ディレクトリのバックアップを作成・復元するという基本的なシステム管理タスクを学びました。まず、labex ユーザーとしての環境を理解し、必要に応じて sudo を使用して管理者権限でコマンドを実行する方法を確認しました。このアプローチは、特定のタスクに対してのみ一時的に権限を昇格させつつユーザーのコンテキストを維持できるため、完全に root ユーザーに切り替えるよりも安全でセキュアです。

tar ユーティリティを sudo と組み合わせて使用し、/home ディレクトリの全内容を含む単一のアーカイブファイル backup.tar を作成し、アクセス可能なホームディレクトリに保存しました。これにより、システム機能との潜在的な競合を避けながら、ユーザーの境界内でシステム全体のバックアップを処理する方法を実践しました。

復元パートでは、稼働中のデータを誤って上書きしないよう、まず /tmp ディレクトリのような安全なテンポラリ場所に移動するというベストプラクティスを学びました。そこから tar コマンドを使用して、backup.tar アーカイブの内容をカレントディレクトリに展開しました。この際、バックアップファイルの読み取りとユーザーがアクセス可能な場所への書き込みのみを行うため、管理者権限は不要でした。最後のステップでは、バックアップされたファイルとディレクトリが /tmp 内に正しく復元されていることを検証し、バックアップと復元の一連のサイクルの整合性を確認しました。