ファイルシステムのアーキテクチャ
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社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 コマンドでシステムコールの流れを見てみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。