削除された内容 追加された内容
Rezabot (会話 | 投稿記録)
m r2.7.1) (ロボットによる 追加: fa:Ext4
m 外部リンクの修正 http:// -> https:// (git.kernel.org) (Botによる編集)
 
(30人の利用者による、間の45版が非表示)
1行目:
{{小文字}}
{{Infobox filesystem |
| name = ext4|
| developer = Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, [[セオドア・ツォー]], Eric Sandeen, Sam Naghshineh 他|
| full_name = Fourth extended file system|
| introduction_date = [[2006年]][[10月10日]]|
| introduction_os = [[Linux]] 2.6.19|
| partition_id = <tt>0x83</tt> ([[マスターブートレコード|MBR]])<br /> <tt>EBD0A0A2-B9E5-4433-<br />87C0-68B6B72699C7</tt> ([[GUIDパーティションテーブル|GPT]])|
| directory_struct = テーブル, ツリー|
| file_struct = ビットマップ, テーブル|
| bad_blocks_struct = テーブル|
| max_file_size = 16[[テビバイト|TiB]]|
| max_files_no = |
| max_filename_size = |
| max_volume_size = 1[[エクスビバイト|EiB]]|
| filename_character_set = <tt>NULL('\0')</tt>と<tt>/</tt>以外使用可能 |
| dates_recorded = 変更, 属性変更, アクセス, 作成, 削除|
| date_range = 1901年12月14日から2514年4月25日|
| date_resolution = ナノ秒|
| forks_streams = 可能|
| attributes = No-atime, append-only, synchronous-write, no-dump, h-tree (directory), immutable, journal, secure-delete, top (directory), allow-undelete
attributes = <nowiki>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</nowiki>|
| file_system_permissions = [[POSIX]]|
| compression = できない|
| encryption = できない|可能(Linux4.1から)
| single_instance_storage = 無し|
| OS = [[Linux]]
}}
'''ext4'''(fourth extended file system)は、[[Linux]]の[[ファイルシステム]]で、[[ジャーナリングファイルシステム]]の一つである。[[ext3]]の後継のファイルシステムで、拡張機能を使っていない場合に限りext3としてマウントできる。1[[エクスビバイト|EiB]]までのストレージをサポートし、ファイルの断片化を防ぐextent file writingと呼ばれるシステムが導入される。ファイルのタイムスタンプは、ナノ秒単位で西暦1901年から2514年までの範囲をサポートする(ext3では秒単位で2038年まで)。Linux[[Linuxカーネル]] 2.6.19より開発版が利用が可能になり、2.6.28<ref>[httphttps://kernelnewbies.org/Linux_2_6_28 Linux 2 6 28 - Linux Kernel Newbies]</ref>より安定版のファイルシステムとなった。
 
== 経緯 ==
[[ext3]]に対して後方互換性を保ちつつ、[[64ビット]]ストレージの制限を除き、パフォーマンスを向上させるために開発が始められた<ref name = "Mathur">{{cite web |title = The new ext4 filesystem: current status and future plans |publisher = Red Hat | ___location = Ottawa, ON, CA | year = 2007 | work = Proceedings of the Linux Symposium | url = https://ols2006www.108kernel.redhat.comorg/2007doc/Reprintsols/mathur2007/ols2007v2-pages-21-Reprint34.pdf | accessdate=2008-01-15 | format = [[Portable Document Format|PDF]] | last = Mathur | first = Avantika | last2 = Cao | first2 = MingMing | last3 = Bhattacharya | first3 = Suparna | last4 = Dilger | first4 = Andreas | last5 = Tomas | first5 = Alex | last6 = Vivier | first6 = Laurent}}</ref>。しかしLinuxカーネルの開発者たちは、安定性に対する懸念から、ext3に拡張を加えることに反対した<ref>{{cite web | url = https://lkml.org/lkml/2006/6/9/183 | accessdate = 2006-06-09 | publisher = LKML | first = Linus | last = Torvalds | title = extents and 48bit ext3}}</ref>。その代わり、ext3の[[ソースコード]]から分岐してext4と改名し、現行のext3ユーザーに影響を及ぼすことなく開発を進めることを提案した。この提案は受け入れられ、2006年6月28日、ext3のメンテナである[[セオドア・ツォー]] (Theodore Ts'o) は新しいプロジェクトとしてext4の開発を発表した<ref>{{cite web | url = https://lkml.org/lkml/2006/6/28/454 | publisher = LKML | first = Theodore | last = Ts'o | title = Proposal and plan for ext2/3 future development work | accessdate = 2006-06-28}}</ref>。
しかしLinuxカーネルの開発者たちは、安定性に対する懸念から、ext3に拡張を加えることに反対した<ref>{{cite web | url = http://lkml.org/lkml/2006/6/9/183 | accessdate = 2006-06-09 | publisher = LKML | first = Linus | last = Torvalds | title = extents and 48bit ext3}}</ref>
。その代わり、ext3のソースコードから分岐してext4と改名し、現行のext3ユーザーに影響を及ぼすことなく開発を進めることを提案した。この提案は受け入れられ、2006年6月28日、ext3のメンテナである[[セオドア・ツォー]](Theodore Ts'o)は新しいプロジェクトとしてext4の開発を発表した。<ref>{{cite web | url = http://lkml.org/lkml/2006/6/28/454 | publisher = LKML | first = Theodore | last = Ts'o | title = Proposal and plan for ext2/3 future development work | accessdate = 2006-06-28}}</ref>
 
最初の開発スナップショットはLinux 2.6.19に導入された。2008年10月11日には、ext4を安定コードとしたパッチがLinux 2.6.28のソースコードリポジトリに結合された<ref>{{cite web |title=ext4: Rename ext4dev to ext4 |publisher= Linus' kernel tree |url=httphttps://git.kernel.org/?p=pub/scm/linux/kernel/git/torvalds/linux.git;a=commit;h=03010a3350301baac2154fa66de925ae2981b7e3 | accessdate=2008-10-20 }}</ref>。これは開発段階の終了を意味し、ext4の採用を推奨するものであった。ext4ファイルシステムを含むLinux 2.6.28は、[[2008年]][[12月25日]]にリリースされた<ref>{{cite news |first=Thorsten |last=Leemhuis |authorlink= |coauthors= |title= Higher and further: The innovations of Linux 2.6.28 |url=http://www.heise-online.co.uk/open/Kernel-Log-Higher-and-Further-The-innovations-of-Linux-2-6-28--/features/112299 |work=Heise Online |publisher= |accessdate=2008-12-23}}</ref>
 
==特徴==
;大きなボリュームサイズとファイルサイズ
:ext4ファイルシステムは、最大1EiBまでのボリュームサイズ<ref>{{cite web|title=Migrating to Ext4 |url=http://www.ibm.com/developerworks/linux/library/l-ext4/ |accessdate=2008-12-14 | publisher = IBM | work = DeveloperWorks|archiveurl=https://web.archive.org/web/20080510122228/http://www.ibm.com/developerworks/linux/library/l-ext4/|archivedate=2008-05-10}}</ref>と、最大16TiBまでのファイルサイズをサポートする。
 
;エクステント
:[[{{仮リンク|エクステント]]|en|Extent (file systems)}}は、[[ext2]]および[[ext3]]で使われてきた伝統的なブロックマッピング方式を置き換える概念である。エクステントは連続した物理ブロックの集合であり、大きなファイルに対するパフォーマンスを改善し、フラグメンテーションの発生を減らすことができる。ext4におけるエクステントは、4KB4KiBのブロックサイズで最大128MB128MiBまでの連続した領域をマッピングすることができる<ref name = "Mathur" />。[[inode]]ごとに4つのエクステントを格納することができる。ひとつのファイルに5つ以上のエクステントがあるとき、残りのエクステントは[[HTree|Htree]]で構造化される。エクステントを使用したいファイル毎に{{仮リンク|chattr|en|chattr}}コマンドなどでの設定が必要
 
;後方互換性
: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]]と呼ばれるものがある。これは''遅延確保''としても知られている。遅延したブロック確保つまりext4でデータがディスクに書き込フラッシュされるでブロックの確保が遅延される いくつかの他(対して一部のファイルシステム違って必要なデータが書き込みキャッシュに入れられる場合でも、ブロックをこの段階の前は直ちに確保されだろう)実際のファイルサイズより大きなデータを一度に効率的基づく形でブロック確保の決定する改良ことにより、遅延確保はパフォーマンス向上させ、フラグメンテーションはト化を減少させる。
 
;サブディレクトリの32000個制限の撤廃
:[[ext3]]ファイルシステムにおいては、1つのディレクトリに入れられるサブディレクトリ数が32,000個に制限されている。この制限がext4ファイルシステムでは6465,000個まで引き上げられ、"dir_nlink"機能を使うとそれを超える事が可能となる(親ディレクトリのリンクカウント増加は止まるだろうが)。一つのディレクトリ内のファイル数が増えた場合における性能を上げる為、[[Htree]]インデックス([[B-tree]]の発展版)は、ext4でデフォルトでオンになった。この機能はLinux kernel 2.6.23 から導入されている。Htreeはext3でもdir_index機能が有効であれば利用可能であった。
 
;ジャーナルのチェックサム
:ext4は信頼性を向上するため、ジャーナルにチェックサムを使用する。なぜならばジャーナルはディスクで最も使用されるファイルの一つだからである。この機能によってジャーナル過程の間ディスクI/Oの待機を安全に避ける事ができるという利点を持つ。これによりパフォーマンスが若干向上する。ジャーナルのチェックサムのテクニックは『IRON File Systems』というウィスコンシン州立大学の研究論文にインスパイアされたものである。(とりわけ6章の『トランザクション・チェックサム』の部分)<ref>{{cite paper |url=http://www.cs.wisc.edu/wind/Publications/iron-sosp05.pdf |title=IRON File Systems |author=Vijayan Prabhakaran, ''et al.'' |publisher=CS Dept, University of Wisconsin |format=PDF}}</ref>
 
;オンラインのデフラグメンテーション
:e4defrag により、マウント中(オンライン)でのデフラグ処理のための多数の提案存在するが、このサポートはメインラインのカーネル可能はまだ含まれていった。ファイルシステムのフラグメンテーションを避けるための様々なテクニックによってフラグメントしにくくなっているが、それでもなお、長期間運用されたファイルシステムは時間経過によってフラグメントが発生する傾向に場合がある。ext4は個別のファイルごとやファイルシステム全体に対するデフラグを行うツールを持つだろう。<ref>http{{Cite web |url=https://kernelnewbies.org/Ext4#head-38e6ac2b5f58f10989d72386e6f9cc2ef7217fb0 |title=Ext4 |website=Linux Kernel Newbies |accessdate=2025-03-26}}</ref>
 
;より高速なファイルシステムチェック
:ext4において、確保されていないブロック群とi-nodeテーブル部は印をつけられる。これは[[e2fsck]]の実行時に全体のチェックを不要にし、ファイルシステムのチェックにかかる時間を大きく減少させる。この機能は2.6.24のLinuxカーネルで実装された。
 
;マルチブロックの確保
:ext3では、ファイルが追加されるとき、ext3は際にブロックアロケータをそれぞれのブロック個別に1回ずつ呼び出す。そのため、同時に複数書き込みを行う場合も。には、ディスク上でファイルのフラグメントは容易に発生する。遅延確保によって、しかしながら、ext4のバッファより大きなデータの塊受け入れる。そバッファして複数のブロックのグループを一度に確保する遅延確保を利用する。これはアロケータは何を書き込むべきかについてより多くの情報を保持することを意味し、そしてディスク上のファイル領域確保のためより良い選択を行うことができるようになる。マルチブロックアロケータは遅延確保がファイルシステム上で有効になっているとき、もしくはファイルがO_DIRECTモードで開かれているときに使用される。この機能はディスクフォーマットには影響しない。
;タイムスタンプの改良
:コンピューター全体的により高速になると共つれてLinuxはよりミッションクリティカルな用途で使用されるようになり、秒ベースの粒度のタイムスタンプでは不十分となってきている。この解決として、ext4ではタイムスタンプをナノ秒単位で提供している。付け加えて、[[2038年問題]]を引き伸ばすためにタイムスタンプの秒フィールドのもっとも重要なビットとして2上位に2ビットの拡張タイムスタンプフィールドが付け加えられ、結果として204年後まで先延ばしにしている。
:Ext4ext4作成付による時のタイムスタンプ(datetime-of-createdcreation timestamps)を追加でサポートする。しかし、[[セオドア・ツォー]]が指摘するように、[[inode]]に余分な作成フィールドを簡単に追加できるようにするため(従ってext4つまり技術的おける日付によるそのタイムスタンプのサポート技術的にext4で可能するサポート)、変更がより難しくなり、[[システムコール]]追加は簡単であるも呼び出しが必要になる。例えば[[Stat の、stat(Unix)|stat ()]]のような(おそらく新しいバージョンでたぶん必要となる)などの必要なシステムコールや、そに依存すだろう)。そして様々なライブラリはそれに依拠したものに(glibcる([[glibc]]ど)変更や追加はうな)り難しい。これらの変更は様々なプロジェクトでの調整が必要とされ。だから、ext4の開発者が生成日付のタイムスタンプに対する最初のサポートを実装するにもかかわらず、この機能は現在のユーザープログラムでは使用されないだろう。<ref name="osdirmailinglistext4timestamps">{{cite web
|url=https://www.redhat.com/archives/ext3-users/2006-October/msg00015.html
|title=Re: creation time stamps for ext4 ?
|author=Theodore Ts'o
|date=Thu, 5 Oct 2006 12:55:04 -040010-05
|accessdate=2010-04-13
}}</ref>。そのため、ext4に保存された作成日時は、現在のところLinux上のユーザプログラムに対してstatx() APIによってのみ提供される<ref name="statx">{{cite web
}}</ref>
| url = https://lwn.net/Articles/718222/
| title = Extending statx()
| first = Jake | last = Edge
| date = 2017-03-31
| accessdate = 2019-04-20
}}</ref>
 
== 欠点 ==
=== 遅延アロケーション割り当てとデータ損失 ===
遅延アロケーション割り当て({{lang|en|delayed allocation}})は、すべてのデータをディスクに書き出す前にファイルシステムがクラッシュするような場合にした際、データを損失する危険性があるを孕む
 
このようなことが起こる典型的なシナリオは、[[fsync]]でディスクに書き出すことをせずにファイルの内容を書き換えるようなプログラムを使用する時である。実際に書き出しをする前にシステムがクラッシュすると、問題が起こる可能性がある。このような状況では、ext3のユーザーは、クラッシュ後に変更前か変更後のどちらかのデータがディスクに残されているということを期待することができた。一方、Linuxカーネル2.6.28のext4では、クラッシュ前にファイルの内容を消去するが新しいデータを書き出さず、結果としてデータが損失するということがしばしば見られた。
 
この問題に対処するためにfsyncを頻繁に使用すると、<code>data=ordered</code>フラグ(多くのLinuxディストリビューションではデフォルト)でマウントされたext3ファイルシステムでは深刻なパフォーマンス低下が起こる恐れがある。どちらのファイルシステムもしばらくの間使用されるだろうということを考えると、これはエンドユーザーアプリケーション開発者にとって非常に厄介な問題となる。このため、セオドア・ツォーは、上記のような場合の遅延アロケーション割り当てを制限するext4のパッチを作成した。パフォーマンスは多少低下するが、これによってクラッシュ後にどちらかのバージョンのデータが残る可能性が著しく高まった。
 
このパッチはメインライン・カーネル2.6.30に導入されているが、様々なディストリビューションは2.6.28や2.6.29へとバックポートすることができる。例えば、[[Ubuntu]]はバージョン9.04 Jaunty Jackalopeでカーネル2.6.28にそのパッチを導入した。
 
=== Linuxカーネルの機能への影響 ===
ext4はLinuxに限れば標準的なファイルシステムであるため、実際にはext4以外では使用できない機能があたかもファイルシステムに依存しないLinuxカーネルの機能として追加されてしまうことがある。実例として<code>fallocate()</code>がある。これはext4におけるファイルブロックの事前確保を実装したシステムコールであるが、これを期待通りのセマンティクスにて実装したファイルシステムはext4のみである。この影響で、[[POSIX]]では類似機能のシステムコールを<code>posix_fallocate()</code>として別に仕様に入れたり{{Efn2|<code>posix_fallocate()</code>は対象のファイルシステムが<code>fallocate()</code>をサポートしていない場合、実装依存で<code>fallocate()</code>のセマンティクスの一部をエミュレートすることができる。ただし、常にそうしなくとも構わない。<code>fallocate()</code>は対象のファイルシステムがこれをサポートしていない場合、常にエラーとする。}}、[[ZFS]]にて[[ZFS#制限事項|<code>fallocate()</code>が本質的に実装できない]]ことが機能不足として指摘されてしまう結果となった。
 
==ディストリビューション==
96 ⟶ 93行目:
 
== 脚注 ==
=== 注釈 ===
{{reflist}}
{{Notelist2}}
=== 出典 ===
{{Reflist}}
 
== 関連項目 ==
103行目:
 
== 外部リンク ==
*[ {{Wayback|url=http://heise-online.co.uk/news/Kernel-Log-Ext4-completes-development-phase-as-interim-step-to-btrfs--/111742 |title=Kernel Log: Ext4 completes development phase as interim step to btrfs]|date=20081019055642}}
* [httphttps://archive.is/20120712143749/kerneltrap.org/node/6776 Theodore Ts'o's discussion on ext4]
* [httphttps://www.phoronix.com/scan.php?page=article&item=review/ext4_benchmarks&num=1 Real World Benchmarks Of The EXT4 File-System]
* [httphttps://archive.kernel.org/oldwiki/ext4.wiki.kernel.org/ Ext4 Development Wiki]
*[ {{Wayback|url=http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf |title="Ext4 block and inode allocator improvements"]|date=20081230071147}} (Ottawa Linux Symposium 2008の資料)
*[https {{Wayback|url=http://ols2006www.108linuxsymposium.redhat.comorg/2007archives/OLS/Reprints-2007/mathur-Reprint.pdf |title="The new ext4 filesystem: current status and future plans"] |date=20100706040230}} (Ottawa Linux Symposium 2007の資料)
*[https {{Wayback|url=http://ols2006www.108linuxsymposium.redhat.comorg/2007archives/OLS/Reprints-2007/sato-Reprint.pdf |title="ext4 online defragmentation"] |date=20100706041136}} (materials from Ottawa Linux Symposium 2007)
* [httphttps://www.usenix.org/legacy/event/lsf07/tech/cao_m.pdf “Ext4: Ext2/3の次世代のファイルシステム”]
* [httphttps://kernelnewbies.org/Ext4 Kernelnewbies.org: Ext4, the Fourth Extended File System]
* [https://www.accum.se/~bosse/ Windows用ドライバ]
*[http://gentoolivecd.piffpaffpuff.net/ Gentoo Live InstallCD], with ext4 and ssh
*[http://ext4.wiki.kernel.org/index.php/Main_Page "Ext4 wiki from Kernel.org"]
 
{{ファイルシステム}}
 
{{DEFAULTSORT:EXT4}}
{{Computer-stub}}
 
{{DEFAULTSORT:EXT4}}
[[Category:Linuxのファイルシステム]]
[[Category:2006年のソフトウェア]]
 
[[cs:Ext4]]
[[de:Ext4]]
[[en:Ext4]]
[[eo:Ext4]]
[[es:Ext4]]
[[eu:Ext4]]
[[fa:Ext4]]
[[fr:Ext4]]
[[he:Ext4]]
[[it:Ext4]]
[[ko:Ext4]]
[[nl:Ext4]]
[[no:Ext4]]
[[pl:Ext4]]
[[pt:Ext4]]
[[ro:Ext4]]
[[ru:Ext4]]
[[sk:Ext4]]
[[sv:Ext4]]
[[tr:Ext4]]
[[uk:Ext4]]
[[zh:Ext4]]