エクステントは,比較的新しいファイル・システムが採用するデータの管理単位です。従来は,ブロック・デバイスにおけるデータの入出力単位である「ブロック」を使ってデータを管理していましたが,コンピュータの取り扱うデータ量の増加にしたがってブロック単位の管理では効率が悪くなってきました。そこで,「連続した任意の数のブロック」を単位にデータを管理する手法が考案されました。この,連続した任意の数のブロックのことを「エクステント」と呼びます。

 なぜ,ブロック単位のデータ管理は効率が悪いのでしょうか。それはブロックのサイズが,標準的な環境においては,4Kバイトと小さく設定されているからです。そのため,例えば128Mバイトといったさして大きくないデータですら,3万2000個以上ものブロックに分割して管理する必要があります。多数のブロックを管理するには多量の管理情報が必要で,その分,記録領域を無駄に消費してしまいます。例えばext3では,1Gバイトのファイルを管理するのに約1Mバイトの管理情報を消費します。

 データ管理に必要なブロック数が多くなると,データにアクセスするために複数の管理テーブルを参照しなければならないケースも出てきます(このような参照方法を間接参照と呼びます)。間接参照が必要になるとデータのアクセスの際の処理が増えますので,入出力性能も低下してしまいます。

 これらの問題は,ブロック・サイズを大きくすれば解決します。しかしブロック・サイズを増やすと,小さなファイルで記録領域を無駄に消費してしまいます。その上,(Linuxを含めた)多くのOSは,ブロックとメモリー管理の単位である「ページ」とが同じサイズであることを前提に実装されています。ページ・サイズはハードウエアで規定されていて勝手には変更できませんので,ブロック・サイズを変える対処は容易ではありません。

 そこで使われ始めたのがエクステントです。各エクステントは「使用ブロック数」の情報を保持しており,それぞれを別々の大きさにできます。つまり可変サイズのブロックと同様に取り扱えるわけです。小さなサイズのファイルには小さなサイズのエクステントを,大きなサイズのファイルには大きなエクステントを割り当てるようにすれば,効率の良いデータ管理が実現できます。Linuxで利用可能な主なファイル・システムのエクステント対応情報を表1に挙げました。

表1 Linuxの主要ファイル・システムのエクステント対応
ファイル・システム名エクステント対応
ext2×
ext3×
ext4
ReiserFS×
Reiser4
XFS
JFS
Btrfs