第6章 Ext4 ファイルシステム

ext4 ファイルシステムは ext3 ファイルシステムを拡張性のあるエクステンションにしたものです。ext4 は Red Hat Enterprise Linux 5 ではデフォルトのファイルシステムでした。さらに、Red Hat Enterprise Linux 6 でもデフォルトのファイルシステムとなり、最大 16 テラバイトのファイルおよびファイルシステムのサイズに対応します。また、サブディレクトリー数は無制限に対応することができます (ext3 ファイルシステムの場合は最大 32,000 まで対応)。ただし、リンク数が 65,000 を超えると 1 にリセットされ増加しなくなります。

注記

ext3 と同様、fsck を実行する場合には ext4 ボリュームもアンマウントしなければなりません。詳細については 5章Ext3 ファイルシステム をご覧ください。
主な特長
ext4 はエクステントを使用し (ext2 および ext3 で使用された従来のブロックマッピングスキームとの対比)、サイズの大きいファイルを使用する場合のパフォーマンスが向上されているため、そのメタデータのオーバーヘッドが減少します。また、ext4 では未使用のブロックグループと inode テーブルのセクションにそれぞれラベル付けが行なわれます。これにより、ファイルシステムのチェック時にこれらを省略することができます。また、ファイルシステムチェックの速度が上がり、ファイルシステムが大きくなるほど便宜性は顕著になります。
割り当て機能
ext4 ファイルシステムには以下のような割り当てスキームが備わっています。
  • 永続的な事前割り当て
  • 遅延割り当て
  • マルチブロック割り当て
  • ストライプ認識割り当て
遅延割り当ておよび他のパフォーマンス最適化のため、ext4 のディスクへのファイル書き込み動作が ext3 の場合とは異なります。ext4 では、プログラムがファイルシステムへの書き込みを実行しても、fsync() コールを発行しない限り、その書き込みがオンディスクになる保証はありません。
ext3 では、fsync() の呼び出しがなくてもファイルが新たに作成されるとそのほぼ直後にデフォルトでディスクに書き込みが強制されます。この動作により、書き込まれたデータがオンディスクにあることを fsync() 使って確認しないというプログラムのバグが表面化しませんでした。一方、ext4 ファイルシステムはディスクへの変更書き込みの前に数秒間待機することが多く、書き込みを結合して再度順序付けを行うことにより ext3 を上回るディスクパフォーマンスを実現しています。

警告

ext3 とは異なり、ext4 ファイルシステムではトランザクションコミット時にディスクへのデータの書き込みを強制しません。このため、バッファーされた書き込みがディスクにフラッシュされるまでに時間がかかります。他のファイルシステムと同様、永続的なストレージにデータが書き込まれたことを確認するには、fsync() などのデータ整合性チェックの呼び出しを使用してください。
ext4 のその他の機能
ext4 ファイルシステムでは次の機能にも対応しています。
  • 拡張属性 (xattr) — システムで、ファイルごとにいくつかの追加の名前と値のペアを関連付けられるようになります。
  • クォータジャーナリング機能 — クラッシュ発生後の時間のかかるクォータ整合性チェックが不要になります。

    注記

    ext4 で対応しているジャーナリングモードは data=ordered のみです (デフォルト)。
  • サブセカンドのタイムスタンプ — サブセカンドのタイムスタンプを指定します。

6.1. ext4 ファイルシステムを作成する

ext4 ファイルシステムを作成するには、mkfs.ext4 コマンドを使用します。一般的にはデフォルトのオプションがほとんどの場面での最適な設定になります。
# mkfs.ext4 /dev/device
以下にこのコマンドのサンプル出力を示します。ファイルシステムの配列や機能が出力結果として表示されます。

例6.1 mkfs.ext4 コマンドの出力

~]# mkfs.ext4 /dev/sdb1 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
245280 inodes, 979456 blocks
48972 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1006632960
30 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
ストライプ化されたブロックデバイスの場合 (RAID5 アレイ)、ファイルシステムを作成する際にストライプの配列を指定することができます。適切なストライプ配列を使用することで ext4 ファイルシステムのパフォーマンスが大幅に強化されます。
LVM ボリュームや MD ボリューム上にファイルシステムを作成する場合、mkfs.ext4 によって最適な配列が選択されます。オペレーティングシステムに配列情報をエクスポートするハードウェア RAID の中にもこうした最適な配列を選択するものがあります。
ストライプ配列を指定する場合は、mkfs.ext4-E オプション (拡張されたファイルシステムのオプション) に次のようなサブオプションを付けて使用します。
stride=value
RAID のチャンクサイズを指定します。
stripe-width=value
1 RAID デバイス内のデータディスク数または 1 ストライプ内のストライプユニット数を指定します。
いずれのサブオプションの場合も value はファイルシステムのブロック単位で指定しなければなりません。たとえば、4k のブロックファイルシステムの 64k ストライプ (16 x 4096) の場合は以下のコマンドを使用します。
# mkfs.ext4 -E stride=16,stripe-width=64 /dev/device
ファイルシステムの作成方法については man mkfs.ext4 を参照してください。

重要

tune2fs を使用すると ext3 ファイルシステム上で ext4 の機能のいくつかを有効にし、ext3 ファイルシステムのマウントに ext4 のドライバーを使うことができます。ただし、これらの操作は十分なテストを行なわれておらず Red Hat Enterprise Linux 6 ではこの使用を サポートしていません。このため、この方法で変換またはマウントした ext3 ファイルシステムの一貫したパフォーマンスや予測可能な動作については保証できません。