========================================================= これは、 Linux-2.6.31.1/Documentation/filesystems/ext4.txt の和訳 です。 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 更新日 : 2009/07/25 翻訳者 : Seiji Kaneko < skaneko at mbn dot or dot jp > 査読者 : Hiroshi Suzuki ========================================================= #Ext4 Filesystem #=============== Ext4 ファイルシステム ==================== #Ext4 is an an advanced level of the ext3 filesystem which incorporates #scalability and reliability enhancements for supporting large filesystems #(64 bit) in keeping with increasing disk capacities and state-of-the-art #feature requirements. ext4 ファイルシステムは、ext3 ファイルシステムの次世代の水準として、ディス ク容量の増加に伴う巨大なファイルシステム (64bit) を扱うのに必要な拡張性と 信頼性を向上し、最新の機能要求に応えたものです。 #Mailing list: linux-ext4@vger.kernel.org メーリングリスト: linux-ext4@vger.kernel.org #Web site: http://ext4.wiki.kernel.org ウェブサイト: http://ext4.wiki.kernel.org #1. Quick usage instructions: #=========================== 1. 簡単な利用方法 ================= #Note: More extensive information for getting started with ext4 can be # found at the ext4 wiki site at the URL: # http://ext4.wiki.kernel.org/index.php/Ext4_Howto 注記: ext4 をはじめるに当たってのさらに詳細な説明は、下記 URL の ext4 Wiki サイトにあります。 http://ext4.wiki.kernel.org/index.php/Ext4_Howto # - Compile and install the latest version of e2fsprogs (as of this # writing version 1.41.3) from: - 最新の e2fsprogs (現在バージョン 1.41.3) を以下から入手し、コンパイル・ インストールしてください。 http://sourceforge.net/project/showfiles.php?group_id=2406 # or または ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/ # or grab the latest git repository from: または以下から最新の git リポジトリを入手してください。 git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git # - Note that it is highly important to install the mke2fs.conf file # that comes with the e2fsprogs 1.41.x sources in /etc/mke2fs.conf. If # you have edited the /etc/mke2fs.conf file installed on your system, # you will need to merge your changes with the version from e2fsprogs # 1.41.x. - e2fsprogs 1.41.x ソース付属の mke2fs.conf ファイルを /etc/mke2fs.conf にインストールすることはとても重要です。システムにインストールしてある /etc/mke2fs.conf ファイルをすでに編集している場合は、e2fsprogs 1.41.x の版のものに既存の修正をマージする必要があります。 # - Create a new filesystem using the ext4 filesystem type: - ext4 ファイルシステムタイプを用いて新規ファイルシステムを作成します。 # mke2fs -t ext4 /dev/hda1 # Or to configure an existing ext3 filesystem to support extents: または、既存の ext3 ファイルシステムをエクステントをサポートするよう設 定します。 # tune2fs -O extents /dev/hda1 # If the filesystem was created with 128 byte inodes, it can be # converted to use 256 byte for greater efficiency via: ファイルシステムが 128 バイト inode で作成されている場合は、効率のため 256 バイトを使用するよう以下のように変換できます。 # tune2fs -I 256 /dev/hda1 # (Note: we currently do not have tools to convert an ext4 # filesystem back to ext3; so please do not do try this on production # filesystems.) (注意: 現在のところ ext4 ファイルシステムを ext3 に戻すツールは提供 していません。このため、業務利用しているファイルシステムで試さないでく ださい) # - Mounting: - マウントする: # mount -t ext4 /dev/hda1 /wherever # - When comparing performance with other filesystems, it's always # important to try multiple workloads; very often a subtle change in a # workload parameter can completely change the ranking of which # filesystems do well compared to others. When comparing versus ext3, # note that ext4 enables write barriers by default, while ext3 does # not enable write barriers by default. So it is useful to use # explicitly specify whether barriers are enabled or not when via the # '-o barriers=[0|1]' mount option for both ext3 and ext4 filesystems # for a fair comparison. When tuning ext3 for best benchmark numbers, # it is often worthwhile to try changing the data journaling mode; '-o # data=writeback,nobh' can be faster for some workloads. (Note # however that running mounted with data=writeback can potentially # leave stale data exposed in recently written files in case of an # unclean shutdown, which could be a security exposure in some # situations.) Configuring the filesystem with a large journal can # also be helpful for metadata-intensive workloads. - 他のファイルシステムとの性能比較の際は、複数の負荷環境で試すことが常に 重要です。ワークロードパラメータのわずかな変更が、ファイルシステムの他 ファイルシステムとの比較評価づけをまったく変えてしまうことが頻繁に起こ ります。特に ext3 との比較の場合は、ext4 が書き込みバリアを標準で有効 化しており、ext3 は標準ではライトバリアを有効にしてはいないことに留意 してください。従って、公平な比較のためにはライトバリアの有効・無効を明 示的に、ext3 と ext4 ファイルシステムとも '-o barriers=[0|1]' を使って 指定するのが役に立つでしょう。ext4 を最高のベンチマーク結果となるよう にチューニングする場合、データジャーナリングモードの変更を試すことには 価値があります。例えば、一部のベンチマークでは '-o data=writeback,nobh' は他より高速となるでしょう (注意として、 data=writeback モードでマウント運用している場合、クリーンでないシャッ トダウンで直前に書いたデータがゴミとして残る可能性があるため、状況によ ってはセキュリティ面での情報漏洩の可能性があります)。ジャーナルを大き く取るよう設定することも、metadata を多用する負荷では性能の助けになり ます。 #2. Features #=========== 2. 機能 ======= #2.1 Currently available 2.1 現在使える機能 #* ability to use filesystems > 16TB (e2fsprogs support not available yet) #* extent format reduces metadata overhead (RAM, IO for access, transactions) #* extent format more robust in face of on-disk corruption due to magics, #* internal redundancy in tree #* improved file allocation (multi-block alloc) #* lift 32000 subdirectory limit imposed by i_links_count[1] #* nsec timestamps for mtime, atime, ctime, create time #* inode version field on disk (NFSv4, Lustre) #* reduced e2fsck time via uninit_bg feature #* journal checksumming for robustness, performance #* persistent file preallocation (e.g for streaming media, databases) #* ability to pack bitmaps and inode tables into larger virtual groups via the # flex_bg feature #* large file support #* Inode allocation using large virtual block groups via flex_bg #* delayed allocation #* large block (up to pagesize) support #* efficent new ordered mode in JBD2 and ext4(avoid using buffer head to force # the ordering) * 16TB 超のファイルシステムの利用 (e2fsprogs ではまだサポートされていません) * メタデータオーバヘッド (RAM, アクセス I/O, トランザクション) を減らすエク ステントフォーマット * magic によるディスク上のデータ破壊に対して、より頑強なエクステントフォー マット * 木構造の内部冗長性 * ファイル割り当ての改善 (複数ブロックアロケーション) * i_links_count[1] による、32000 のサブディレクトリ数制限の撤廃 * mtime, atime, ctime, create time(作成時刻) に nsec 単位のタイムスタンプ * ディスク上での inode バージョンフィールド (NFSv4、Lustre) * uninit_bg 機能による e2fsck 時間の削減 * 頑健さと性能を向上させるためのジャーナルチェックサム機能 * 持続ファイル事前割り当て (ストリーミングメディアやデータベース向け) * ビットマップと inode テーブルを、flex_bg 機能を使って大きな仮想グループに 詰め込む機能。 * 巨大ファイルサポート * flex_bg 機能による、大きな仮想ブロックグループを用いて inode を割り当てる 機能 * 遅延割り当て * 巨大ブロック (ページサイズまで) のサポート * JBD2 と ext4 での効率的な新 ordered モード (順序保証のためにバッファヘッ ドを用いるのを避ける) #[1] Filesystems with a block size of 1k may see a limit imposed by the #directory hash tree having a maximum depth of two. [1] ブロックサイズ 1k のファイルシステムでは、ディレクトリハッシュツリーが最大 深さ 2 であることから来る制限に制約されます。 #2.2 Candidate features for future inclusion 2.2 将来追加候補に挙がっている機能 #* Online defrag (patches available but not well tested) * オンラインデフラグ (パッチはありますが、十分にはテストされていません) #* reduced mke2fs time via lazy itable initialization in conjuction with # the uninit_bg feature (capability to do this is available in e2fsprogs # but a kernel thread to do lazy zeroing of unused inode table blocks # after filesystem is first mounted is required for safety) * itable 遅延初期化と uninit_bg 機能を組み合わせた mke2fs 時間の短縮 (これ を実現する機能は e2fsprogs には既に組み込まれていますが、ファイルシステム の最初のマウント後に未使用 inode テーブルブロックを遅延初期化するためのカ ーネルスレッドが、安全な操作のために必要です)。 #There are several others under discussion, whether they all make it in is #partly a function of how much time everyone has to work on them. Features like #metadata checksumming have been discussed and planned for a bit but no patches #exist yet so I'm not sure they're in the near-term roadmap. これ以外にも幾つかの機能が、組み込みに関して議論中です。議論の結果はその機能で これから必要な作業時間 (の見通し) に依存するでしょう。メタデータチェックサムの ような機能は議論されて多少の計画もありますが、現時点ではパッチがなく、近い将来 のロードマップに現われるかどうかは定かではありません。 #The big performance win will come with mballoc, delalloc and flex_bg #grouping of bitmaps and inode tables. Some test results available here: ビットマップと inode テーブルにmballoc、delalloc と、flex_bg グルーピング を導入したことにより大きな性能改善が実現されています。性能測定結果の一部は 以下で公開されています。 - http://www.bullopensource.org/ext4/20080818-ffsb/ffsb-write-2.6.27-rc1.html - http://www.bullopensource.org/ext4/20080818-ffsb/ffsb-readwrite-2.6.27-rc1.html #3. Options #========== 3. マウントオプション ==================== #When mounting an ext4 filesystem, the following option are accepted: #(*) == default ext4 ファイルシステムマウント時、以下のオプションが使えます。 (*) == 既定値 #ro Mount filesystem read only. Note that ext4 will # replay the journal (and thus write to the # partition) even when mounted "read only". The # mount options "ro,noload" can be used to prevent # writes to the filesystem. ro ファイルシステムをリードオンリーでマウントする。ext4 はリードオンリーでマウントした場合にもジャーナルのリ プレイを行う (従ってパーティションに書き込みを行う) ことに注意してください。マウントオプション "ro,noload" をファイルシステムへの書き込みを阻止す るために使用することができます。 #journal_checksum Enable checksumming of the journal transactions. # This will allow the recovery code in e2fsck and the # kernel to detect corruption in the kernel. It is a # compatible change and will be ignored by older kernels. journal_checksum ジャーナルトランザクション時にチェックサムを有効にし ます。これにより e2fsck のリカバリコードを有効にし、 カーネル内での破壊を検出できるようにします。これは互 換性を持った変更で、従来のカーネルでは単に無視されま す。 #journal_async_commit Commit block can be written to disk without waiting # for descriptor blocks. If enabled older kernels cannot # mount the device. This will enable 'journal_checksum' # internally. journal_async_commit ディスクリプタブロックの書き込みを待たずに、コミット したブロックのディスクへの書き込みを許します。有効に している場合、従来のカーネルではデバイスをマウントで きません。これにより、内部的に journal_checksum が 有効にされます。 #journal=update Update the ext4 file system's journal to the current # format. journal=update ext4 ファイルシステムのジャーナルを現在の形式にアッ プデートします。 #journal_dev=devnum When the external journal device's major/minor numbers # have changed, this option allows the user to specify # the new journal location. The journal device is # identified through its new major/minor numbers encoded # in devnum. journal_dev=devnum 外部ジャーナルデバイスの major/minor 番号が変化した 場合、このオプションを使って新しいジャーナルの位置を 指定します。ジャーナルデバイスは devnum 形式でエンコ ードされた major/minor 番号で指定されます。 #noload Don't load the journal on mounting. Note that # if the filesystem was not unmounted cleanly, # skipping the journal replay will lead to the # filesystem containing inconsistencies that can # lead to any number of problems. noload マウント時にジャーナルをロードしません。もしファイルシス テムがクリーンにアンマウントされていなかった場合には、ジ ャーナルリプレイを飛ばすことによりファイルシステムに不整 合が発生するでしょうし、その結果様々な問題が起きるでしょ う。 #data=journal All data are committed into the journal prior to being # written into the main file system. data=journal 全データは、メインのファイルシステムに書き込む前に、 ジャーナルにコミットされます。 #data=ordered (*) All data are forced directly out to the main file # system prior to its metadata being committed to the # journal. data=ordered (*) 全データは、そのメタデータがジャーナルにコミットされ る前に、メインファイルシステムに直接出力されます。 #data=writeback Data ordering is not preserved, data may be written # into the main file system after its metadata has been # committed to the journal. data=writeback データの順序は保存されません。データは、そのメタデー タがジャーナルにコミットされたあとに、メインファイル システムに書き込まれるかもしれません。 #commit=nrsec (*) Ext4 can be told to sync all its data and metadata # every 'nrsec' seconds. The default value is 5 seconds. # This means that if you lose your power, you will lose # as much as the latest 5 seconds of work (your # filesystem will not be damaged though, thanks to the # journaling). This default value (or any low value) # will hurt performance, but it's good for data-safety. # Setting it to 0 will have the same effect as leaving # it at the default (5 seconds). # Setting it to very large values will improve # performance. commit=nrsec (*) Ext4 はデータとメタデータを、'nrsec' 秒毎に同期できま す。デフォルトは、5 秒です。これは、電源が切れてしまっ た時、最後の 5 秒間の作業内容が失われてしまうことを意 味します (しかし、ファイルシステムは、ジャーナリングの おかげで破壊されないでしょう)。 このデフォルト値 (または、より小さい値) は、性能に影響 を与えますが、データの安全性は向上します。0 にした場 合は、デフォルトの 5 秒にしたのと同じ効果となります。 とても大きな値にするとパフォーマンスが向上します。 #barrier=<0|1(*)> This enables/disables the use of write barriers in #barrier(*) the jbd code. barrier=0 disables, barrier=1 enables. #nobarrier This also requires an IO stack which can support # barriers, and if jbd gets an error on a barrier # write, it will disable again with a warning. # Write barriers enforce proper on-disk ordering # of journal commits, making volatile disk write caches # safe to use, at some performance penalty. If # your disks are battery-backed in one way or another, # disabling barriers may safely improve performance. # The mount options "barrier" and "nobarrier" can # also be used to enable or disable barriers, for # consistency with other ext4 mount options. barrier=<0|1(*)> jbd コードでのライトバリアの利用を有効/無効にします。 barrier(*) barrier=0 は無効化し、barrier=1 は有効にします。こ nobarrier のライトバリアの有効化のためにはバリアを有効化した IO スタックが必要で、さらに jbd がバリアライト時に エラーを受けたならば警告とともに無効にもどります。ラ イトバリアは多少の性能の犠牲により、適切なディスク上 のジャーナルコミットの順序を実現し、揮発性のディスク ライトキャッシュを安全に使用できるようにします。 もし使用しているディスクコントローラが電池でバック アップされているなどの場合には、バリアを無効化する ことにより安全に性能を向上できます。 マウントオプション "barrier" と "nobarrier" をバリ アの有効無効を指定するために用いることができます。こ のオプションは、他の ext4 マウントオプションとの一貫 性維持のため提供されています。 #inode_readahead=n This tuning parameter controls the maximum # number of inode table blocks that ext4's inode # table readahead algorithm will pre-read into # the buffer cache. The default value is 32 blocks. inode_readahead=n このチューニングパラメータは、ext4 inode テーブル先読 みアルゴリズムがバッファキャッシュに先読みする、inode テーブルブロックの数の最大値を制御します。既定値は 32 ブロックです。 #orlov (*) This enables the new Orlov block allocator. It is # enabled by default. orlov (*) 新しい、Orlov ブロックアロケータを有効にします。デフ ォルトで有効です。 #oldalloc This disables the Orlov block allocator and enables # the old block allocator. Orlov should have better # performance - we'd like to get some feedback if it's # the contrary for you. oldalloc Orlov ブロックアロケータを無効にして、古いブロックア ロケータを有効にします。Orlov の方が性能が良いはずですが、 もし、逆効果なら、知らせてください。 #user_xattr Enables Extended User Attributes. Additionally, you # need to have extended attribute support enabled in the # kernel configuration (CONFIG_EXT4_FS_XATTR). See the # attr(5) manual page and http://acl.bestbits.at/ to # learn more about extended attributes. user_xattr POSIX 拡張属性を有効にします。有効にするには、さらにカー ネル設定で拡張属性のサポート (CONFIG_EXT4_FS_XATTR) を 組み込む必要があります。 POSIX 拡張属性の詳細を学ぶには、attr(5) のマニュアルペー ジと http://acl.bestbits.at を見てください。 #nouser_xattr Disables Extended User Attributes. nouser_xattr POSIX 拡張属性 を無効にします。 #acl Enables POSIX Access Control Lists support. # Additionally, you need to have ACL support enabled in # the kernel configuration (CONFIG_EXT4_FS_POSIX_ACL). # See the acl(5) manual page and http://acl.bestbits.at/ # for more information. acl POSIX アクセス制御リスト (POSIX ACL) サポートを有効に します。有効にするには、さらにカーネル設定で ACL のサポ ート (CONFIG_EXT4_FS_POSIX_ACL) を組み込む必要があり ます。 ACL の詳細は、acl(5) のマニュアルページと http://acl.bestbits.at を見てください。 #noacl This option disables POSIX Access Control List # support. noacl POSIX アクセス制御リスト(POSIX ACL) を無効にします。 reservation noreservation #bsddf (*) Make 'df' act like BSD. #minixdf Make 'df' act like Minix. bsddf (*) 'df' の動作を BSD と同様にします。 minixdf 'df' の動作を Minix と同様にします。 #debug Extra debugging information is sent to syslog. debug 追加デバッグ情報を syslog に送ります。 #abort Simulate the effects of calling ext4_abort() for # debugging purposes. This is normally used while # remounting a filesystem which is already mounted. abort デバッグのため ext4_abort() 呼び出しの効果をシミ ュレートします。これは通常は、既にマウントされてい るファイルシステムを再マウントしようとするばあいに 利用 (発生) されます。 #errors=remount-ro Remount the filesystem read-only on an error. #errors=continue Keep going on a filesystem error. #errors=panic Panic and halt the machine if an error occurs. # (These mount options override the errors behavior # specified in the superblock, which can be configured # using tune2fs) errors=remount-ro(*) エラー時、読み込み専用でファイルシステムを再マウント します。 errors=continue ファイルシステムエラーが発生しても継続します。 errors=panic エラーが発生したら、PANIC して、マシンを停止します (これらのオプションは、tune2fs で設定時に指定した、 superblock で指定したエラー時の挙動指定を上書きします)。 #data_err=ignore(*) Just print an error message if an error occurs # in a file data buffer in ordered mode. #data_err=abort Abort the journal if an error occurs in a file # data buffer in ordered mode. data_err=ignore(*) オーダードモードでファイルデータバッファでエラーが発生し た場合、単にエラーメッセージを出力するだけです。 data_err=abort オーダードモードでファイルデータバッファでエラーが発生し た場合、ジャーナルを異常終了します。 #grpid Give objects the same group ID as their creator. #bsdgroups grpid オブジェクトの作成時に、作成先ディレクトリと同じグループ bsdgroups ID を与えます。 #nogrpid (*) New objects have the group ID of their creator. #sysvgroups nogrpid (*) オブジェクトの作成時に、作成先ディレクトリに setgid ビ sysvgroups ットがセットされていない場合、作成プロセスと同じグループ ID を与えます。作成先ディレクトリに setgid ビットがセッ トされていた場合には、作成先ディレクトリのグループ ID と 作成されたのがディレクトリであった場合には setgid ビット が引き継がれます。 #resgid=n The group ID which may use the reserved blocks. resgid=n 予約ブロックを使用するグループ ID です。 #resuid=n The user ID which may use the reserved blocks. resuid=n 予約ブロックを使用するユーザ ID です。 #sb=n Use alternate superblock at this location. sb=n この位置の代替スーパーブロックを使います。 quota noquota grpquota usrquota #bh (*) ext4 associates buffer heads to data pages to #nobh (a) cache disk block mapping information # (b) link pages into transaction to provide # ordering guarantees. # "bh" option forces use of buffer heads. # "nobh" option tries to avoid associating buffer # heads (supported only for "writeback" mode). bh (*) ext4 はバッファ先頭を以下の情報に関連づけます。 nobh (a) キャッシュディスクブロックマップ情報 (b) 順序保証のためのトランザクション内のリンクページ bh オプションではバッファヘッドの利用を強制し、nobh オプションではバッファ先頭との関連づけを避けます (writeback モードでのみサポートされます)。 #stripe=n Number of filesystem blocks that mballoc will try # to use for allocation size and alignment. For RAID5/6 # systems this should be the number of data # disks * RAID chunk size in file system blocks. #delalloc (*) Deferring block allocation until write-out time. #nodelalloc Disable delayed allocation. Blocks are allocation # when data is copied from user to page cache. stripe=n mballoc がアロケーション単位とアラインに使用しようと するファイルシステムブロック数です。RAID5/6 では、こ の値はデータディスク数と、ファイルシステムブロックの RAID チャンクサイズとの積にすべきです。 delalloc (*) 書き込み時までブロック割り当てを遅延させます。 nodelalloc 遅延割り当てを無効にします。データがユーザからページ キャッシュに書き込まれた時点でブロック割り当てが行な われます。 #max_batch_time=usec Maximum amount of time ext4 should wait for # additional filesystem operations to be batch # together with a synchronous write operation. # Since a synchronous write operation is going to # force a commit and then a wait for the I/O # complete, it doesn't cost much, and can be a # huge throughput win, we wait for a small amount # of time to see if any other transactions can # piggyback on the synchronous write. The # algorithm used is designed to automatically tune # for the speed of the disk, by measuring the # amount of time (on average) that it takes to # finish committing a transaction. Call this time # the "commit time". If the time that the # transaction has been running is less than the # commit time, ext4 will try sleeping for the # commit time to see if other operations will join # the transaction. The commit time is capped by # the max_batch_time, which defaults to 15000us # (15ms). This optimization can be turned off # entirely by setting max_batch_time to 0. max_batch_time=usec ext4 の同期書き込み操作時に、別のファイル操作を合わせて バッチするために待つ時間の最大値を指定します。同期書き 込み処理は強制的なコミットを行い、その後 I/O 処理の完了 を待つため、同期書き込みと一緒にできる他のトランザクシ ョンの有無を短時間待つことは、コストが小さくスループッ ト面で大きな改善になります。ここで使われているアルゴリ ズムは、ディスクのトランザクションのコミット完了に要す る時間 (平均時間) を測定することにより、ディスク速度に 最適化するよう設計されたものです。ここで上記の「コミッ ト完了に要する時間」を ”Commit time" と呼ぶことにしま す。もし、トランザクションを実行している時間が Commit time より小さいならば、ext4 は Commit time だけスリー プして他の処理がトランザクションに合流できるかどうかを 調べます。この Commit time は max_batch_time により 上限が指定されます。max_batch_time の標準値は 15000us (15ms) です。max_batch_time を 0 と指定する ことで、この最適化を完全に無効化できます。 #min_batch_time=usec This parameter sets the commit time (as # described above) to be at least min_batch_time. # It defaults to zero microseconds. Increasing # this parameter may improve the throughput of # multi-threaded, synchronous workloads on very # fast disks, at the cost of increasing latency. min_batch_time=usec このパラメータは commit time (上記参照) が、少なくとも min_batch_time 以上であることを指定します。標準値は 0 ms です。このパラメータを増やした場合、マルチスレッドで 同期を使う処理負荷を高速なディスクで実行している場合、レ イテンシィの増加のコストを代償にスループットが改善します。 #journal_ioprio=prio The I/O priority (from 0 to 7, where 0 is the # highest priorty) which should be used for I/O # operations submitted by kjournald2 during a # commit operation. This defaults to 3, which is # a slightly higher priority than the default I/O # priority. journal_ioprio=prio kjournald2 が、コミット処理中に発行する I/O 処理で用い る I/O プライオリティ (0 から 7 で、0 が最高のプライオ リティです) を指定します。標準値は 3 で、これは通常の I/O プライオリティより少し高くなっています。 #auto_da_alloc(*) Many broken applications don't use fsync() when #noauto_da_alloc replacing existing files via patterns such as # fd = open("foo.new")/write(fd,..)/close(fd)/ # rename("foo.new", "foo"), or worse yet, # fd = open("foo", O_TRUNC)/write(fd,..)/close(fd). # If auto_da_alloc is enabled, ext4 will detect # the replace-via-rename and replace-via-truncate # patterns and force that any delayed allocation # blocks are allocated such that at the next # journal commit, in the default data=ordered # mode, the data blocks of the new file are forced # to disk before the rename() operation is # committed. This provides roughly the same level # of guarantees as ext3, and avoids the # "zero-length" problem that can happen when a # system crashes before the delayed allocation # blocks are forced to disk. auto_da_alloc(*) 多くの壊れたアプリケーションは、fd = open("foo.new")/ noauto_da_alloc write(fd,..)/close(fd)/rename("foo.new", "foo") な どのパターン、あるいはそれより邪悪な fd = open("foo", O_TRUNC)/write(fd,..)/close(fd) パターンで、fsync() を使わないで既存のファイルを入れ 替えます。auto_da_alloc が有効な場合、ext4 はこのリ ネームによるファイルの入れ替えと truncate によるファ イルの入れ替えのパターンを検知し、標準のデータオーダー ドモードの場合に、リネーム処理がコミットされる前に新規 ファイルのデータブロックがディスクに書き込まれるよう、 遅延割り当てされたブロックを次のジャーナルコミット時に 強制的に割り当てます。この処理でほぼ ext3 と同程度の保 証ができ、遅延割り当てされたブロックがディスクに書かれ る前にシステムがクラッシュした場合の「長さ 0 になる」 問題を (同程度に) 回避できます。 #Data Mode #========= データモード =========== #There are 3 different data modes: 3 つの異なるデータモードを提供しています。 #* writeback mode #In data=writeback mode, ext4 does not journal data at all. This mode provides #a similar level of journaling as that of XFS, JFS, and ReiserFS in its default #mode - metadata journaling. A crash+recovery can cause incorrect data to #appear in files which were written shortly before the crash. This mode will #typically provide the best ext4 performance. * ライトバックモード data=writeback モードのとき、ext4 はデータを全くジャーナルしません。 これは、XFS, JFS, ReiserFS のデフォルトモード (メタデータジャーナリング) と 同レベルのジャーナリングを提供します。 クラッシュ + リカバリ で、クラッシュ直前に書き込まれたファイル内に不正データ が現れるかもしれません。通常このモードは最高の ext4 パフォーマンスが得られま す。 #* ordered mode #In data=ordered mode, ext4 only officially journals metadata, but it logically #groups metadata information related to data changes with the data blocks into a #single unit called a transaction. When it's time to write the new metadata #out to disk, the associated data blocks are written first. In general, #this mode performs slightly slower than writeback but significantly faster than journal mode. * オーダードモード data=ordered モードのとき、ext4 は公式にはメタデータのみをジャーナルします が、この際にメタデータとデータブロックはトランザクションと呼ばれる 1 つの単 位に、論理的にまとめられています。ディスクに新しいメタデータを書き込む時が きたら、関連データブロックが先に書き込まれます。一般的に、このモードは、ラ イトバックより多少遅い動作となりますが、ジャーナルモードよりはかなり速くな ります。 #* journal mode #data=journal mode provides full data and metadata journaling. All new data is #written to the journal first, and then to its final location. #In the event of a crash, the journal can be replayed, bringing both data and #metadata into a consistent state. This mode is the slowest except when data #needs to be read from and written to disk at the same time where it #outperforms all others modes. Currently ext4 does not have delayed #allocation support if this data journalling mode is selected. * ジャーナルモード data=journal モードは、データとメタデータの完全なジャーナリングを備えます。 すべての新しいデータは、先にジャーナルに書き込まれ、その後に所定の位置へ書き こまれます。クラッシュの際、ジャーナルはリプレイされ、データとメタデータの両方 は矛盾の無い状態に回復されます。このモードはもっとも遅いですが、ディスクへの データの読みだしと書き込みを同時に行う必要がある時は、他のモードより高性能で す。現在の ext4 では、このデータジャーナリングモードが選択されているとき、 遅延アロケーションはサポートされていません。 #References #========== 参考資料 ======== #kernel source: # カーネルソース: #programs: http://e2fsprogs.sourceforge.net/ プログラム: http://e2fsprogs.sourceforge.net/ #useful links: http://fedoraproject.org/wiki/ext3-devel # http://www.bullopensource.org/ext4/ # http://ext4.wiki.kernel.org/index.php/Main_Page # http://fedoraproject.org/wiki/Features/Ext4 役に立つリンク: http://fedoraproject.org/wiki/ext3-devel http://www.bullopensource.org/ext4/ http://ext4.wiki.kernel.org/index.php/Main_Page http://fedoraproject.org/wiki/Features/Ext4