ext4

ext4の最新ニュースをまとめて検索!

ext4
開発者 Mingming Cao, Dave Kleikamp, Alex Tomas, Andrew Morton
正式名 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日
日付解像度 ナノ秒
フォーク 可能
属性 journal_checksum, journal_async_commit, journal=update, journal_dev=devnum, noload, data=journal, data=ordered, data=writeback, commit=nrsec, barrier=0|1, barrier, nobarrier, inode_readahead=n, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, debug, errors=remount-ro|continue|panic, data_err=ignore|abort;, grpid, bsdgroups, nogrpid, sysvgroups, resgid=n, resuid=n, sb=n, quota, noquota, grpquota, usrquota, bh, nobh, stripe=n, delalloc, nodelalloc, max_batch_time=usec, min_batch_time=usec, journal_ioprio=prio, auto_da_alloc, noauto_da_alloc
パーミッション POSIX
透過的圧縮 できない
透過的暗号化 できない
対応OS Linux
  

ext4(fourth extended file system)は、Linuxファイルシステムである。いわゆるジャーナリングファイルシステムの一つ。

ext4はext3の後継のファイルシステムであり、拡張機能を使っていない場合に限り、ext3としてマウントすることが可能である。

ext4は1EiBまでのストレージをサポートし、ファイルの断片化を防ぐextent file writingと呼ばれるシステムが導入される。ファイルのタイムスタンプは、ナノ秒単位で西暦1901年から2514年までの範囲をサポートする。(ext3では秒単位で2038年まで)

Linuxカーネル 2.6.19より利用が可能になった。

Linuxディストリビューションの Fedora 11 や Ubuntu 9.10、OpenSUSE 11.2 ではデフォルトのファイルシステムとして採用されている。

目次

[編集] 経緯

ext3に対して後方互換性を保ちつつ、64ビットストレージの制限を除き、パフォーマンスを向上させるために開発が始められた。[1] しかしLinuxカーネルの開発者たちは、安定性に対する懸念から、ext3に拡張を加えることに反対した[2] 。その代わり、ext3のソースコードから分岐してext4と改名し、現行のext3ユーザーに影響を及ぼすことなく開発を進めることを提案した。この提案は受け入れられ、2006年6月28日、ext3のメンテナであるTheodore Ts'oは新しいプロジェクトとしてext4の開発を発表した。[3]

最初の開発スナップショットはLinux 2.6.19に導入された。2008年10月11日には、ext4を安定コードとしたパッチがLinux 2.6.28のソースコードリポジトリに結合された[4]。これは開発段階の終了を意味し、ext4の採用を推奨するものであった。ext4ファイルシステムを含むLinux 2.6.28は、2008年12月25日にリリースされた。[5]

[編集] 特徴

大きなボリュームサイズとファイルサイズ
ext4ファイルシステムは、最大1EiBまでのボリュームサイズ[6]と、最大16TiBまでのファイルサイズをサポートする。
エクステント
エクステントは、ext2およびext3で使われてきた伝統的なブロックマッピング方式を置き換える概念である。エクステントは連続した物理ブロックの集合であり、大きなファイルに対するパフォーマンスを改善し、フラグメンテーションの発生を減らすことができる。ext4におけるエクステントは、4KBのブロックサイズで最大128MBまでの連続した領域をマッピングすることができる[1]inodeごとに4つのエクステントを格納することができる。ひとつのファイルに5つ以上のエクステントがあるとき、残りのエクステントはHtreeで構造化される。
後方互換性
ext4ファイルシステムはext3およびext2に対する後方互換性を持つ。すなわち、ext3およびext2ファイルシステムをext4ファイルシステムとしてマウントすることができる。その場合でも、わずかにパフォーマンスの向上が見られる。なぜなら、ブロック確保アルゴリズムなどの新しい機能はext3やext2でも使用できるからである。
ext3ファイルシステムは部分的にext4に対する前方互換性を持つ。すなわち、ext4ファイルシステムをext3パーティションとしてマウントできる(マウントするときは「ext3」をファイルシステムタイプとして指定する)。しかし、もしext4パーティションがエクステント(ext4の重要な新機能である)を使用しているなら、ext3としてマウントすることはできなくなる。
永続的な事前確保
ext4ファイルシステムはファイルのためのディスク空き領域の事前確保を可能にする。

ほとんどのファイルシステムにおけるこれまでの方法論では、ファイルが作成されたときに予約されたスペースを0で埋める形で書き込まれる。

