前回は,ファイル・システムの概要とLinuxのファイル・システム機構について解説しました。アプリケーションなどで作成したデータはハード・ディスクなどの記録媒体にファイルとして保存しますが,実際にはファイルの形ではなく,データ・ブロックの形式に変換されて記録されます。この変換を行うのがカーネルのファイル・システム機構です。データ変換方式の違いにより,さまざまなファイル・システムが存在します。

 Linuxのファイル・システム機構は,図1のように階層化されています。VFS(Virtual File System)というレイヤーを用意することで,さまざまな種類のファイル・システムを統一的に利用できるよう工夫されているのが特徴です。各ファイル・システム特有の処理は,「ローカル・ファイル・システム」と呼ばれる部分が担当します。

図1●ファイル・システムとは何か
図1●ファイル・システムとは何か
ファイルという人間が扱いやすいデータ形式と,ブロックとの対応を管理し,相互変換するのがファイル・システムの役割です。

 今回はローカル・ファイル・システムの例として,Linuxで標準的に利用されているext2ファイル・システムを解説します。ファイルやディレクトリという構造がext2ではどのようにデータ・ブロックとして保存されているかを見てみましょう。

ext2ファイル・システム開発の経緯

 ext2ファイル・システムは,Linux用に設計されたファイル・システムです。UNIXの伝統的なファイル・システム*1である「FFS」(Fast File System)を参考に設計されており,構造がよく似ています。シンプルな構造である半面,いくつか構造上の欠点も持っています。

 Linuxの開発初期は,教育用の小規模UNIX系OS「MINIX」の標準ファイル・システム(MINIXファイル・システム)を利用していました。しかし,MINIXファイル・システムには,最大64Mバイトまでのディスク区画しか扱えない,ファイル名の最大長が32文字などの制限があり,本格的な利用には力不足でした。そこで,さまざまな拡張を取り入れたLinuxネイティブのファイル・システム「extファイル・システム」が開発されたのです。

 しかし,extファイル・システムには性能面で問題があり,すぐに改良を施したext2ファイル・システムが1994年に開発されました。それ以後今日まで,Linuxではext2ファイル・システムが標準ファイル・システムとして利用されています*2