ext4 | |
---|---|
開発者 | Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, セオドア・ツォー, Eric Sandeen, Sam Naghshineh 他 |
正式名 | Fourth extended file system |
導入 | 2006年10月10日 (Linux 2.6.19) |
パーティション識別子 |
0x83 (MBR) EBD0A0A2-B9E5-4433- 87C0-68B6B72699C7 (GPT) |
構造 | |
ディレクトリ | テーブル, ツリー |
領域管理 | ビットマップ, テーブル |
不良ブロック | テーブル |
限度 | |
最大ファイル サイズ | 16TiB |
最大ボリューム サイズ | 1EiB |
ファイル名の文字 | NULL('\0')と/以外使用可能 |
特徴 | |
タイムスタンプ | 変更, 属性変更, アクセス, 作成, 削除 |
日付範囲 | 1901年12月14日から2514年4月25日 |
日付分解能 | ナノ秒 |
フォーク | 可能 |
属性 | No-atime, append-only, synchronous-write, no-dump, h-tree (directory), immutable, journal, secure-delete, top (directory), allow-undelete |
パーミッション | POSIX |
透過的圧縮 | できない |
透過的暗号化 | 可能(Linux4.1から) |
重複排除 | 無し |
対応OS | Linux |
ext4(fourth extended file system)は、Linuxのファイルシステムで、ジャーナリングファイルシステムの一つである。ext3の後継のファイルシステムで、拡張機能を使っていない場合に限りext3としてマウントできる。1EiBまでのストレージをサポートし、ファイルの断片化を防ぐextent file writingと呼ばれるシステムが導入される。ファイルのタイムスタンプは、ナノ秒単位で西暦1901年から2514年までの範囲をサポートする(ext3では秒単位で2038年まで)。Linuxカーネル 2.6.19より開発版が利用が可能になり、2.6.28[1]より安定版のファイルシステムとなった。
ext3に対して後方互換性を保ちつつ、64ビットストレージの制限を除き、パフォーマンスを向上させるために開発が始められた[2]。しかしLinuxカーネルの開発者たちは、安定性に対する懸念から、ext3に拡張を加えることに反対した[3]。その代わり、ext3のソースコードから分岐してext4と改名し、現行のext3ユーザーに影響を及ぼすことなく開発を進めることを提案した。この提案は受け入れられ、2006年6月28日、ext3のメンテナであるセオドア・ツォー (Theodore Ts'o) は新しいプロジェクトとしてext4の開発を発表した[4]。
最初の開発スナップショットはLinux 2.6.19に導入された。2008年10月11日には、ext4を安定コードとしたパッチがLinux 2.6.28のソースコードリポジトリに結合された[5]。これは開発段階の終了を意味し、ext4の採用を推奨するものであった。ext4ファイルシステムを含むLinux 2.6.28は、2008年12月25日にリリースされた[6]。
遅延割り当て(delayed allocation)は、すべてのデータをディスクに書き出す前にファイルシステムがクラッシュした際、データを損失する危険性を孕む。
このようなことが起こる典型的なシナリオは、fsyncでディスクに書き出すことをせずにファイルの内容を書き換えるようなプログラムを使用する時である。実際に書き出しをする前にシステムがクラッシュすると、問題が起こる可能性がある。このような状況では、ext3のユーザーは、クラッシュ後に変更前か変更後のどちらかのデータがディスクに残されているということを期待することができた。一方、Linuxカーネル2.6.28のext4では、クラッシュ前にファイルの内容を消去するが新しいデータを書き出さず、結果としてデータが損失するということがしばしば見られた。
この問題に対処するためにfsyncを頻繁に使用すると、data=ordered
フラグ(多くのLinuxディストリビューションではデフォルト)でマウントされたext3ファイルシステムでは深刻なパフォーマンス低下が起こる恐れがある。どちらのファイルシステムもしばらくの間使用されるだろうということを考えると、これはエンドユーザーアプリケーション開発者にとって非常に厄介な問題となる。このため、セオドア・ツォーは、上記のような場合の遅延割り当てを制限するext4のパッチを作成した。パフォーマンスは多少低下するが、これによってクラッシュ後にどちらかのバージョンのデータが残る可能性が著しく高まった。
このパッチはメインライン・カーネル2.6.30に導入されているが、様々なディストリビューションは2.6.28や2.6.29へとバックポートすることができる。例えば、Ubuntuはバージョン9.04 Jaunty Jackalopeでカーネル2.6.28にそのパッチを導入した。
以下の Linux ディストリビューションで標準ファイルシステムとして採用されている。