【初心者向け】ファイルシステム関連の用語【５分で読める】

# ファイルシステム関連の用語

理解のために小咄形式でまとめました。

:::note info
システムパフォーマンス関連記事の目次
- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)
:::

**登場人物**
- **太郎（後輩）**：入社1年目の若手エンジニア。
- **花子（先輩）**：システムエンジニア歴3年の先輩。

**場面：オフィスの開発ルーム**
*太郎が `ファイルシステム` についての資料を見ながら、花子に質問する。*

**太郎**：「花子先輩、ファイルシステムについて勉強してるんですが、`基本的な用語` が多すぎて混乱しています…。 `ファイルシステムの基本用語` について教えてもらえませんか？」

**花子**：「もちろんよ！ `ファイルシステム` は `ストレージ上のデータ管理の仕組み` だから、 `基本用語を理解` しておくことが重要ね。 まず、 `6つの主要な用語` について説明するわ。」

---

### **ファイルシステム関連の用語**
**花子**：「`ファイルシステム` に関連する `重要な用語` は次の 6 つよ。」

1. **ファイルシステム（File System）**
2. **ファイルシステムキャッシュ（File System Cache）**
3. **オペレーション（Operation）**
4. **I/O（Input/Output）**
5. **メタデータ（Metadata）**
6. **特殊ファイルシステム（Special File System）**

---

#### **1. ファイルシステム（File System）**
**花子**：「`ファイルシステム` とは、 `データをファイルやディレクトリとして整理し、管理する仕組み` のことよ。」

- **ファイルベースのデータアクセス** を提供する。
- **アクセス制御（パーミッション管理）** を備えている。
- **デバイス、ソケット、パイプなどの特殊ファイルを扱う**。

「たとえば、 `ext4`、 `NTFS`、 `ZFS` などの `ファイルシステムの種類` があるわね。」

**太郎**：「なるほど、 `ファイルやフォルダの管理システム` みたいなものですね！」

---

#### **2. ファイルシステムキャッシュ（File System Cache）**
**花子**：「`ファイルシステムキャッシュ` は、 `ディスク I/O を最適化` するために `メモリ上にデータを保持` する仕組みよ。」

- **リードキャッシュ（Read Cache）**: よく使うデータをメモリに保存して、高速アクセスを可能にする。
- **ライトキャッシュ（Write Cache）**: 書き込みデータを一時的にキャッシュし、後でまとめてディスクに書き込む。

「たとえば、 `Linux の Page Cache` や `Windows の File System Cache` があるわね。」

**太郎**：「ってことは、 `キャッシュを有効活用` すれば `ディスクの負荷を減らせる` んですね！」

---

#### **3. オペレーション（Operation）**
**花子**：「`ファイルシステムのオペレーション` とは、 `ファイルに対して行われる処理` のことよ。」

- **read(2)** → ファイルを読み込む。
- **write(2)** → ファイルにデータを書き込む。
- **open(2)** → ファイルを開く。
- **close(2)** → ファイルを閉じる。
- **stat(2)** → ファイルのメタデータを取得する。
- **mkdir(2)** → 新しいディレクトリを作成する。

「つまり、 `ファイルシステムに対するシステムコール` のことね。」

**太郎**：「なるほど、 `ファイルを操作する基本的な関数` ってことですね！」

---

#### **4. I/O（Input/Output）**
**花子**：「`I/O` は `ディスクの入出力処理` のことよ。」

- **シーケンシャル I/O** → 連続したデータを読み書きする（高速）。
- **ランダム I/O** → バラバラの場所にあるデータをアクセスする（低速）。
- **同期 I/O** → データ書き込みが完了するまで待つ（確実）。
- **非同期 I/O** → 書き込みを並行して処理する（高速）。

「たとえば、 `データベース` は `ランダム I/O が多い` し、 `動画ファイルの再生` は `シーケンシャル I/O` よ。」

**太郎**：「ってことは、 `ワークロードに応じて I/O の最適化` が必要になるんですね！」

---

#### **5. メタデータ（Metadata）**
**花子**：「`メタデータ` は `ファイルの情報（データ以外の属性）` を管理するデータよ。」

- **ファイルサイズ**
- **作成日時・更新日時**
- **アクセス権限（パーミッション）**
- **所有者**
- **ハードリンク情報**

「例えば、 `ls -l` コマンドを実行すると、 `メタデータの一部（パーミッション、サイズ、更新日時）` が表示されるわ。」

**太郎**：「つまり、 `ファイルの付加情報` を管理する仕組みなんですね！」

---

#### **6. 特殊ファイルシステム（Special File System）**
**花子**：「`特殊ファイルシステム` は `通常のファイル保存とは異なる仕組みを持つファイルシステム` のことよ。」

- **tmpfs** → メモリ上に作られる高速な仮想ファイルシステム（/tmp など）。
- **procfs** → プロセス情報を提供する仮想ファイルシステム（/proc）。
- **sysfs** → システム情報を提供する仮想ファイルシステム（/sys）。
- **devfs** → デバイス管理用の仮想ファイルシステム（/dev）。

「たとえば、 `/proc/cpuinfo` を見ると、 `CPU の情報がファイルとして表示される` のよ。」

**太郎**：「ってことは、 `特殊ファイルシステムはファイルとしてシステム情報を提供する` んですね！」

---

**花子**：「これらの `ファイルシステムの概念` を `図書館の管理システム` に例えると、こんな感じね。」

1. **ファイルシステム** → `図書館全体の管理システム（書架やルール）`
2. **ファイルシステムキャッシュ** → `よく借りられる本をカウンターに置く（アクセス最適化）`
3. **オペレーション** → `本を借りる、返す、検索する（ファイル操作）`
4. **I/O** → `本の貸し出し・返却の動作（ディスク I/O）`
5. **メタデータ** → `本のタイトル、著者、発行年、貸出状況（ファイルの属性）`
6. **特殊ファイルシステム** → `電子カタログや検索システム（特殊管理）`

**太郎**：「なるほど！ `ファイルシステムはデータ管理の仕組み` で、 `メタデータやキャッシュが効率化に役立つ` ってことですね！」

---

### **まとめ**
**花子**：「`ファイルシステムの基本概念` を理解することで、 `データ管理やパフォーマンスの最適化` がしやすくなるわ。」

**太郎**：「ありがとうございます！ `ファイルシステムキャッシュの挙動` を確認するために、 `free` コマンドを試してみます！」

# 参考リンク

システムパフォーマンス関連記事の目次

- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

- [［改訂新版］プロのためのLinuxシステム構築・運用技術](https://www.amazon.co.jp/dp/B01LZURAPK)
- [改訂2版 ネットワークエンジニアの教科書](https://www.amazon.co.jp/dp/B07NXQ4TDV)
- [絵で見てわかるシステムパフォーマンスの仕組み](https://www.amazon.co.jp/dp/B00LHFOTF4)
- [詳解 システム・パフォーマンス 第2版](https://www.oreilly.co.jp/books/9784814400072/)
- [入門 モダンLinux](https://www.oreilly.co.jp/books/9784814400218/)
- [Linuxシステム管理](https://www.oreilly.co.jp/books/9784873113463/)