Linux ファイルシステムのマウント

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Linux のファイルシステムのマウントは、システム管理者や技術ユーザーにとって基本的なスキルです。このプロセスにより、オペレーティングシステムは、ストレージデバイスとそのファイルシステムをディレクトリ構造内の特定の場所にアタッチすることで、それらにアクセスし、相互作用することができます。

この実験では、シミュレートされたストレージデバイスを作成し、それをファイルシステムでフォーマットし、マウントしてその内容にアクセスする方法を学びます。また、実行権限を制限したり、読み取り専用にするなど、ファイルシステムの使用方法を制御するさまざまなマウントオプションについても調べます。

この実験の終わりまでに、以下のことが理解できるようになります。

  • Linux でストレージデバイスを作成し、フォーマットする方法
  • ファイルシステムをマウントおよびアンマウントするプロセス
  • マウントオプションを使用してファイルシステムへのアクセスを制御する方法
  • マウントされたファイルシステムの状態を確認する方法

これらのスキルは、ローカルハードドライブからリムーバブルメディアやネットワークストレージまで、Linux 環境でストレージデバイスを管理するために不可欠です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/SystemInformationandMonitoringGroup -.-> linux/df("Disk Space Reporting") linux/SystemInformationandMonitoringGroup -.-> linux/mount("File System Mounting") linux/SystemInformationandMonitoringGroup -.-> linux/dd("File Converting/Copying") subgraph Lab Skills linux/echo -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/cat -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/cd -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/mkdir -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/df -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/mount -.-> lab-271335{{"Linux ファイルシステムのマウント"}} linux/dd -.-> lab-271335{{"Linux ファイルシステムのマウント"}} end

ストレージデバイスの作成とマウント

このステップでは、シミュレートされたストレージデバイスを作成し、それをファイルシステムでフォーマットし、Linux のディレクトリ構造内でアクセス可能にするためにマウントします。

プロジェクトディレクトリに移動する

まず、この実験全体で作業するプロジェクトディレクトリに移動しましょう。

cd ~/project

シミュレートされたストレージデバイスを作成する

次に、dd コマンドを使用してシミュレートされたストレージデバイスを作成します。このコマンドは、特定のサイズのファイルを作成し、それがストレージデバイスとして機能します。

dd if=/dev/zero of=storage_device.img bs=1M count=100

このコマンドは、storage_device.img という名前の 100MB のファイルを作成します。このコマンドの各部分を理解しましょう。

  • if=/dev/zero: 入力ファイルは /dev/zero で、これは無限のゼロのストリームを生成する特殊なファイルです。
  • of=storage_device.img: 出力ファイルの名前は storage_device.img です。
  • bs=1M: ブロックサイズは 1 メガバイトに設定されています。
  • count=100: 100 ブロックをコピーするため、結果として 100MB のファイルが作成されます。

以下のような出力が表示されるはずです。

100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.123456 s, 850 MB/s

ストレージデバイスをファイルシステムでフォーマットする

ストレージデバイスを使用する前に、ファイルシステムでフォーマットする必要があります。mkfs.ext4 コマンドは、ext4 ファイルシステムでファイルをフォーマットします。ext4 は Linux で一般的に使用されるファイルシステムです。

mkfs.ext4 storage_device.img

コマンドがファイルシステムを作成する際に、以下のような数行の出力が表示されます。

mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 102400 1k blocks and 25688 inodes
Filesystem UUID: f5d1c3a7-21c4-4b5f-8c1d-8912345abcde
Superblock backups stored on blocks:
	8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

マウントポイントを作成する

デバイスをマウントする前に、マウントポイントとして機能するディレクトリを作成します。これは、ファイルシステムの内容にアクセスできる場所です。

mkdir -p ~/project/mount_point

ストレージデバイスをマウントする

次に、mount コマンドを使用してストレージデバイスをマウントポイントにマウントします。

sudo mount -t ext4 storage_device.img ~/project/mount_point

このコマンドは、Linux に以下のことを指示します。

  • タイプ (-t) が ext4 のデバイスをマウントする
  • マウントするデバイスは storage_device.img です
  • マウント先は ~/project/mount_point です

マウントを確認する

デバイスが正しくマウントされていることを確認するには、df コマンド (ディスク空き容量) をオプションとともに使用して、ファイルシステムのタイプと人間が読みやすいサイズを表示します。

df -hT | grep mount_point

以下のような出力が表示されるはずです。

/dev/loop0     ext4    93M  4.0K   86M   1% /home/labex/project/mount_point

マウントされたファイルシステムをテストする

ファイルシステムが正しく動作していることをテストするには、マウントされたディレクトリにテストファイルを作成します。

echo "This is a test file" > ~/project/mount_point/test.txt

ファイルが正常に作成されたことを確認するために、ファイルを読み取ります。

cat ~/project/mount_point/test.txt

「This is a test file」というテキストが表示され、ファイルシステムが正しくマウントされて機能していることが確認できます。

何が起こったかを理解する

