| 開発者 | レミーカード |
|---|---|
| フルネーム | 第2拡張ファイルシステム |
| 紹介された | 1993年1月Linux |
| 先行 | 拡張ファイルシステム |
| 後継者 | 拡張子3 |
| パーティションID | EBD0A0A2-B9E5-4433-87C0-68B6B72699C7( GPT ) 0x83(マスターブートレコード) Apple_UNIX_SVR2( Apple パーティションマップ) |
| 構造 | |
| ディレクトリの内容 | テーブル |
| ファイルの割り当て | ビットマップ(空き領域)、テーブル(メタデータ) |
| 不良ブロック | テーブル |
| 制限 | |
| 最大ボリュームサイズ | 2~32TiB |
| 最大ファイルサイズ | 16 GiB – 2 TiB |
| 最大ファイル数 | 10 18 |
| ファイル名の最大長 | 255 バイト |
| ファイル名に使用できる 文字 | NUL ('\0') と '/'を除くすべてのバイト |
| 特徴 | |
| 記録された日付 | 変更 (mtime)、属性変更 (ctime)、アクセス (atime) |
| 日付範囲 | 1901年12月14日~2038年1月18日 |
| 日付解決 | 1秒 |
| ファイルシステムの 権限 | Unix パーミッション、POSIX アクセス制御リスト(ACL) |
| 透過的な 圧縮 | いいえ(パッチを通じて利用可能) |
| 透過的な 暗号化 | いいえ |
| 他の | |
| サポートされている オペレーティングシステム | Linux、BSD、[1] [2] ReactOS、[3] Windows(IFS経由)、macOS(FUSE経由)、HelenOS、[4] RIOT、[5] Zephyr [6] |
ext2(第2拡張ファイルシステム)は、 Linuxカーネル用のファイルシステムです。当初はフランスのソフトウェア開発者レミー・カードによって、拡張ファイルシステム(ext)の代替として設計されました。BSDのバークレー高速ファイルシステムと同じ原理に従って設計されたため、Linux用の最初の商用グレードのファイルシステムでした。[7]
ext2 の標準的な実装は、Linux カーネルの「ext2fs」ファイルシステム ドライバーです。その他の実装 (品質と完全性はさまざま) は、GNU Hurd、[8] MINIX 3、[9] [10]一部のBSDカーネル、[11] [12] [13] MiNT 、[14] Haiku [15]およびサードパーティのMicrosoft Windows [16]およびmacOS ( FUSE 経由)ドライバーとして存在します。このドライバーは Linux バージョン 6.9 で廃止され、ext4 ドライバーが採用されました。ext4 ドライバーは ext2 ファイルシステムで動作するためです。[17]
ext2 はDebianやRed Hat Linux を含むいくつかのLinux ディストリビューションのデフォルトのファイルシステムでしたが、 ext2 とほぼ完全に互換性があり、ジャーナリングファイルシステムであるext3に取って代わられました。ext2 は、ジャーナルがないためパフォーマンスが向上し、書き込み回数が最小限に抑えられ、フラッシュデバイスは限られた数の書き込みサイクルに耐えることができるため、フラッシュベースのストレージメディア (SD カードや USB フラッシュドライブなど) に今でも選択されるファイルシステムです [ 引用が必要 ]。2009 年以降、[ 18 ] Linuxカーネルは、より大きなファイルサイズやボリュームサイズなど、ext2 にはない利点を提供するext4のジャーナルレスモードをサポートしています。[19]
歴史
Linuxカーネルの初期の開発は、 MINIXオペレーティングシステムの下でのクロス開発として行われました。MINIXファイルシステムは、 Linuxの最初のファイルシステムとして使用されました。Minixファイルシステムはほとんどバグがありませんでした。しかし、内部的に16ビットのオフセットを使用していたため、最大サイズ制限は64メガバイトのみで、ファイル名の長さも14文字に制限されていました。[20]これらの制限のため、Linux用のネイティブファイルシステムの代替の開発が始まりました。[20]
新しいファイルシステムの追加を容易にし、汎用ファイルAPIを提供するために、仮想ファイルシステム層であるVFS がLinux カーネルに追加されました。拡張ファイルシステム ( ext ) は、VFS API を使用する最初のファイルシステムとして 1992 年 4 月にリリースされ、Linux バージョン 0.96c に含まれていました。[21] ext ファイルシステムは、Minix ファイルシステムの 2 つの大きな問題 (最大パーティションサイズとファイル名の長さが 14 文字に制限される) を解決し、2 GBのデータと最大 255 文字のファイル名を使用できるようになりました。しかし、まだ問題がありました。ファイルアクセス、inode の変更、データの変更 に対して個別のタイムスタンプがサポートされていませんでした。
これらの問題の解決策として、1993年1月にLinuxカーネル0.99用に2つの新しいファイルシステムが開発されました。xiafsと第2拡張ファイルシステム(ext2)です。[21]これは、Berkeley Fast File Systemの多くのアイデアを取り入れた拡張ファイルシステムのオーバーホールでした。ext2も拡張性を考慮して設計されており、将来のバージョンで使用するために多くのディスク上のデータ構造にスペースが残されています。[要出典]
それ以来、ext2 は VFS API への多くの新しい拡張機能のテストベッドとなってきました。撤回されたPOSIX ドラフト ACL 提案や撤回された拡張属性提案などの機能は、拡張が比較的簡単で内部がよく理解されていたため、通常は最初に ext2 で実装されました。
2.6.17より前のLinuxカーネルでは、[22]ブロックドライバの制限により、ext2ファイルシステムの最大ファイルサイズは2TiBになります。
ext2 は、起動可能な USB フラッシュ ドライブやその他のソリッド ステート ドライブ上のジャーナリング ファイル システムよりも依然として推奨されています[誰が推奨したのでしょうか? ]。ext2 はジャーナリングがないため、ext3 よりも書き込み回数が少なくなります。フラッシュ チップの劣化の主な要因は消去サイクルの数であり、書き込み時に消去サイクルが頻繁に発生するため、書き込み回数が減るとソリッド ステート デバイスの寿命が長くなります。[23]フラッシュ デバイス上のファイル システムのもう 1 つの良い方法は、同じ理由から、 no atimeマウント オプションを使用することです。
Linuxカーネル6.9以降、ext2fsドライバは非推奨となり、デフォルト設定では有効化されなくなりました。主な理由は、2038年以降の日付をサポートしていなかったためです。[17]ユーザーはext4にアップグレードすることをお勧めします。[24]
ext2 データ構造
ext2 のスペースはブロックに分割されています。これらのブロックは、 Unix ファイル システムのシリンダ グループに類似したブロック グループにグループ化されています。大規模なファイル システムには、通常、数千のブロックがあります。任意のファイルのデータは通常、可能な場合は 1 つのブロック グループ内に収められます。これは、大量の連続データを読み取るときにディスク シークの数を最小限に抑えるために行われます。
各ブロック グループには、スーパーブロックとブロック グループ記述子テーブルのコピーが含まれており、すべてのブロック グループには、ブロック ビットマップ、inode ビットマップ、inode テーブル、そして最後に実際のデータ ブロックが含まれています。
スーパーブロックには、オペレーティング システムの起動に不可欠な重要な情報が含まれています。そのため、バックアップ コピーはファイル システム内の複数のブロック グループに作成されます。ただし、通常は、ファイル システムの最初のブロックにある最初のコピーのみが起動に使用されます。
グループ記述子には、各ブロック グループのブロック ビットマップ、inode ビットマップ、および inode テーブルの開始位置が格納されます。これらは、グループ記述子テーブルに格納されます。
iノード
すべてのファイルやディレクトリは、inodeで表されます。「inode」という用語は、「インデックス ノード」に由来しています (時間が経つにつれて、i-node、そして inode になりました)。[25] inode には、ファイルまたはディレクトリのサイズ、権限、所有権、およびディスク上の位置に関するデータが含まれています。
ext2 inode構造の例:
Linuxカーネルのext2ドキュメントからの引用: [26]
inode には、ファイルのデータを含む最初の 12 ブロックへのポインタがあります。間接ブロックへのポインタ (次のブロック セットへのポインタを含む)、二重間接ブロックへのポインタ、および三重間接ブロックへのポインタがあります。
したがって、ext2 には 15 個のポインターを持つ構造があります。ポインター 1 から 12 は直接ブロックを指し、ポインター 13 は間接ブロックを指し、ポインター 14 は二重間接ブロックを指し、ポインター 15 は三重間接ブロックを指します。
ディレクトリ
各ディレクトリは、ディレクトリ エントリのリストです。各ディレクトリ エントリは、1 つのファイル名を 1 つの inode 番号に関連付け、inode 番号、ファイル名の長さ、およびファイル名の実際のテキストで構成されます。ファイルを見つけるには、関連付けられたファイル名をディレクトリの先頭から末尾まで検索します。ディレクトリのサイズが適切であれば、これで問題ありません。しかし、非常に大きなディレクトリの場合、これは非効率的です。ext3 では、ファイル名のリストよりも効率的な、ディレクトリを格納する 2 番目の方法 ( HTree ) を提供しています。
ルート ディレクトリは常に inode 番号 2 に格納されるため、ファイル システム コードはマウント時にルート ディレクトリを見つけることができます。サブディレクトリは、サブディレクトリの名前を名前フィールドに格納し、サブディレクトリの inode 番号を inode フィールドに格納することで実装されます。ハード リンクは、複数のファイル名で同じ inode 番号を格納することで実装されます。どちらの名前でファイルにアクセスしても、同じ inode 番号になり、したがって同じデータになります。
特別なディレクトリ「.」(現在のディレクトリ) と「..」(親ディレクトリ) は、ディレクトリに名前「.」と「..」を保存し、現在のディレクトリと親ディレクトリの inode 番号を inode フィールドに保存することによって実装されます。これらの 2 つのエントリが受ける唯一の特別な処理は、新しいディレクトリが作成されるときに自動的に作成され、削除できないことです。
データの割り当て
新しいファイルまたはディレクトリが作成されると、ext2 はデータを保存する場所を決定する必要があります。ディスクがほとんど空の場合、データはほぼどこにでも保存できます。ただし、関連データとデータをクラスタ化すると、シーク時間が最小限に抑えられ、パフォーマンスが最大化されます。
ext2 は、親ディレクトリと子ディレクトリへのアクセスは密接に関連している可能性が高いという理論に基づいて、各新しいディレクトリをその親ディレクトリを含むグループに割り当てようとします。また、ディレクトリ アクセスはファイル アクセスにつながることが多いため、ext2 はファイルをディレクトリ エントリと同じグループに配置しようとします。ただし、グループがいっぱいの場合、新しいファイルまたは新しいディレクトリは、いっぱいでない他のグループに配置されます。
ディレクトリとファイルを格納するために必要なデータ ブロックは、データ割り当てビットマップを調べることで見つけることができます。inode テーブル内の必要なスペースは、inode 割り当てビットマップを調べることで見つけることができます。
ファイルシステムの制限
ext2 の制限の理由は、データのファイル形式とオペレーティング システムのカーネルです。ほとんどの場合、これらの要因はファイル システムの構築時に決定されます。これらは、ブロック サイズと、ブロック数と inode 数の比率に依存します。[引用が必要] Linux では、ブロック サイズはアーキテクチャページ サイズによって制限されます。
2 GiB を超えるファイルを処理できないユーザー空間プログラムもいくつかあります。
bがブロックサイズの場合、i_block構造体(直接/間接EXT2_N_BLOCKSの配列)とファイル内の1024バイト(1キロバイト)[28]「ブロック」の数を表すi_blocks(32ビット整数値)により、最大ファイルサイズはmin ( ( ( b / 4 ) 3 + ( b /4) 2 + b /4 + 12) × b 、(2 32 − 1) × 512 )に制限されます。 [オリジナル研究? ]
リンク数の制限により、サブレベルディレクトリの最大数は 31998 です。[要出典] ext2 ではディレクトリのインデックス作成が利用できないため、多数のファイル (>10,000) があるディレクトリではパフォーマンスの問題が生じます。ディレクトリ内のファイル数の理論上の制限は 1.3 × 10 20ですが、[独自の研究? ]これは実際の状況には関係ありません。
注: Linux 2.4 以前では、ブロック デバイスは 2 TiB に制限されており、ブロック サイズに関係なくパーティションの最大サイズが制限されていました。[引用が必要]
圧縮拡張
e2compr は、ユーザー アプリケーションによるサポートなしで、ファイル システムによるファイルの圧縮と解凍をサポートするために Linux カーネルの ext2 ドライバーを変更するものです。e2compr は ext2 に対する小さなパッチです。
e2compr は通常のファイルのみを圧縮します。管理データ (スーパーブロック、inode、ディレクトリ ファイルなど) は圧縮されません (主に安全上の理由から)。圧縮されたブロックへのアクセスは、読み取りおよび書き込み操作で提供されます。圧縮アルゴリズムとクラスタ サイズは、ファイルごとに指定されます。ディレクトリを圧縮対象としてマークすることもできます。その場合、ディレクトリ内に新しく作成されたすべてのファイルは、ディレクトリに指定された同じクラスタ サイズと同じアルゴリズムで自動的に圧縮されます。
e2compr は新しいファイル システムではありません。これは、EXT2_COMPR_FL フラグをサポートするために作成された ext2 へのパッチにすぎません。ユーザーは新しいパーティションを作成する必要はなく、既存の ext2 ファイル システムの読み取りまたは書き込みを続行します。これは、gzip や圧縮に似た単純なユーティリティによって作成されたファイルに読み取りおよび書き込みルーチンがアクセスするための単なる方法と考えることができます。圧縮されたファイルと圧縮されていないファイルは、ext2 パーティション上で適切に共存します。
最新の e2compr-branch は、Linux 2.4、2.6、3.0 の現在のリリースで利用できます。Linux 3.0 の最新パッチは 2011 年 8 月にリリースされ、マルチコアと高メモリのサポートを提供します。Linux 2.0 および 2.2 用のブランチもあります。
他のオペレーティングシステムの場合
Microsoft Windowsのext2パーティションへのアクセスは、ext2ifs [29]やext2Fsd [30]などのインストール可能なファイルシステムを介して可能です。macOSではユーザースペースのファイルシステムを使用できます。[31]
参照
- e2fsprogs
- StegFS – ext2 ベースのステガノグラフィファイルシステム
- クループ
- ファイルシステムのリスト
- ファイルシステムの比較
- Orlovブロックアロケータ、Linuxカーネル- ext2のデフォルトのブロックアロケータを決定。[32]
参考文献
- ^ 「第8章 ディスク、ファイルシステム、ブートローダー」www.freebsd.org 。 2018年4月11日閲覧。
- ^ "ext2fs(5)". www.freebsd.org . 2018年4月11日閲覧。
- ^ 「ReactOS 0.4.2 リリース」reactos.org . 2016年8月17日閲覧。
- ^ “HelenOS Wiki: Ext4fs”. www.helenos.com 。2023 年11 月 6 日に取得。
- ^ 「pkg/lwext4: ext2/3/4 ファイルシステムの軽量実装を追加」。www.github.com 。 2023年11月6日閲覧。
- ^ 「subsys: fs: ext2 ファイルシステムの実装」www.github.com . 2023 年11 月 6 日閲覧。
- ^ ヴォルフガング・マウラー (2010).プロフェッショナルな Linux カーネル アーキテクチャ。ジョン・ワイリー&サンズ。ISBN 9781118079911。
- ^ 「GNU Hurd/ hurd/ translator/ ext2fs」。GNU Hurd 。2024年2月10日閲覧。
- ^ 「MINIX Release 3.2.0」。MINIX 3。2024年2月10日閲覧。
- ^ "git.minix3.org Git - minix.git/tree - minix/fs/ext2/". MINIX 3 ソースコード. 2024年2月10日閲覧。
- ^ "NetBSD src/sys/ufs/ext2fs/". NetBSD ソースコード. 2024年2月10日閲覧。
- ^ "OpenBSD src/sys/ufs/ext2fs/". OpenBSD ソースコード. 2024年2月10日閲覧。
- ^ 「ext2fs « fs « sys - src - FreeBSD ソースツリー」。FreeBSDソースコード。2024 年 2 月 10 日閲覧。
- ^ "freemint/sys/xfs/ext2fs at master · freemint/freemint". FreeMiNT ソースコード. 2024-02-10閲覧。
- ^ 「ext2 « file_systems « kernel « add-ons « src - haiku - Haiku のメインリポジトリ」。Haikuソースコード。2024 年 2 月 10 日閲覧。
- ^ 「matt-wu/Ext3Fsd: Windows 用 Ext2/3/4 ファイルシステムドライバー」。matt -wu/Ext3Fsd 。2024年 2 月 10 日閲覧。
- ^ ab Larabel, Michael (2024-03-26). 「Linux 6.9 で EXT2 ファイルシステム ドライバーが廃止」. Phoronix . 2024-03-26閲覧。
- ^ 「ext4: ext4 をジャーナルなしで実行できるようにする」Linux カーネル ソース ツリー. 2021 年1 月 12 日閲覧。
- ^ 「Linux ファイルシステム: Ext2 vs Ext3 vs Ext4」www.thegeekstuff.com . 2020 年 7 月 13 日閲覧。
- ^ ab Strobel, Stefan; Uhl, Thomas (1994). Linux—Unleashing the Workstation in Your PC . Springer-Verlag. p. 54.
- ^ ab Jones, M. Tim (2009年2月17日). 「ext4の分析」. IBM Developer Works. 2015年2月20日時点のオリジナルよりアーカイブ。 2012年2月8日閲覧。
- ^ linux/kernel/git/torvalds/linux-2.6.git/commitdiff:、[PATCH] 2TB ファイル: blkcnt_t を追加、作成者:Takashi Sato、2006 年 3 月 26 日 09:37:52 +0000 (01:37 -0800) — 大きなファイルを許可するコミット、git.kernel.org
- ^ 「ソリッド ステート ディスク ドライブ」。Super Talent Technology。
- ^ Opdenacker, Michael (2024-03-25). 「ext2 ファイルシステム ドライバーが非推奨としてマークされるようになりました - Bootlin のブログ」 。2024年 3 月 26 日閲覧。
- ^ 「プログラマーズジャーナル」第5巻、1987年、174ページ
- ^ 「第2拡張ファイルシステム」www.nongnu.org . 2019年12月11日閲覧。
- ^ 「ファイルシステムガイド」。Linux Reviews。2011年9月17日時点のオリジナルよりアーカイブ。2008年1月24日閲覧。
- ^ 「Ext2 ファイルシステムの作成 - Linux カーネルの理解、第 2 版」www.oreilly.com 。2023年7 月 25 日閲覧。
- ^ Randall, Neil (2007 年 9 月 18 日)。「Linux: あなたにもできる!」PC Magazine 誌、第 26 巻、第 18 号、76 ページ。
- ^ Wallen, Jack (2012 年 9 月 17 日)。「Windows マシンで ext2/3 ファイル システムのマウントを有効にする」。TechRepublic。2016年1 月 17 日閲覧。
- ^ Kessler, Topher (2012 年 6 月 22 日). 「OS X で Ext2/Ext3 ディスクを管理する方法」. CNET . 2016 年1 月 17 日閲覧。
- ^ 「Second Extended Filesystem — Linux カーネルのドキュメント」
注記
- Card, Rémy; Ts'o, Theodore; Tweedie, Stephen (1994)。「第 2 拡張ファイルシステムの設計と実装」。第1 回オランダ国際 Linux シンポジウム議事録。ISBN 90-367-0385-9。
- Sourceforge e2compr プロジェクト
- Sourceforge e2compr ドキュメント
- Sourceforge e3compr プロジェクト ページ、ext3 圧縮、アルファ
- ドブ博士のデータ圧縮ニュースレター第 46 号 - 2003 年 9 月
さらに読む
- John Newbigin。「第 2 拡張ファイルシステムの John の仕様」。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - Dave Poirier (2009)。「第 2 の拡張ファイル システム: 内部レイアウト」。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - Theodore Ts'o、Stephen Tweedie (2002 年 6 月)。「Linux Ext2/Ext3 ファイルシステムの計画された拡張」。USENIX 2002 年次技術会議。
- Larry Ayers (1997 年 6 月)。「E2compr: Linux 用の透過的なファイル圧縮」。Linux Gazette (18)。2009 年 11 月 17 日のオリジナルからのアーカイブ。
- Charles Cong、Jeremy H. Brown (1997-12-26)。「Linux でのキャッシュ機能を備えた透過的なファイル圧縮システム」。CiteSeerX 10.1.1.51.4780 。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - Charles Cong、Jeremy H. Brown (1997-10-22)。「最新のファイル圧縮技術の調査」。CiteSeerX 10.1.1.50.9847。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です
外部リンク
- ext2fs ユーザー空間ツール
- Ext3Fsd Windows 2000/XP/2003/VISTA/2008 用の GPL ext2/ext3 ファイル システム ドライバー (オープンソース、読み取りと書き込みをサポート、FreeOTFE で動作)
