Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

ext4 ファイルシステムは、ext3 ファイルシステムに拡張を加えたファイルシステムです。 Red Hat Enterprise Linux 7 では、ファイルサイズが最大 16 テラバイトまでサポートされます。また、Red Hat Enterprise Linux 6 でサポートされるファイルシステムは最大 16 テラバイトでしたが、Red Hat Enterprise Linux 7 では最大 50 テラバイトになりました。サポートされるサブディレクトリーの数は無制限 (ext3 ファイルシステムの場合は最大 32,000 までの対応) ですが、リンク数が 65,000 を超えると 1 にリセットされ、増加しなくなります。bigalloc 機能は現在サポートされていません。

注記

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

警告

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

    注記

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

5.1. ext4 ファイルシステムの作成

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

例5.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
ストライプ化されたブロックデバイス (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 機能を有効にすることができます。ただし、この方法で tune2fs を使用することは十分にテストされていないため、Red Hat Enterprise Linux 7 ではサポート対象外となります。したがって、Red Hat は、tune2fs で変換またはマウントした ext3 ファイルシステムに関しては、一貫性のあるパフォーマンスや、予測可能な動作を保証していません。
特定の UUID をファイルシステムに追加することもできます。詳細については、「Ext3 ファイルシステムの作成」 を参照してください。