あなたは以下のことを成功させました。

  1. ストレージデバイスをシミュレートするファイルを作成しました
  2. それを ext4 ファイルシステムでフォーマットしました
  3. マウントポイントディレクトリを作成しました
  4. そのディレクトリにファイルシステムをマウントしました
  5. マウントが成功したことを確認しました
  6. マウントされたファイルシステム上にファイルを作成し、読み取りました

このプロセスは、外部ハードドライブや USB スティックを接続して使用するのと似ていますが、物理デバイスをシミュレートするためにファイルを使用しています。

セキュリティとアクセス制御のためのマウントオプション

このステップでは、マウントオプションを使用してファイルシステムへのアクセス方法を制御する方法を学びます。マウントオプションを使用すると、実行権限を制限したり、ファイルシステムを読み取り専用にしたりするなど、ファイルシステムの動作をさらに制御できます。

現在のファイルシステムをアンマウントする

新しいマウントオプションを適用する前に、現在のファイルシステムをアンマウントする必要があります。

sudo umount ~/project/mount_point

デバイスがビジーであるというエラーメッセージが表示された場合は、マウントポイントディレクトリ内にいないことを確認してください。

cd ~/project

その後、再度アンマウントを試みてください。

noexec オプションでマウントする

noexec マウントオプションは、マウントされたファイルシステム上でのバイナリファイルの実行を防止します。これは、悪意のあるスクリプトやプログラムの実行を防ぐセキュリティ機能です。

noexec オプションを指定してファイルシステムをマウントします。

sudo mount -t ext4 -o noexec storage_device.img ~/project/mount_point

-o noexec の部分は、mount コマンドに noexec オプションを使用するよう指示します。

noexec オプションをテストする

マウントされたファイルシステム上に簡単なシェルスクリプトを作成し、実行してみましょう。

echo '#!/bin/bash' > ~/project/mount_point/test_script.sh
echo 'echo "This script is running"' >> ~/project/mount_point/test_script.sh

スクリプトを実行可能にします。

chmod +x ~/project/mount_point/test_script.sh

現在、スクリプトを実行してみましょう。

~/project/mount_point/test_script.sh

以下のようなエラーメッセージが表示されるはずです。

bash: /home/labex/project/mount_point/test_script.sh: Permission denied

これにより、noexec オプションがスクリプトの実行を防止していることが確認できます。

読み取り専用オプションでアンマウントして再マウントする

次に、ファイルシステムを読み取り専用でマウントしてみましょう。まず、アンマウントします。

sudo umount ~/project/mount_point

その後、読み取り専用オプションを指定してマウントします。

sudo mount -t ext4 -o ro storage_device.img ~/project/mount_point

-o ro の部分は、mount コマンドに読み取り専用オプションを使用するよう指示します。

読み取り専用オプションをテストする

マウントされたファイルシステム上に新しいファイルを作成してみましょう。

touch ~/project/mount_point/new_file.txt

以下のようなエラーメッセージが表示されるはずです。

touch: cannot touch '/home/labex/project/mount_point/new_file.txt': Read-only file system

これにより、ファイルシステムが読み取り専用でマウントされていることが確認できます。

マウントオプションを確認する

mount コマンドを使用して、現在のマウントオプションを確認できます。

mount | grep mount_point

出力に ro が含まれ、読み取り専用オプションが有効であることが示されるはずです。

/home/labex/project/storage_device.img on /home/labex/project/mount_point type ext4 (ro,relatime)

マウントオプションの組み合わせ

カンマで区切ることで、複数のマウントオプションを組み合わせることができます。ファイルシステムをアンマウントし、noexecro の両方のオプションを指定して再マウントしてみましょう。

sudo umount ~/project/mount_point
sudo mount -t ext4 -o ro,noexec storage_device.img ~/project/mount_point

マウントオプションを確認します。

mount | grep mount_point

出力に両方のオプションが表示されるはずです。

/home/labex/project/storage_device.img on /home/labex/project/mount_point type ext4 (ro,noexec,relatime)

マウントオプションの理解

ここで説明したマウントオプションは、セキュリティとアクセス制御に重要です。

  • noexec はバイナリファイルの実行を防止し、悪意のあるコードから保護します。
  • ro (読み取り専用) はファイルシステムへの変更を防止し、データの整合性を保護します。

これらのオプションは、最小限の権限の原則を実装するために、本番環境で一般的に使用されます。これにより、システムやユーザーには必要なアクセス権限のみが与えられます。

/etc/fstab を使用した自動マウント設定

このステップでは、/etc/fstab ファイルを設定することで、システム再起動後もファイルシステムのマウントを維持する方法を学びます。これは、システム起動時にストレージデバイスを自動的にマウントするために不可欠です。

/etc/fstab の理解

/etc/fstab(ファイルシステムテーブル)ファイルには、システム起動時に自動的にマウントされるべきファイルシステムに関する情報が含まれています。このファイルの各行は、個別のファイルシステムを表し、デバイス、マウントポイント、ファイルシステムの種類、マウントオプションなどのフィールドが含まれています。

まず、このファイルの現在の内容を見てみましょう。

cat /etc/fstab

すでに設定されたシステムマウントの数行が表示されます。

現在のファイルシステムをアンマウントする

