VFSとファイルシステムの基礎技術:Linuxファイルシステム技術解説(1)(1/2 ページ)
現在のLinuxは、複数のファイルシステムが選択できる。だが、どれを選べばよいのだろうか? ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する。(編集局)
カーネル2.4から、Linuxは本格的にエンタープライズを意識したOSとしての機能を備えるようになった。その特徴の1つがファイルシステムの信頼性である。Linuxの場合、当初に実装されたext2からジャーナリングファイルシステムであるext3やReiserFS、そして商用ファイルシステムとして発展してきたJFSやXFSが取り込まれ、複数のファイルシステムが選択できるようになっている。
本連載は、これらのファイルシステムの違いを把握し、ファイルシステムを選択するための指針となるような情報を提供する。
ファイルシステムとは
私たちは通常、データの「読み込み」「書き込み」などの操作を「ファイル」単位で行う。これは、ファイルシステムが記憶媒体(ハードディスクetc.)を抽象化し、データ格納の仲介作業を行っているためである。また、比較的サイズの大きなファイルの書き込みも、それほどストレスを感じないで行うことができる。これも、ファイルシステムがキャッシュメモリを効率的に利用し、アクセス速度の遅い二次記憶装置(ハードディスクなど)に対して非同期書き込みを行うことで、レスポンスタイムを向上しているためである。ファイルシステムは、このように大容量の二次記憶装置を効率的に管理し、利用するための手段を提供する基本的なOSのサービスの1つである。
Linuxにおけるファイルシステムの仕組みのベースとなる部分は、カーネルのVFS(Virtual File System:仮想ファイルシステム)という抽象化された管理機構にある。「ext2、ext3、……」といった個々のファイルシステムは、こうしたベースの機能を使いながら、さらに多様な要求に応えるための方法を提供している。
「ジャーナリング」などの手法は、データの管理について信頼性を向上するための一方法である。Linuxでは個別ファイルシステムが信頼性を上げる手段を提供しているのに加え、ベースとなるVFS部分もカーネルのバージョンアップとともにスケーラビリティの向上に向けて改善されていることも特徴といえる。
本連載では、ファイルシステムの多重構造を分かりやすく解説する。同時に、Linuxに取り込まれているさまざまなファイルシステムの特徴についてそれぞれ解説する。ファイルシステムのベースとなる構造を明確にし、さまざまなファイルシステムのメリット/デメリットを理解することで、より良い選択基準となることを目指している。
また本連載の最後では、こうした理論的な理解を補うために、実際の性能についての比較調査を行う。ファイルシステムはOSの一部であるため、ベースとなるハードウェア構成に依存した性能を示す。そのため、適正なベンチマークを行うことが重要である。こうしたベンチマークのツールの紹介と利用方法についても述べる。
ファイルシステムの目的
初めに、基本的なファイルシステムの概念を理解するために、ファイルシステムの目的について少し歴史的な経緯も含めて考えてみよう。
そもそも、ファイルシステムはハードディスクやフロッピーディスク、CD/DVD-ROMといった二次記憶媒体にデータを保存し、そのデータを読み書きする方法を提供するために作られたものである。つまり、情報を永続的に記録する必要がない場合や、揮発性メモリ(RAM)に一時的にデータを持ち、電気が切れてしまえばその情報は再現できなくてもよい場合は、ファイルシステムは不要である。組み込みシステムなどでは、こうした理由によりファイルシステムを実装しないものもある。データの保全性が重要視される汎用機系システムの需要の拡大は、ディスクを効率的に使用し、その安全性の保証を目的とするファイルシステムの発展を促してきた。
ファイルシステムへの需要
現在使用されているPCやサーバなどのハードウェアの基本構成は、CPU、メモリ、ディスク+αの組み合わせが一般的である。ファイルシステムは、ディスクなどの二次記憶装置へのデータの保存を行うためにこの構成を最大限に生かす必要があった。最大の問題は、データの保存の対象となるディスク(二次記憶媒体)の最大のメリットである容量(領域)を生かしつつ、デメリットである速度の遅さといったトレードオフを解消することであった。
例えば、最近の例ではRAMに対して、HDDは何万倍もの記憶領域を持つ(メモリ:Mbytesクラスとディスクなど:Gbytes、Tbytesクラス)。一方、CPUの処理時間に対して、ディスクへの書き込み速度は約100万倍もの差がある(CPU:10^-9ナノセックオーダーとHDD:10^-3ミリセックオーダー)。こうした構成の差をいかに吸収し、1つのシステムとして整合性を持たせるか、またどのようにデータの安全性を確保するかが課題であった。
こうした問題は、当初はシステムに実装される唯一のファイルシステムが対処していた。しかし、UNIXが複数に分化・発展する過程でファイルシステムも多様化し、NFSなども含めてファイルシステムを統一的に扱う新たな方法が求められた。VFSは「ファイル」と「ディレクトリ」をメインにしたiノードによる管理と、ディスク・バッファキャッシュを利用した非同期処理といった共通の仕組みを提供し、UNIX系のOSで広く普及した。
VFSがファイルシステム共通の機能を受け持つことで、各ファイルシステムはその機能をより特化させることが可能になった。同時に、ユーザーは複数のファイルシステムを統一的な方法で扱えるようになった。
ext2やext3などのファイルシステムは、このVFSをベースにさらにさまざまな目的や用途に対して異なるアルゴリズムや方法で解決方法を提供する。これらはUNIX上で発展し、現在でもUNIX系のOSのみならず、LinuxやWindowsなどでもコア技術として採用されている。次に、Linuxを例にして具体的に見てゆこう。
Copyright © ITmedia, Inc. All Rights Reserved.