13.2 Linuxの主要なファイルシステム

2、3年前とは異なり、Linuxシステムで使用するファイルシステムを選択するのは、数秒で済む問題(Ext2とReiserFSのどちらにするか)ではありません。カーネル2.4およびそれ以降では、さまざまなファイルシステムが選択できるようになりました。この後で、各ファイルシステムの基本的な動作原理、およびそれらが提供する利点の概要について説明します。

あらゆる用途で最適な単一のファイルシステムなど存在しない、ということを考慮しておくことが重要です。各ファイルシステムには特定の利点と欠点があり、それらを考慮する必要があります。最も洗練されたファイルシステムであっても、妥当なバックアップの方針を何か他の機能で置き換えることはできません。

この章で「データの完全性」および「データの一貫性」という用語が登場した場合、それらはユーザスペースのデータ(アプリケーションが自らのファイルに書き込むデータ)の一貫性を指していません(メタデータの一貫性を指します)。ユーザスペースのデータが一貫しているかどうかは、アプリケーション自体が管理する必要があります。

[Important]ファイルシステムのセットアップ

この章では特に注記がない限り、パーティションやファイルシステムのセットアップまたは変更するために必要なステップは、すべてYaSTを使用して実行できます。

13.2.1 ReiserFS

ReiserFSは、公式にはカーネル2.4リリース時の主要な機能の1つですが、SUSE Linuxバージョン6.4以降で、ReiserFSは2.2.x SUSEカーネルに対するカーネルパッチとして使用可能でした。ReiserFSは、Hans Reiser(ハンス・ライザー)とNamesys社の開発チームによって設計されました。ReiserFSは、Ext2に代わる強力な選択肢であることを実証してきました。その主要な利点は、より良いディスクスペース使用効率、より良いディスクアクセスパフォーマンス、およびより高速なクラッシュ回復機能です。

ReiserFSの利点をより詳細に記述すると、以下のようになります。

より良いディスクスペース使用効率

ReiserFSでは、すべてのデータは、B*-Tree(バランスドツリー)と呼ばれる構造内で編成されています。このツリー構造は、より良いディスクスペース使用効率に貢献しています。小さなファイルは、B*-Treeのリーフノードに直接格納されるからです。そのようなファイルをどこか他の場所に格納して、ディスク上の実際の場所を指すポインタを維持するより優れています。それに加えて、ストレージ(記憶領域)は1KBまたは4KBのチャンク単位で割り当てられるのではなく、実際に必要なサイズの構成部分(エクステント)を割り当てられます。もう1つの利点は、inodeの動的割り当てに関係しています。これは、ファイルシステムの作成時にinodeの密度を指定する必要のある、Ext2のような従来のファイルシステムに比べて、ファイルシステムの柔軟性を高めます。

より良いディスクアクセスパフォーマンス

小規模なファイルでは、多くの場合、ファイルのデータと「stat_data」 (inode)情報が互いに隣り合って保存されます。これらは1回のディスクI/O操作で読み取れるので、ただ1回のディスクアクセスで、必要な情報すべてを取得できることを意味します。

高速なクラッシュ回復機能

ジャーナルを使用して、メタデータに加えられた最新の変更結果を記録しているので、ファイルシステムが大規模な場合を含め、ファイルシステムを数秒でチェックできます。

データジャーナリングによる信頼性

ReiserFSは、Ext3のセクション13.2.3項 「Ext3」で説明した概念に類似したデータジャーナリングおよび順序データモードをサポートしています。デフォルトのモードは、data=orderedです。このモードでは、データとメタデータの完全性は保証されますが、メタデータのジャーナリングだけが行われます。

13.2.2 Ext2

Ext2の起源は、Linuxの歴史の初期にさかのぼります。その前身であったExtended File Systemは、1992年4月に実装され、Linux 0.96cに統合されました。Extended File Systemは多くの変更を加えられ、Ext2として数年にわたって、最も人気のあるLinuxファイルシステムになりました。その後、他のジャーナルファイルシステムが作成され、非常に短い回復時間を達成したため、Ext2の重要性は低下しました。

Ext2の利点に関する短い要約を読むと、かつて幅広く好まれ、そして今でも一部の分野で多くのLinuxユーザから好まれるLinuxファイルシステムである理由を理解するのに役立ちます。

堅牢性

「古くからある標準」として、Ext2は過去に多くの改良を受け、集中的にテストされてきました。このような理由で、多くの人はExt2を岩のように堅牢(rock-solid)と呼びます。ファイルシステムが正常にアンマウントできず、システムが機能停止した場合、e2fsckはファイルシステムのデータの分析を開始します。メタデータは一貫した状態に戻り、保留されていたファイルとデータブロックは、指定のディレクトリ(lost+found)に書き込まれます。ジャーナルファイルシステムとは対照的に、e2fsckは、最近変更されたわずかなメタデータだけではなく、ファイルシステム全体を分析します。この結果、ジャーナルファイルシステムがログデータだけをチェックするのに比べて、かなり長い時間を要します。ファイルシステムのサイズにもよりますが、この手順は30分またはそれ以上を要することがあります。したがって、高可用性を必要とするどのようなサーバでも、Ext2を選択することは望ましくありません。ただし、Ext2はジャーナルを維持せず、非常にわずかなメモリを使用するだけなので、時には他のファイルシステムより高速なことがあります。