永続的なマウントを設定する前に、現在のファイルシステムをアンマウントします。

sudo umount ~/project/mount_point

/etc/fstab のバックアップを作成する

システム設定ファイルを変更する前にバックアップを作成するのは良い習慣です。

sudo cp /etc/fstab /etc/fstab.backup

/etc/fstab にエントリを追加する

次に、ストレージデバイスのエントリを /etc/fstab に追加します。デバイスファイルの絶対パスを使用する必要があります。

echo "$(readlink -f ~/project/storage_device.img) $(readlink -f ~/project/mount_point) ext4 defaults 0 0" | sudo tee -a /etc/fstab

このコマンドは以下のことを行います。

  • readlink -f を使用してファイルの絶対パスを取得します。
  • tee -a を使用して、sudo 権限でフォーマットされた行を /etc/fstab に追加します。

fstab エントリの各フィールドを分解してみましょう。

  1. デバイス - ストレージデバイスファイルの完全パス
  2. マウントポイント - マウントディレクトリの完全パス
  3. ファイルシステムの種類 - ext4
  4. マウントオプション - defaults(rw,suid,dev,exec,auto,nouser,async と同等)
  5. Dump - 0(dump でバックアップしない)
  6. Pass - 0(起動時にファイルシステムをチェックしない)

fstab エントリをテストする

mount -a コマンドを使用して、エントリが正しく機能するかテストします。このコマンドは、/etc/fstab にリストされているがまだマウントされていないすべてのファイルシステムをマウントします。

sudo mount -a

エラーメッセージが表示されない場合は、エントリが正しいことを意味します。

マウントを確認する

ファイルシステムが期待通りにマウントされていることを確認します。

df -hT | grep mount_point

ext4 タイプでマウントされたファイルシステムが表示されるはずです。

より多くのオプションで fstab エントリを変更する

次に、前のステップで学んだマウントオプションを使用するようにエントリを変更しましょう。nano テキストエディタで /etc/fstab ファイルを編集します。

sudo nano /etc/fstab

追加した行を見つけます。これは次のようになっているはずです。

/home/labex/project/storage_device.img /home/labex/project/mount_point ext4 defaults 0 0

マウントオプション(4 番目のフィールド)を defaults から ro,noexec に変更します。

/home/labex/project/storage_device.img /home/labex/project/mount_point ext4 ro,noexec 0 0

Ctrl+O を押して変更を書き込み、Enter を押して確認し、Ctrl+X を押して nano を終了します。

新しいオプションで再マウントする

ファイルシステムをアンマウントし、/etc/fstab のすべてのエントリを再マウントします。

sudo umount ~/project/mount_point
sudo mount -a

新しいマウントオプションを確認する

ファイルシステムが新しいオプションでマウントされていることを確認します。

mount | grep mount_point

出力に ronoexec オプションが表示されるはずです。

将来の実験のためにクリーンアップする

整理のために、元の /etc/fstab を復元しましょう。

sudo cp /etc/fstab.backup /etc/fstab
sudo umount ~/project/mount_point

永続的なマウントの理解

/etc/fstab ファイルは以下の方法を提供します。

  • 起動時にファイルシステムを自動的にマウントする
  • マウントオプションを永続的に設定する
  • 起動時のファイルシステムチェックの順序を制御する

本番環境では、/etc/fstab を適切に設定することで、システム起動時にすべての必要なファイルシステムが手動介入なしで利用可能になります。

まとめ

Linux ファイルシステムのマウント実験を完了したことをお祝いします。あなたは、Linux システム管理者や技術ユーザーにとって不可欠な重要なスキルを身につけました。

この実験では、以下のことを学びました。

  1. ストレージデバイスの作成とフォーマット

    • dd コマンドを使用してシミュレートされたストレージデバイスを作成する方法
    • mkfs.ext4 を使用してデバイスを ext4 ファイルシステムでフォーマットする方法
  2. 基本的なマウント操作

    • マウントポイントディレクトリを作成する方法
    • mount コマンドを使用してファイルシステムをマウントする方法
    • df やその他のコマンドを使用してマウントを確認する方法
  3. セキュリティと制御のためのマウントオプション

    • バイナリの実行を防止するために noexec オプションを使用する方法
    • 読み取り専用のファイルシステムを作成するために ro オプションを使用する方法
    • セキュリティを強化するために複数のマウントオプションを組み合わせる方法
  4. /etc/fstab を使用した永続的なマウント

    • 起動時にファイルシステムを自動的にマウントするように設定する方法
    • 永続的なマウントオプションを設定する方法
    • fstab エントリをテストして確認する方法

これらのスキルを使って、以下のことができるようになります。

  • Linux で様々な種類のストレージデバイスを管理する
  • マウントオプションを通じてセキュリティ制御を実装する
  • システム起動時の自動マウントを設定する
  • ファイルシステムのマウント問題をトラブルシューティングする

Linux の学習を続ける中で、物理ストレージデバイス、ネットワーク共有、仮想ファイルシステムを扱う際に、これらのスキルが役立つことがわかるでしょう。学んだ原則は、多くの異なる Linux ディストリビューションやストレージ技術に適用できます。