ファイルシステムのアーキテクチャ
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
場面:オフィスの会議室
太郎が ファイルシステムのアーキテクチャ に関する資料を見ながら、花子に質問する。
太郎:「花子先輩、ファイルシステムのアーキテクチャ について調べてるんですが、 どの部分がどんな役割をしているのか が整理しきれません。」
花子:「なるほど。 ファイルシステムのアーキテクチャ は、 I/O スタック や キャッシュ などの 複数のレイヤー で構成されているわ。それぞれの役割を 6 つの要素 に分けて説明するわね。」
ファイルシステムのアーキテクチャ
花子:「ファイルシステムのアーキテクチャ は、大きく 6 つのコンポーネント で構成されるの。」
- ファイルシステム I/O スタック
- VFS(Virtual File System)
- ファイルシステムキャッシュ
- ファイルシステムのパフォーマンスに関わるその他の機能
- ファイルシステムタイプ
- ボリュームとプール
1. ファイルシステム I/O スタック
花子:「ファイルシステム I/O スタック とは、 アプリケーションがファイルを操作するときに通る処理の流れ のことよ。」
-
アプリケーション →
ファイルを開いたり、データを読み書きする -
カーネル(システムコール層) →
アプリケーションからの I/O リクエストを受け取る -
VFS(仮想ファイルシステム) →
どのファイルシステムを使っているかに関わらず、共通の操作を提供 -
ファイルシステム →
ext4, XFS, ZFS などの実際のファイルシステムが処理 -
ブロックデバイス →
ディスクデバイスに I/O を転送し、実際にデータを読み書き
「これは 工場の生産ライン みたいなもので、 注文(I/O リクエスト) が 原料(データ) を 完成品(ファイルの読み書き) に変えるまでのプロセスね。」
太郎:「なるほど! `I/O がどのレイヤーで処理されるのかを理解すれば、どこで遅延が発生しているのかが分かりやすくなりますね!」」
2. VFS(Virtual File System)
花子:「VFS(仮想ファイルシステム) は、 異なるファイルシステム間の共通インターフェース を提供するの。」
-
OS にとっての抽象化レイヤー であり、
ext4, XFS, NFSなどを統一的に扱える。 - アプリケーションは VFS を通じて操作し、特定のファイルシステムに依存しない。
- Linux の VFS は
i ノードやスーパーブロックなどの概念を利用する。
「これは 翻訳機 みたいなもので、 アプリケーションの指示を各ファイルシステムに合わせて変換している のよ。」
太郎:「つまり、 VFS があるおかげで、異なるファイルシステムでも統一的にファイル操作ができる ってことですね!」
3. ファイルシステムキャッシュ
花子:「ファイルシステムキャッシュ は、 I/O のパフォーマンス向上 に欠かせない仕組みよ。」
-
ページキャッシュ →
よく使うデータをメモリに保持し、ディスクアクセスを減らす。 -
ディレクトリキャッシュ →
ディレクトリ情報をキャッシュし、ファイル検索を高速化。 -
バッファキャッシュ →
書き込みデータを一時的に保持し、後でまとめてディスクに書き込む。
「たとえば ノートの付箋 みたいなもので、 頻繁に使う情報をメモに残しておけば、いちいち本を開かなくても済む のと同じね。」
太郎:「確かに! キャッシュを有効活用すれば、ディスクへのアクセスを減らして I/O を高速化できる んですね!」
4. ファイルシステムのパフォーマンスに関わるその他の機能
花子:「ファイルシステムのパフォーマンス には、 さまざまな機能 が影響を与えるわ。」
-
ジャーナリング →
障害時のデータ保護(ext4, XFS) -
スナップショット →
過去の状態を保存(ZFS, Btrfs) -
データ圧縮 →
ディスク使用量の削減(ZFS, Btrfs) -
データ重複排除 →
同じデータを一度だけ保存(ZFS, Btrfs)
「これは データ管理の工夫 みたいなもので、 バックアップやデータ整理を自動でやってくれる機能 よ。」
5. ファイルシステムタイプ
花子:「ファイルシステムには、さまざまな種類 があるわ。」
-
ext4 →
Linux で一般的に使われる標準的なファイルシステム。 -
XFS →
大規模なファイルに強い。高スループット。 -
ZFS →
データ整合性、スナップショット、圧縮などの高度な機能を持つ。 -
Btrfs →
ZFS に似た機能を持つが、Linux カーネルに統合されている。 -
FAT32 →
互換性が高く、Windows・macOS・Linux で利用可能。4GB以上のファイルを扱えない。 -
exFAT →
FAT32 の制限を克服したファイルシステム。4GB以上のファイルに対応し、Windows・macOS・Linux で使える。 -
NTFS →
Windows の標準ファイルシステム。大容量ファイルやアクセス制御をサポートし、ジャーナリング機能も備える。 -
APFS →
macOS・iOS向けの最新ファイルシステム。高速でスナップショットや暗号化をサポート。
「これは 収納ボックスの種類 みたいなもので、 用途に応じて適したものを選ぶ必要がある のよ。」
6. ボリュームとプール
花子:「ボリュームとプール は、 ファイルシステムを格納するストレージの管理単位 ね。」
-
ボリューム →
ストレージの一部を切り出した単位(パーティション、LVM など) -
プール →
複数のストレージをまとめた管理単位(ZFS, Btrfs)
「これは 貯水タンク みたいなもので、 一つの大きなタンクから水(データ)を取り出せる のよ。」
まとめ
花子:「ファイルシステムの アーキテクチャ を理解すると、 どの層で問題が発生しているのか を分析しやすくなるわ。」
太郎:「ありがとうございます! `VFS の影響を調べるために、strace コマンドでシステムコールの流れを見てみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。