容易なアップグレード性

Ext2のコードは、Ext3が次世代ファイルシステムであることを明確に主張するための強力な土台になりました。Ext2の信頼性および堅牢性が、ジャーナルファイルシステムの利点と見事に融合されました。

13.2.3 Ext3

Ext3は、Stephen Tweedieによって設計されました。他のすべての次世代ファイルシステムとは異なり、Ext3は完全に新しい設計理念に基づいているわけではありません。Ext3は、Ext2をベースとしています。これら2つのファイルシステムは、互いに非常に似通っています。Ext3ファイルシステムを、Ext2ファイルシステムの上に構築することも容易です。Ext2とExt3の間にある最も重要な違いは、Ext3がジャーナルをサポートしていることです。要約すると、Ext3には、次の3つの主要な利点があります。

Ext2からの容易で信頼性の高いアップグレード

Ext3はExt2のコードをベースとし、ディスクフォーマットとメタデータフォーマットが共通しているので、Ext2からExt3へのアップグレードは非常に容易です。ReiserFSまたはXFSのような他のファイルシステムへの移行はかなり手間がかかります(ファイルシステム全体のバックアップを作成し、移行先ファイルシステムを新規に作成する必要があります)が、それとは異なり、Ext3への移行は数分で完了します。ファイルシステム全体を新規に作成する作業は障害なしで完了するとは限りませんが、Ext3への移行にはそのような作業が伴わないので、非常に安全でもあります。ジャーナルファイルシステムへのアップグレードを待つ既存のExt2システムの数を考慮すると、多くのシステム管理者にとってExt3が重要な選択肢になっていることが容易に想像できるはずです。Ext3からExt2へのダウングレードも、アップグレードと同じほど容易です。Ext3ファイルシステムのアンマウントを正常に行い、Ext2ファイルシステムとして再マウントするだけです。

信頼性とパフォーマンス

他のジャーナルファイルシステムは、「メタデータのみ」のジャーナルアプローチに従っています。これは、使用中のメタデータは常に一貫した状態を維持されていますが、ファイルシステムのデータ自体に関しては同じことが自動的に保証されるわけではない、という意味です。Ext3は、メタデータとデータの両方に注意するよう設計されています。「注意」の度合いはカスタマイズできます。Ext3のdata=journalモードを有効にした場合、最大の保護(データの完全性)を実現しますが、メタデータとデータの両方がジャーナル化されるので、システムの動作が遅くなります。比較的新しいアプローチは、data=orderedモードを使用することです。これは、データとメタデータ両方の完全性を保証しますが、ジャーナルを適用するのはメタデータのみです。ファイルシステムドライバは、1つのメタデータの更新に対応するすべてのデータブロックを収集します。これらのブロックは、メタデータの更新前にディスクに書き込まれます。その結果、パフォーマンスを犠牲にすることなく、メタデータとデータの両方に関する一貫性を達成できます。3番目のオプションは、data=writebackを使用することです。これは、対応するメタデータをジャーナルにコミットした後で、データをメインファイルシステムに書き込むことを可能にします。多くの場合、このオプションは、パフォーマンスの点で最善と考えられています。しかし、内部のファイルシステムの完全性が維持される一方で、クラッシュと回復を実施した後では、古いデータがファイル内に再登場することを許してしまう可能性があります。管理者が他のオプションを指定しない限り、Ext3はデフォルトでdata=orderedを使用して動作します。

13.2.4 Ext2ファイルシステムからExt3への変換

Ext2ファイルシステムをExt3に変換するには、以下の手順に従います。

  1. tune2fs -jをルートとして実行して、Ext3ジャーナルを作成します。この結果、デフォルトのパラメータを使用してExt3ジャーナルが作成されます。

    ジャーナルの大きさや、どのデバイスにジャーナルを配置するかを自分で決定するには、代わりにtune2fs -Jを実行し、希望のジャーナルオプションであるsize=およびdevice=を指定します。tune2fsプログラムの詳細については、tune2fsマニュアルページを参照してください。

  2. Ext3 ファイルシステムが Ext3 として正しく認識されることを保証するために、ルートとして/etc/fstabファイルを編集し、対応するパーティションに対して指定されているファイルシステムタイプをext2からext3へ変更します。この変更結果は、次回の再起動後に有効になります。

  3. Ext3パーティションとしてセットアップされたファイルシステムからブートするには、ext3jbdの各モジュールをinitrd内に含めます。この作業を行うには、ルートとして、ext3およびjbdINITRD_MODULES変数に追加して/etc/sysconfig/kernelを編集します。変更を保存した後、mkinitrdコマンドを変更します。これにより新規のinitrdがビルドされ、すぐに使用できます。

13.2.5 Reiser4

