# ローカルファイルシステム実装比較
## 定義
ローカルファイルシステム実装比較とは、単一ホスト上でブロックデバイスを対象に動作するファイルシステムタイプ(FFS、ext3/ext4、XFS、ZFS、Btrfs)がパフォーマンスのために採用してきた設計上の工夫の総称である。FFS(Berkeley fast file system)はオリジナルUnixファイルシステムのフリーリストのフラグメンテーション問題(実運用数週間で転送速度が175KB/秒から30KB/秒まで劣化した事例)を、パーティションをシリンダーグループに分割しiノード・データを近接配置する方式とブロックサイズの拡大(4KB)で解決し、後続の多くのファイルシステムの基礎となった。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.4.5.1)
## ジャーナリングとコピーオンライト(COW)
ジャーナル(ログ)はファイルシステムへの変更を記録し、クラッシュ・電源障害時に変更をアトミックに(全面的に成功か失敗かのいずれかに)再現できるようにする。ジャーナリングのないファイルシステムはクラッシュ時に大きな(TB級)ファイルシステムで何時間もかかるfsck修復が必要になる。コピーオンライト(COW)は既存ブロックを上書きせず、(1) 新しい位置にブロックを書き込み、(2) 参照を新ブロックに更新し、(3) 古いブロックをフリーリストに追加する、という手順で更新を行う。クラッシュ時の完全性維持とランダム書き込みのシーケンシャル化を両立するが、満杯に近づくとCOWによるフラグメンテーションでパフォーマンスが下がることがある(特にHDD)。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.4.4.2, §8.4.4.3)
## 実装ごとの主要機能
| ファイルシステム | 開発元/年 | 主要なパフォーマンス機能 |
|---|---|---|
| ext3 | 1999 | ジャーナリング(オーダード/ジャーナルモード)、外部ジャーナルデバイス、Orlovブロックアロケータ、HTreeディレクトリインデックス |
| ext4 | 2008(Linux) | エクステント、fallocate()プレアロケーション、遅延アロケーション、高速fsck |
| XFS | 1993(SGI) | アロケーショングループによる並列アクセス、エクステント、ジャーナリング、ストライプアロケーション、オンラインデフラグ |
| ZFS | 2005(Sun) | プール化ストレージ、COW、ARC(MRU/MFU)、インテリジェントプリフェッチ、SLOG、L2ARC、圧縮、重複排除 |
| Btrfs | 2007(Oracle) | COW+B木、プール化ストレージ、オンライン平準化、エクステント、スナップショット |
XFSは現在ほとんどのLinuxディストリビューションでルートファイルシステムとして使え、Netflixはワークロード性能を理由にCassandraデータベースインスタンスでXFSを採用している(ルートファイルシステムはext4)。ZFSはCDDLライセンスのためアドオン扱いが一般的で、OpenZFSプロジェクトは2019年にLinuxをメインOSとしてサポートすると発表したが、ライナス・トーバルズを含む抵抗が根強い。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.4.5.2-§8.4.5.6)
## 横断的知見
- 本概念に触れたソースは現時点で1件([[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]])のため、複数ソース突き合わせによる知見の蓄積は今後の ingest に委ねる。[[並列ファイルシステム]](Lustre/GPFS/Ceph等)がデータ/メタデータ分離やオブジェクトベースストレージを設計原則とするのに対し、本概念が扱うローカルファイルシステムはCOW・ジャーナリング・エクステントといった単一ホスト内の耐久性・局所性の工夫を中心とする。両者は「分散か単一ホストか」という前提が異なるため単純比較はできないが、ZFS/BtrfsのCOWとプール化ストレージという設計は、並列ファイルシステムのメタデータ分離・オブジェクトベース設計と同様に「単一ディスク前提のFFS的設計からの脱却」という共通の方向性を持つ。
## 未解決の問い
- ZFSのCOWとBtrfsのCOWは類似の設計だが、フラグメンテーション対策(デフラグ機能の有無・オンライン平準化)の実運用効果に差はあるか。本章は機能一覧の比較にとどまり、定量的なベンチマーク比較は示していない。
- ext4のジャーナリングモード(オーダード対ジャーナル)の選択が実運用のパフォーマンス・信頼性トレードオフにどう影響するか、具体的な数値は本章にはない。
- XFSのアロケーショングループ数やZFSのrecordsizeのようなチューニングパラメータの最適値は、ワークロード特性(§8.5.3のチェックリスト)にどう対応づくか、章全体を横断した体系的なマッピングは示されていない。
## 関連
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] — 本概念の原典解説(§8.4.4-§8.4.5)。
- [[並列ファイルシステム]] — 複数ホストに分散するファイルシステム(Lustre/GPFS/Ceph等)との対比。
## 出典
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.4.4, §8.4.5