ダウンロード: ext4.txt
現在作業中の文書です。お気づきの点がありましたら、jf@listserv.linux.or.jp、チケット、フォーラムのいずれかにお寄せください。
========================================================= これは、 linux-3.4.1/Documentation/filesystems/ext4.txt の和訳 です。 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 更新日 : 2012/06/10 翻訳者 : Seiji Kaneko < skaneko at mbn dot or dot jp > 査読者 : Hiroshi Suzuki <setter at reset dot jp> ========================================================= #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' 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' は他より高速となるでしょう (注意として、 data=writeback モードでマウント運用している場合、クリーンでないシャッ トダウンで直前に書いたデータがゴミとして残る可能性があるため、状況によ ってはセキュリティ面での情報漏洩の可能性があります)。ジャーナルを大き く取るよう設定することも、metadata を多用する負荷では性能の助けになり ます。 <!-- ext3 と書かれているのはどう見ても誤記なので、訳文では修正 --> #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 #* efficient 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 conjunction 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_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 番号で指定されます。 #norecovery Don't load the journal on mounting. Note that #noload 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. norecovery マウント時にジャーナルをロードしません。もしファイ noload ルシステムがクリーンにアンマウントされていなかった 場合には、ジャーナルリプレイを飛ばすことによりファ イルシステムに不整合が発生するでしょうし、その結果 様々な問題が起きるでしょう。 #data=journal All data are committed into the journal prior to being # written into the main file system. Enabling # this mode will disable delayed allocation and # O_DIRECT support. data=journal 全データは、メインのファイルシステムに書き込む前に、 ジャーナルにコミットされます。このモードを有効化し た場合、遅延割り当てと O_DIRECT サポートは無効化さ れます。 #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_blks=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_blks=n このチューニングパラメータは、ext4 inode テーブル先読 みアルゴリズムがバッファキャッシュに先読みする、inode テーブルブロックの数の最大値を制御します。既定値は 32 ブロックです。 #nouser_xattr Disables Extended User Attributes. If you have extended # attribute support enabled in the kernel configuration # (CONFIG_EXT4_FS_XATTR), extended attribute support # is enabled by default on mount. See the attr(5) manual # page and http://acl.bestbits.at/ for more information # about extended attributes. nouser_xattr POSIX 拡張属性 を無効にします。 もし、拡張属性サポートがカーネル設定 (CONFIG_EXT4_FS_XATTR) で有効になっている場合、ACL はマウント時にデフォルトで有効になります。 POSIX 拡張属性の詳細を学ぶには、attr(5) のマニュア ルページと http://acl.bestbits.at を見てください。 #noacl This option disables POSIX Access Control List # support. If ACL support is enabled in the kernel # configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is # enabled by default on mount. See the acl(5) manual # page and http://acl.bestbits.at/ for more information # about acl. noacl POSIX アクセス制御リスト(POSIX ACL) サポートを無効 にします。もし、ACL サポートがカーネル設定 (CONFIG_EXT4_FS_POSIX_ACL) で有効になっている場合、 ACL はマウント時にデフォルトで有効になります。 acl についての詳細は acl(5) のマニュアルページや、 ウェブサイト http://acl.bestbits.at/ を参照ください。 #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 These options are ignored by the filesystem. They #noquota are used only by quota tools to recognize volumes #grpquota where quota should be turned on. See documentation #usrquota in the quota-tools package for more details # (http://sourceforge.net/projects/linuxquota). quota このファイルシステムでは、これらのオプションは無視され noquota ます。これらフラグは Quota を有効にすべき場合に、Quota grpquota ツールでボリュームを認識するためにのみ利用されます。 usrquota 詳しくは quota-tools パッケージ同梱の文書を参照ください。 (http://sourceforge.net/projects/linuxquota). #jqfmt=<quota type> These options tell filesystem details about quota #usrjquota=<file> so that quota information can be properly updated #grpjquota=<file> during journal replay. They replace the above # quota options. See documentation in the quota-tools # package for more details # (http://sourceforge.net/projects/linuxquota). jqfmt=<quota type> これらのオプションはジャーナルリプレイ時に Quota 情報 usrjquota=<file> が正しく更新されるよう、ファイルシステムに Quota の詳 grpjquota=<file> 細を指定するためのものです。これらは上記の quota オプ ションを置き換えます。 詳しくは quota-tools パッケージ同梱の文書を参照ください。 (http://sourceforge.net/projects/linuxquota). #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. stripe=n mballoc がアロケーション単位とアラインに使用しようと するファイルシステムブロック数です。RAID5/6 では、こ の値はデータディスク数と、ファイルシステムブロックの RAID チャンクサイズとの積にすべきです。 #delalloc (*) Defer block allocation until just before ext4 # writes out the block(s) in question. This # allows ext4 to better allocation decisions # more efficiently. #nodelalloc Disable delayed allocation. Blocks are allocated # when the data is copied from userspace to the # page cache, either via the write(2) system call # or when an mmap'ed page which was previously # unallocated is written for the first time. delalloc (*) ext4 が対象ブロックを書き込む直前までブロック割り当 てを遅延させます。これにより、ext4 の割り当て判断が 改善かつ効率化されます。 nodelalloc 遅延割り当てを無効にします。write(2) システムコール、 または未割り当てだった mmap されているページが最初に 書き込まれることによって、データがユーザからページ キャッシュに書き込まれた時点でブロック割り当てが行な われます。 #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 priority) 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 になる」 問題を (同程度に) 回避できます。 #noinit_itable Do not initialize any uninitialized inode table # blocks in the background. This feature may be # used by installation CD's so that the install # process can complete as quickly as possible; the # inode table initialization process would then be # deferred until the next time the file system # is unmounted. noinit_itable 初期化されていない inode テーブルをバックグラウンド で初期化しません。この機能は、インストール CD 等で 可能な限り速くインストールを終了できるようにする際 に用いることができます。inode テーブルの初期化処理は 次にファイルシステムが unmount されるまで延期されます。 #init_itable=n The lazy itable init code will wait n times the # number of milliseconds it took to zero out the # previous block group's inode table. This # minimizes the impact on the system performance # while file system's inode table is being initialized. init_itable=n itable の遅延初期化コードは、前の inode テーブルブロ ックの 0 クリア後、n ミリ秒待って次の初期化を実行しま す。これはファイルシステムの inode テーブルの初期化処 理がシステムの性能に与える影響を最小限に抑えます。 #discard Controls whether ext4 should issue discard/TRIM #nodiscard(*) commands to the underlying block device when # blocks are freed. This is useful for SSD devices # and sparse/thinly-provisioned LUNs, but it is off # by default until sufficient testing has been done. discard ext4 が discard/TRIM コマンドを発行するか否かを制御 nodiscard(*) します。このコマンドはブロック開放時に下位のデバイス に対して発行されます。これは SSD デバイスや、スパー スまたはシンプロビジョニングを用いた LUN で役に立ち ますが、現在十分なテストがなされていないので、標準値 は off になっています。 #nouid32 Disables 32-bit UIDs and GIDs. This is for # interoperability with older kernels which only # store and expect 16-bit values. nouid32 32-bit UID と GID を使わないようにします。これは、 16 bit 値のみを書き込み、利用する古いカーネルとの互 換性のためのものです。 #block_validity This options allows to enables/disables the in-kernel #noblock_validity facility for tracking filesystem metadata blocks # within internal data structures. This allows multi- # block allocator and other routines to quickly locate # extents which might overlap with filesystem metadata # blocks. This option is intended for debugging # purposes and since it negatively affects the # performance, it is off by default. block_validity このオプションは、カーネル内の内部データ構造に組み noblock_validity 込まれたメタデータブロックの追跡機能を、有効/無効に するものです。この追跡機能は、複数ブロックのアロケ ータなどの処理でファイルシステムメタデータブロック と重なる可能性のある領域にあるエクステントを素早く 見つけるためのものです。 このオプションはデバッグ用の目的のもので、性能に負 の影響を与えます。標準ではオフになっています。 #dioread_lock Controls whether or not ext4 should use the DIO read #dioread_nolock locking. If the dioread_nolock option is specified # ext4 will allocate uninitialized extent before buffer # write and convert the extent to initialized after IO # completes. This approach allows ext4 code to avoid # using inode mutex, which improves scalability on high # speed storages. However this does not work with # data journaling and dioread_nolock option will be # ignored with kernel warning. Note that dioread_nolock # code path is only used for extent-based files. # Because of the restrictions this options comprises # it is off by default (e.g. dioread_lock). dioread_lock ext4 が DIO リードロックを使うかどうかを制御します。 dioread_nolock もし dioread_nolock オプションが指定されている場合 は、ext4 はバッファライト前に未初期化状態のエクステ ントを割り当て、IO 終了後にエクステントを初期化状態 に変更します。この手順により、ext4 で inode mutex を使わないで済むようになるため、高速なストレージを 使った場合のシステムの拡張性が向上します。ただし、 この機能はデータジャーナリングと共には使えず、デー タジャーナリングが有効な場合には dioread_nolock オ プションはカーネル警告メッセージを出して無視される ことになります。この dioread_nolock コード処理はエ クステントベースのファイルでのみ用いられることに留 意ください。このオプションに伴う制約のため、標準で はオフ (つまり dioread_lock モード) になっています。 #i_version Enable 64-bit inode version support. This option is # off by default. i_version 64-bit inode バージョンのサポートを有効にします。 このオプションは、標準ではオフになっています。 #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. * ライトバックモード (writeback mode) 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. * オーダードモード (ordered 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. Enabling this mode will disable delayed #allocation and O_DIRECT support. * ジャーナルモード (journal mode) data=journal モードは、データとメタデータの完全なジャーナリングを備えます。 すべての新しいデータは、先にジャーナルに書き込まれ、その後に所定の位置へ書 きこまれます。クラッシュの際、ジャーナルはリプレイされ、データとメタデータ の両方は矛盾の無い状態に回復されます。このモードは通常はもっとも遅いもので すが、ディスクへのデータの読みだしと書き込みを同時に行う必要がある時は、他 のモードより高性能です。このモードを有効にした場合、遅延アロケーションと O_DIRECT サポートは無効になります。 #/proc entries #============= /proc エントリ ============== #Information about mounted ext4 file systems can be found in #/proc/fs/ext4. Each mounted filesystem will have a directory in #/proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or #/proc/fs/ext4/dm-0). The files in each per-device directory are shown #in table below. マウントされている ext4 ファイルシステムの情報は /proc/fs/ext4 から取得で きます。マウントされているファイルシステムの各々に対応した、デバイス名を元 にした名称のディレクトリが /proc/fs/ext4 以下に作成されます (例えば /proc/fs/ext4/hdc や /proc/fs/ext4/dm-0)。各デバイスごとのディレクトリ内の ファイルは以下のテーブルのとおりです。 #Files in /proc/fs/ext4/<devname> /proc/fs/ext4/<devname> のファイル .............................................................................. # File Content # mb_groups details of multiblock allocator buddy cache of free blocks ファイル 内容 mb_groups フリーブロックの buddy キャッシュのマルチブロックアロケ ータの詳細情報 .............................................................................. #/sys entries #============ /sys エントリ ============= #Information about mounted ext4 file systems can be found in #/sys/fs/ext4. Each mounted filesystem will have a directory in #/sys/fs/ext4 based on its device name (i.e., /sys/fs/ext4/hdc or #/sys/fs/ext4/dm-0). The files in each per-device directory are shown #in table below. マウントされた ext4 ファイルシステムの情報は /sys/fs/ext4 から取得できます。 マウントされているファイルシステムの各々に対応して、デバイス名を元にした名 称のディレクトリが /sys/fs/ext4 以下に作成されます (例えば /sys/fs/ext4/hdc や /sys/fs/ext4/dm-0)。各デバイスごとのディレクトリ内の ファイルは以下のテーブルのとおりです。 #Files in /sys/fs/ext4/<devname> #(see also Documentation/ABI/testing/sysfs-fs-ext4) /sys/fs/ext4/<devname> のファイル (Documentation/ABI/testing/sysfs-fs-ext4 も見てください) .............................................................................. # File Content ファイル 内容 # delayed_allocation_blocks This file is read-only and shows the number of # blocks that are dirty in the page cache, but # which do not have their location in the # filesystem allocated yet. delayed_allocation_blocks このファイルはリードオンリーで、ページキャッ シュ内のダーティで、かつファイルシステム内に まだ領域が割り当てられていないページの数を示 します。 # inode_goal Tuning parameter which (if non-zero) controls # the goal inode used by the inode allocator in # preference to all other allocation heuristics. # This is intended for debugging use only, and # should be 0 on production systems. inode_goal チューニングパラメータであり、inode アロケー タで用いる goal inode の挙動を他のアロケーシ ョン戦略に優先して (0 以外の場合に) 制御する ためのものです。 これはデバッグのみで利用することを意図してお り、通常運用時は 0 にしておくべきです。 # inode_readahead_blks Tuning parameter which controls the maximum # number of inode table blocks that ext4's inode # table readahead algorithm will pre-read into # the buffer cache inode_readahead_blks チューニングパラメータであり、ext4 の inode テーブル先読みアルゴリズムがバッファキャッシ ュに先読みする inode テーブルのブロック数を 指定します。 # lifetime_write_kbytes This file is read-only and shows the number of # kilobytes of data that have been written to this # filesystem since it was created. lifetime_write_kbytes このファイルはリードオンリーで、作成されてか ら以降このファイルシステムに書きこまれたデータを キロバイト単位で示します。 # max_writeback_mb_bump The maximum number of megabytes the writeback # code will try to write out before move on to # another inode. max_writeback_mb_bump ライトバックコードが次の inode に進む前に書 きこみを試みるサイズの最大値をメガバイト単位 で指定します。 # mb_group_prealloc The multiblock allocator will round up allocation # requests to a multiple of this tuning parameter if # the stripe size is not set in the ext4 superblock mb_group_prealloc マルチブロックアロケータは、ext4 スーパーブ ロック内にストライプサイズが指定されていない 場合、アロケーション要求をこのチューニングパ ラメータの整数倍に切り上げます。 # mb_max_to_scan The maximum number of extents the multiblock # allocator will search to find the best extent mb_max_to_scan マルチブロックアロケータが最適なエクステント を探す際に探索するエクステントの最大値を指定 します。 # mb_min_to_scan The minimum number of extents the multiblock # allocator will search to find the best extent mb_min_to_scan マルチブロックアロケータが最適なエクステント を探す際に探索するエクステントの最小値を指定 します。 # mb_order2_req Tuning parameter which controls the minimum size # for requests (as a power of 2) where the buddy # cache is used mb_order2_req buddy キャッシュ使用時にリクエストの最小サイ ズを 2 のべき乗で指定するチューニングパラメー タです。 # mb_stats Controls whether the multiblock allocator should # collect statistics, which are shown during the # unmount. 1 means to collect statistics, 0 means # not to collect statistics mb_stats マルチブロックアロケータが unmount 時に表示す るための統計情報を集めるか否かを制御します。 1 は統計情報を集めることを、0 は集めないこと を意味します。 # mb_stream_req Files which have fewer blocks than this tunable # parameter will have their blocks allocated out # of a block group specific preallocation pool, so # that small files are packed closely together. # Each large file will have its blocks allocated # out of its own unique preallocation pool. mb_stream_req これはチューニングパラメータであり、このパラ メータ以下のブロック数の割り当ての場合には、 ブロックグループ別の事前割り当てプールからブ ロックを割り当てるようにし、小さいファイルが 近くにパックされて集められるようにします。 大きなファイルは、大きなファイル用の事前割り 当てプールからブロックが割り当てられます。 # session_write_kbytes This file is read-only and shows the number of # kilobytes of data that have been written to this # filesystem since it was mounted. session_write_kbytes このファイルはリードオンリーで、マウントされ てからファイルシステムに書きこまれたデータを キロバイト単位で示します。 .............................................................................. Ioctls ====== #There is some Ext4 specific functionality which can be accessed by applications #through the system call interfaces. The list of all Ext4 specific ioctls are #shown in the table below. システムコールインターフェースによりアプリケーションからアクセス可能な ext4 固有の機能がいくつかあります。ext4 固有の ioctl の一覧を以下の表に示します。 #Table of Ext4 specific ioctls ext4 固有の ioctl の表 .............................................................................. # Ioctl Description Ioctl 説明 # EXT4_IOC_GETFLAGS Get additional attributes associated with inode. # The ioctl argument is an integer bitfield, with # bit values described in ext4.h. This ioctl is an # alias for FS_IOC_GETFLAGS. EXT4_IOC_GETFLAGS inode に関係する追加アトリビュートを取得します。 この ioctl の引数はビットフィールドで、各 bit の意味は ext4.h に記載されています。この ioctl は FS_IOC_GETFLAG の別名になります。 # EXT4_IOC_SETFLAGS Set additional attributes associated with inode. # The ioctl argument is an integer bitfield, with # bit values described in ext4.h. This ioctl is an # alias for FS_IOC_SETFLAGS. EXT4_IOC_SETFLAGS inode に関係する追加アトリビュートを設定します。 この ioctl の引数はビットフィールドで、各 bit の意味は ext4.h に記載されています。この ioctl は FS_IOC_SETFLAG の別名になります。 EXT4_IOC_GETVERSION EXT4_IOC_GETVERSION_OLD # Get the inode i_generation number stored for # each inode. The i_generation number is normally # changed only when new inode is created and it is # particularly useful for network filesystems. The # '_OLD' version of this ioctl is an alias for # FS_IOC_GETVERSION. 各 inode に格納されている inode の i_generation 番号を取得します。i_generation 番号は通常新しい inode が作成される場合にのみ 変更され、ネットワークファイルシステムで特に有用です。 _OLD の付く版の ioctl は FS_IOC_GETVERSION の 別名です。 EXT4_IOC_SETVERSION EXT4_IOC_SETVERSION_OLD # Set the inode i_generation number stored for # each inode. The '_OLD' version of this ioctl # is an alias for FS_IOC_SETVERSION. 各 inode に格納されている inode の i_generation 番号を設定します。 _OLD の付く版の ioctl は FS_IOC_SETVERSION の 別名です。 # EXT4_IOC_GROUP_EXTEND This ioctl has the same purpose as the resize # mount option. It allows to resize filesystem # to the end of the last existing block group, # further resize has to be done with resize2fs, # either online, or offline. The argument points # to the unsigned logn number representing the # filesystem new block count. EXT4_IOC_GROUP_EXTEND この ioctl は resize mount オプションと同じ目 的を持ちます。これにより、最終の使用済みのブ ロックグループへのリサイズが可能になります。 これ以上のリサイズは、resize2fsを用いて行う必 要があります。引数はファイルシステムの新しい ブロック数を示す無符号 long 型整数を指します。 # EXT4_IOC_MOVE_EXT Move the block extents from orig_fd (the one # this ioctl is pointing to) to the donor_fd (the # one specified in move_extent structure passed # as an argument to this ioctl). Then, exchange # inode metadata between orig_fd and donor_fd. # This is especially useful for online # defragmentation, because the allocator has the # opportunity to allocate moved blocks better, # ideally into one contiguous extent. EXT4_IOC_MOVE_EXT orig_fd (ioctl の指す位置) のブロックエクステ ントを doner_fd (ioctl への引数として与えられ る move_extent 構造体で指定された位置) に移動 し、orig_fd と doner_fd の inode メタデータを 交換します。この機能は、移動されるブロックの割 り当てを改善できる (例えばひとつの隣接するエク ステントに割り当てられれば理想的です) 可能性が あるため、特にオンラインデフラグで便利です。 # EXT4_IOC_GROUP_ADD Add a new group descriptor to an existing or # new group descriptor block. The new group # descriptor is described by ext4_new_group_input # structure, which is passed as an argument to # this ioctl. This is especially useful in # conjunction with EXT4_IOC_GROUP_EXTEND, # which allows online resize of the filesystem # to the end of the last existing block group. # Those two ioctls combined is used in userspace # online resize tool (e.g. resize2fs). EXT4_IOC_GROUP_ADD 既存または新規のグループディスクリプタブロック に新しいグループディスクリプタを追加します。新 しいグループディスクリプタは、この ioctl の引 数として渡される ext4_new_group_input 構造体に 記載されます。 この機能は最終の使用済みのブロックグループへの ファイルシステムのオンラインリサイズを行う EXT4_IOC_GROUP_EXTEND 機能と組み合わせて使うと 便利です。この 2 つの ioctl はユーザ空間オンラ インリサイズツール (つまり resize2fs) で組み合 わせて使われています。 # EXT4_IOC_MIGRATE This ioctl operates on the filesystem itself. # It converts (migrates) ext3 indirect block mapped # inode to ext4 extent mapped inode by walking # through indirect block mapping of the original # inode and converting contiguous block ranges # into ext4 extents of the temporary inode. Then, # inodes are swapped. This ioctl might help, when # migrating from ext3 to ext4 filesystem, however # suggestion is to create fresh ext4 filesystem # and copy data from the backup. Note, that # filesystem has to support extents for this ioctl # to work. EXT4_IOC_MIGRATE この ioctl はファイルシステム自体を操作します。 これは、ext3 の間接ブロックマップされた inode を ext4 のエクステントマップされた inode に、 元の inode の間接ブロックマップを手繰って隣接 ブロック範囲に変換して更に一時 inode の ext4 エクステントに変換、そのあと inode を交換する ことにより変換して移行します。この機能は ext3 から ext4 ファイルシステムへの移行時に利用可能 ですが、ext4 ファイルシステムを新規に作ってそ こにバックアップからデータをコピーする方がより 良いやり方です。この ioctl の動作のためにはフ ァイルシステムがエクステントをサポートしている 必要があることに留意ください。 # EXT4_IOC_ALLOC_DA_BLKS Force all of the delay allocated blocks to be # allocated to preserve application-expected ext3 # behaviour. Note that this will also start # triggering a write of the data blocks, but this # behaviour may change in the future as it is # not necessary and has been done this way only # for sake of simplicity. EXT4_IOC_ALLOC_DA_BLKS 遅延割り当て対象のブロックを強制的に全て割り当 てることにより、アプリケーションから見て ext3 の挙動と同じになるようにします。この機能により 現在の実装ではデータブロックの書き込みが始まる ことに注意してください。ただし、この振る舞いは 必要なものではなく、単純化のためにおこなわれて いるものであるため、将来変更される可能性はあり ます。 # EXT4_IOC_RESIZE_FS Resize the filesystem to a new size. The number # of blocks of resized filesystem is passed in via # 64 bit integer argument. The kernel allocates # bitmaps and inode table, the userspace tool thus # just passes the new number of blocks. EXT4_IOC_RESIZE_FS ファイルシステムを新しいサイズにリサイズしま す。リサイズ後のファイルシステムのブロック数 が 64-bit 整数値の引数として渡されます。カー ネルがビットマップと inode テーブルを割り当て るため、ユーザ空間のツールは新しいブロックの 数を単に渡すだけです。 .............................................................................. #References #========== 参考資料 ======== #kernel source: <file:fs/ext4/> # <file:fs/jbd2/> カーネルソース: <file:fs/ext4/> <file:fs/jbd2/> #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
お名前 | hmatrjp (2011-02-04 08:09:45 ICT) |
コメント | ext4 を最高のベンチマーク結果となるようにチューニングする場合 原文では ext3 になっているところを、 <!-- ext3 と書かれているのはどう見ても誤記なので、訳文では修正 --> されているようですが、ここは ext3, ext4 両方に当てはまる── ext4 にしてしまうのが 正しいとは限らない──のでは? 原文の著者に当たってみないとはっきりしませんが、 比較対象としての ext3 の設定について、書いている可能性もあるかと思いました。 |
お名前 | yasikoba (2009-06-20 18:43:31 JST) |
コメント | ご指摘ありがとうございます。 |
お名前 | anonymous (2009-05-08 01:36:54 JST) |
コメント | data=writeback モードのとき、ext3 はデータを全くジャーナルしません。 ↓ data=writeback モードのとき、ext4 はデータを全くジャーナルしません。 以後、ext4がext3になっている箇所が2つあります。 訳に立つリンク ↓ 役に立つリンク |
コメントが長くなった場合は、jf@listserv.linux.or.jp にお寄せください。