カーネル2.6のリリース直後に、ジャーナリングファイルシステムのファミリには、もう1つのメンバーReiser4が追加されました。Reiser4は、基本的にその前任のReiserFS(バージョン3.6)と異なります。Reiser4により、ファイルシステム機能を調整するためのプラグインの概念、およびきめ細かなセキュリティの概念が導入されます。

きめ細かなセキュリティの概念

Reiser4を設計する際に、開発者は、セキュリティ関連機能の実装に重点を置きました。したがって、Reiser4には、専用のセキュリティプラグインセットが付属しています。最も重要なプラグインには、ファイル「項目」の概念が導入されています。現在、ファイルアクセス制御はファイル単位に定義されています。複数のユーザ、グループ、またはアプリケーションに関連する情報を格納している大きなファイルがある場合、すべての関係者を含めるには、アクセス権が不明確でした。Reiser4では、そのような大きいファイルをより小さい部分(「項目」)に分割できます。次に、項目ごとおよびユーザごとにアクセス権を個別に設定できるため、ファイルのセキュリティをはるかに正確に管理できます。ちょうどいい例は、/etc/passwdです。今のところ、rootだけはファイルを読み取りおよび編集できますが、root以外のユーザはこのファイルに読み取り専用でしかアクセスできません。Reiser4の項目の概念を取り入れると、このファイルを複数の項目(ユーザにつき1項目)に分割できるため、ユーザやアプリケーションがそれぞれのデータを変更できます。ただし、他のユーザのデータにはアクセスできません。この概念では、セキュリティと柔軟性のどちらも付加されます。

プラグインによる拡張性

ファイルシステムで通常使用される多くのファイルシステム関数と外部関数は、Reiser4ではプラグインとして実装されます。このようなプラグインは、ベースシステムに簡単に追加できます。そのため、ファイルシステムに新しい機能を追加するために、カーネルを再コンパイルしたり、ハードディスクを再フォーマットしたりする必要はなくなりました。

遅延アロケーションによる優れたファイルシステムレイアウト

XFSと同様に、Reiser4では遅延アロケーションをサポートしています。13.2.6項 「XFS」を参照してください。メタデータにも遅延アロケーションを使用すれば、レイアウト全体がさらに優れたものになる可能性があります。

13.2.6 XFS

本来は、IRIX OS用のファイルシステムを意図してSGIがXFSの開発を開始したのは、1990年代初期です。XFSの背後にある考えは、ハイパフォーマンスの64ビットジャーナルファイルシステムを作成し、非常に要求の多い今日のコンピューティングの課題を満たすことです。XFSは大規模なファイルを操作する点で非常に優れていて、ハイエンドのハードウェアを適切に活用します。しかし、XFSには1つの欠点があります。ReiserFSと同様、XFSはメタデータの完全性には最大の注意を払いますが、データの完全性にはそれほど注意を払いません。

XFSの主要な機能を簡単に観察することにより、ハイエンドのコンピューティング分野で、XFSが他のジャーナルファイルシステムの強力な競合相手という立場を実証している理由を説明できます。

アロケーショングループの採用による高いスケーラビリティ

XFSファイルシステムの作成時に、ファイルシステムの基にあるブロックデバイスは、等しいサイズを持つ8つ以上の線形の領域に分割されます。これらをアロケーショングループと呼びます。各アロケーショングループは、独自のinodeと空きディスクスペースを管理します。実用的には、アロケーショングループを、1つのファイルシステムの中にある複数のファイルシステムと見なすこともできます。アロケーショングループは互いに独立しているのではなく、カーネルから複数を同時にアドレス指定できる、という特徴があります。この特徴は、XFSの高いスケーラビリティの鍵です。独立性の高いアロケーショングループは、性質上、マルチプロセッサシステムのニーズに適しています。

ディスクスペースの効率的な管理によるハイパフォーマンス

空きスペースとinodeは、各アロケーショングループ内のB+-Treeによって処理されます。B+-Treeの採用は、XFSのパフォーマンスとスケーラビリティに大きく貢献しています。XFSでは、遅延アロケーションを採用しています。XFSはアロケーション(割り当て)を2つのパートに分割して、この操作を処理します。保留されているトランザクションはRAMの中に保存され、適切な量のスペースが確保されます。XFSはこの時点では、データの格納場所(言い換えると、ファイルシステムのどのブロックか)を決定しません。決定可能な最後の瞬間まで、この決定は遅延(先送り)されます。短時間だけ存続する一部の一時データは、ディスクに書き込まれません。XFSがデータの実際の保存場所を決定する時点で、それらのデータは不要になっているからです。したがって、XFSは書き込みのパフォーマンスを向上させ、ファイルシステムの断片化(フラグメンテーション)を減らします。遅延アロケーションは、他のファイルシステムより書き込みイベントの頻度を下げる結果をもたらすので、書き込み中にクラッシュが発生した場合、データ損失が深刻になる可能性が高くなります。

事前割り当てによるファイルシステムの断片化の回避

データをファイルシステムに書き込む前に、XFSはファイルが必要とする空きスペースを予約(プリアロケート、事前割り当て)します。したがって、ファイルシステムの断片化は大幅に減少します。ファイルの内容がファイルシステム全体に分散することがないので、パフォーマンスが向上します。