はじめに
ファイルシステムは、データを保存し、ストレージデバイスから取得する方法、場所、およびタイミングを制御する一連のプロセスです。効率的なファイルシステムは、日常のシステムプロセスに不可欠です。
Linuxカーネルはさまざまなファイルシステムをサポートしていますが、最も一般的に使用されるのはext4ファイルシステムです。
この記事では、Linuxファイルシステムの開発とext4システムの主な機能について詳しく学びます。
Linuxファイルシステムの進化
Linuxファイルシステムの進化を詳しく見てみましょう:
MINIXファイルシステム
Minixファイル システムはMinixオペレーティングシステムをサポートしていました。 AndrewS.Tanenbaumによって1987年に最初に導入されました。
Minixオペレーティングシステムとそのファイルシステムは、主に教育用コーディングの目的で使用されていました。当時、ファイルシステムのパフォーマンスは標準に達していませんでした。ファイル名の長さは14文字に制限され、パーティションは64MBに制限されていました。当時、ハードドライブは最大140MBのパーティションをサポートしていました。
1992年までに、Minixは、パフォーマンスの欠如とextファイルシステムの開発のためにほとんど使用されていませんでした。 。
extファイルシステム
extファイルシステム 「ExtendedFileSystem」の略です。これは、Linuxカーネルをサポートするように設計された最初のファイルシステムでした。
仮想ファイルシステム (VFS)はextファイルシステムに使用されました。その主な目的は、Linuxカーネルがextファイルシステムにアクセスできるようにすることでした。 extファイルシステムはファイル名の長さを255文字に制限し、最大2GBのパーティションをサポートしました。
Minixファイルシステムが抱えていた問題をなんとか解決できましたが、タイムスタンプという1つの大きな欠陥がありました。各Linuxファイルに3つのタイムスタンプ(アクセスタイムスタンプ、変更されたタイムスタンプ、および変更されたタイムスタンプ)がある今日とは異なり、extファイルシステムではファイルごとに1つのタイムスタンプしか許可されませんでした。
1993年1月、ext2ファイルシステムが導入されました。やがて、すべてのユーザーがextからext2に切り替わりました。
ext2ファイルシステム
RemiCardはext2ファイルシステムを設計しました extファイルシステムを導入してから1年も経たない1993年1月にリリースしました。
ext2ファイルシステムは、ファイルシステムの機能が拡張されている間、内部構造の保持を可能にしました。ファイルからのデータは、同じ長さのデータブロックに保持されました。 ext2ファイルシステムは2TiBの最大ファイルサイズをサポートしていました。ファイル名の長さは文字数ではなく、バイト数–255バイトで制限されていました。ジャーナリングをサポートしていませんでした。
このファイルシステムは主に使用されていましたが、それでも2つの大きな問題がありました。
- ファイルの破損 –この現象は、停電時またはシステムクラッシュ時にデータがディスクに書き込まれた場合に発生します。
- パフォーマンスの低下 –ディスクの断片化は、1つのファイルが細かく分割され、ディスク上の複数の場所に分散している場合に発生します。その結果、ファイルの読み取りと書き込みに時間がかかり、パフォーマンスが低下します。
ext2システムは、ext3ファイルシステムが導入された2000年代初頭まで主に使用されていました。ジャーナリングシステムをサポートしていないため、今日USBデバイスで使用されることがあります。
ext3ファイルシステム
StephenTweedieがext3ファイルシステムを設計しました (第3拡張ファイルシステム)。 2001年11月にLinuxカーネル2.4.15でリリースされました。現在も使用されています。
ext3ファイルシステムは、ext2ファイルシステムの改良版です。 ext2ファイルシステムと同様に、2TiBの最大ファイルサイズをサポートし、ファイル名の最大長を255バイトに制限します。改善はジャーナリングに反映されます。
ジャーナル システムは、まだコミットされていないデータ構造のすべての変更の「ジャーナル」を保持します。停電やシステムクラッシュが発生した場合、ジャーナリングシステムを介して保存されたログは数秒でデータを返し、破損やデータ損失のリスクを軽減します。ログが更新されると、システムはファイルシステムの正しい領域にデータを書き込みます。
Linuxカーネルは、次の3つのレベルのジャーナリングをサポートしています。
- ジャーナル –メインファイルシステムに変更が加えられる前に、メタデータとファイルの内容をジャーナルに書き込むことで構成されます。これにより、停電やシステムクラッシュが発生した場合にデータが保存されます。このレベルのジャーナルの欠点は、システムのパフォーマンスが低下することです。
- 注文済み –このジャーナリングレベルはメタデータをジャーナルに書き込みますが、ファイルの内容は自動的にメインファイルシステムに保存されます。プロセスは特定の順序で実行されます。まず、メタデータがジャーナルに書き込まれます。次に、ファイルの内容がメインファイルシステムに書き込まれます。最終的に、メタデータはメインファイルシステムに接続します。したがって、システムがクラッシュしてもメインファイルシステムが破損することはありません。クラッシュ時に書き込み中のファイルのみが破損する可能性があります。
- 書き戻し –このレベルのジャーナルは、メタデータのみをジャーナルに書き込みます。ファイルの内容は、ジャーナルが更新された後にのみメインファイルシステムに書き込まれます。メタデータとファイルコンテンツの同期が取れていないため、システムがクラッシュするとファイルシステムが破損する可能性があります。
ext4ファイルシステム
ext4ファイルシステム 現在のLinuxカーネルのデフォルトのファイルシステムです。 2008年10月にLinuxカーネル2.6.28で導入されました。
ext4ファイルシステムは16TiBの最大ファイルサイズをサポートし、ファイル名の最大長を255バイトに制限します。
ext4ファイルシステムの機能
ext4ファイルシステムの主な機能を見てみましょう。
下位互換性
ext4ファイルシステムは、ext3およびext2ファイルシステムとの下位互換性をサポートしています。追加機能は、ext4ドライバーを使用したext3モードでのext3ファイルシステムの自動マウントです。
割り当ての改善
ext4ファイルシステムは、ストレージブロックをディスクに書き込む前に、より効率的に割り当てます。これにより、読み取りと書き込みのパフォーマンスが向上します。
タイムスタンプの改善
ext4ファイルシステムはタイムスタンプにさらに408年を追加し、2446年5月10日までの日付をサポートします。タイムスタンプもナノ秒単位でより高速に測定されます。
エクステント
古いバージョンのextファイルシステムは、各ファイルに関連するすべてのブロックをマップします。多数のブロックを必要とする大きなファイルの場合、このプロセスは機能しません。エクステントはext4ファイルシステムの問題を解決しました。
エクステント 各ファイルのブロックをマッピングするために必要なメタデータの量を減らします。大きなファイルに対応する最初と最後のブロックのアドレスが保存されます。
マルチブロック割り当ての改善
ブロックアロケータは、ディスクへのデータの書き込みに使用できる空きブロックを検索します。 ext4ファイルシステムは複数の割り当てを使用します これにより、呼び出しごとに複数のブロックを割り当てることができます。これにより、ディスクの断片化が減少します。
割り当ての遅延
割り当ての遅延 機能は、ファイルがディスクに書き込まれるときにのみブロックを割り当てます。この機能により、キャッシュメモリが不要なデータでいっぱいになることがなくなり、システムのパフォーマンスが向上します。
無制限の数のサブディレクトリ
Linuxカーネルバージョン2.6.23は、無制限の数のサブディレクトリをサポートします。 ext4ファイルシステムはHTreeデータ構造を導入しました パフォーマンスの低下を回避するため。 HTreeデータ構造は、Bツリーの特殊なバージョンを表します。
ジャーナルチェックサム
ext4ファイルシステムはチェックサムを使用します オプション。このオプションは、ファイル破損のリスクを軽減するために導入されました。
ジャーナリングシステムは、ディスクで最も使用されている部分です。ハードウェア障害が発生すると、ブロックが使用できなくなり、ファイルが破損します。チェックサムオプションは、ブロックが破損していないかどうかを常にチェックします。このプロセスでは、ジャーナル処理時間が短縮されるため、パフォーマンスも向上します。
より高速なファイルシステムチェック
ext4ファイルシステムでは、ブロックとiノードテーブルの非分散グループがマークされます。 fsck
の実行に必要な時間 マークされたグループがスキップされるため、コマンドが大幅に短縮されます。全体的なパフォーマンスが向上します。
オンラインでの最適化
ディスクの断片化はパフォーマンスの低下につながります。これは、ext2およびext3ファイルシステムで重大な問題でした。 ext4ファイルシステムはe4defragをサポートしています ユーザーが個々のファイルまたは完全なファイルシステムを最適化できるツール。
ext4ファイルシステムの制限
ext4ファイルシステムはLinuxディストリビューションに最適なファイルシステムと見なされていますが、システムをさらに開発する際に考慮すべきいくつかの制限があります。
- 破損したデータリカバリ – ext4ファイルシステムは、ディスクにすでに書き込まれている破損したデータを検出または回復できません。
- 最大ボリュームサイズ –最大ボリュームサイズは1EiBに設定されています。ただし、ファイルシステムは、パフォーマンスの大幅な低下とディスクの断片化の増加なしに、100TiBを超えるデータをアドレス指定することはできません。
代替Linuxファイルシステム
ext4ファイルシステムにはいくつかの選択肢があります。 Linuxカーネルは、以下にリストされているすべての選択肢をサポートしています。
XFS
XFS は、1994年に最初に導入され、2001年からLinuxカーネルに組み込まれた64ビットファイルシステムです。これは、RedHatLinuxのデフォルトのファイルシステムです。
XFSは最大ファイルサイズ8EiBをサポートし、ファイル名の長さを255バイトに制限します。ジャーナリングをサポートし、ext4と同様に、変更がメインファイルシステムにコミットされる前に変更をジャーナルに保存します。これにより、ファイルが破損する可能性が低くなります。
データはB+ツリーで構成されています 、これにより効率的なスペース割り当てが可能になり、パフォーマンスが向上します。
このシステムの主な欠点は、既存のXFSファイルシステムのサイズ変更プロセスが難しいことに反映されています。
OpenZFS
OpenZFS は、ファイルシステムとボリュームマネージャーを組み合わせたプラットフォームです。 2013年に最初に導入されました。
OpenZFSは16EiBの最大ファイルサイズをサポートし、ファイル名の最大長を255文字に制限します。このシステムの機能の一部は、データ破損に対する保護、暗号化、大容量のストレージのサポート、コピーオンライト、およびRAID-Zです。
OpenZFSの主な欠点は、CDDL(OpenZFS)ライセンスとGPL(Linuxカーネル)ライセンスの間の法的な非互換性です。これは、ZFSコードをコンパイルしてLinuxカーネルにロードすることで解決されます。
BtrFS
オラクルはBtrFSを設計しました (「Bツリーファイルシステム」の略)そして2009年にLinuxカーネル2.6.29でリリースされました。
BtrFSは16EiBの最大ファイルサイズをサポートし、ファイル名の最大長を255文字に制限します。 BtrFSの機能には、オンラインでの最適化、オンラインブロックデバイスの追加と削除、RAIDサポート、ファイルまたはボリュームごとに構成可能な圧縮、ファイルのクローン作成、チェックサム、スワップファイルとスワップパーティションを処理する機能などがあります。