ext4においてはこの方法で要求されることはもはやない。そのかわり、新しくfallocate()システムコールがLinuxカーネルにファイルシステム用に追加され、ext4やXFSにおいて使われている。これにより互換性が維持されている。ファイルのために確保されたスペースは連続していることが保証される。この機能はメディアストリーミングやデータベースで使われる。
遅延確保
ext4ファイルシステムのパフォーマンス向上のテクニックとして、allocate-on-flushと呼ばれるものがある。これは遅延確保としても知られている。遅延したブロック確保はデータがディスクに書き込まれる いくつかの他のファイルシステムとは違って、必要なブロックをこの段階の前に確保するだろう。実際のファイルサイズに基づく形でブロック確保の決定する改良により、パフォーマンスは向上しフラグメンテーションは減少する。
サブディレクトリの32000個制限の撤廃
ext3ファイルシステムにおいては、1つのディレクトリに入れられるサブディレクトリ数が32,000個に制限されている。この制限がext4ファイルシステムでは64,000個まで引き上げられ、"dir_nlink"機能を使うとそれを超える事が可能となる(親ディレクトリのリンクカウント増加は止まるだろうが)。一つのディレクトリ内のファイル数が増えた場合における性能を上げる為、Htreeインデックス(B-treeの発展版)は、ext4でデフォルトでオンになった。この機能はLinux kernel 2.6.23 から導入されている。Htreeはext3でもdir_index機能が有効であれば利用可能であった。
ジャーナルのチェックサム
 
オンラインデフラグメンテーション
 
より高速なファイルシステムチェック
 
マルチブロックの確保
 
タイムスタンプの改良
 

[編集] 欠点

[編集] 遅延アロケーションとデータ損失

遅延アロケーションは、すべてのデータをディスクに書き出す前にファイルシステムがクラッシュするような場合に、データを損失する危険性がある。

このようなことが起こる典型的なシナリオは、fsyncでディスクに書き出すことをせずにファイルの内容を書き換えるようなプログラムを使用する時である。実際に書き出しをする前にシステムがクラッシュすると、問題が起こる可能性がある。このような状況では、ext3のユーザーは、クラッシュ後に変更前か変更後のどちらかのデータがディスクに残されているということを期待することができた。一方、Linuxカーネル2.6.28のext4では、クラッシュ前にファイルの内容を消去するが新しいデータを書き出さず、結果としてデータが損失するということがしばしば見られた。

この問題に対処するためにfsyncを頻繁に使用すると、data=orderedフラグ(多くのLinuxディストリビューションではデフォルト)でマウントされたext3ファイルシステムでは深刻なパフォーマンス低下が起こる恐れがある。どちらのファイルシステムもしばらくの間使用されるだろうということを考えると、これはエンドユーザーアプリケーション開発者にとって非常に厄介な問題となる。このため、Theodore Ts'oは、上記のような場合の遅延アロケーションを制限するext4のパッチを作成した。パフォーマンスは多少低下するが、これによってクラッシュ後にどちらかのバージョンのデータが残る可能性が著しく高まった。

このパッチはメインライン・カーネル2.6.30に導入されると見込まれているが、様々なディストリビューションは2.6.28や2.6.29へとバックポートすることができる。例えば、Ubuntuはバージョン9.04 Jaunty Jackalopeでカーネル2.6.28にそのパッチを導入した。

[編集] 脚注

  1. ^ Mathur, Avantika (2007). "The new ext4 filesystem: current status and future plans" (PDF). Proceedings of the Linux Symposium. Ottawa, ON, CA: Red Hat. 2008-01-15 閲覧。
  2. ^ Torvalds, Linus. "extents and 48bit ext3". LKML. 2006-06-09 閲覧。
  3. ^ Ts'o, Theodore. "Proposal and plan for ext2/3 future development work". LKML. 2006-06-28 閲覧。
  4. ^ "ext4: Rename ext4dev to ext4". Linus' kernel tree. 2008-10-20 閲覧。
  5. ^ Leemhuis, Thorsten. “[and further: The innovations of Linux 2.6.28]”. Heise Online. http://www.heise-online.co.uk/open/Kernel-Log-Higher-and-Further-The-innovations-of-Linux-2-6-28--/features/112299 2008-12-23 閲覧。 
  6. ^ "Migrating to Ext4". DeveloperWorks. IBM. 2008-12-14 閲覧。

[編集] 関連項目


最終更新 2009年11月27日 (金) 04:19 (日時は個人設定で未設定ならばUTC)。
【ext4】変更履歴

ご利用上の注意

もっと調べる!