第5章 ext4 ファイルシステム
ext4 ファイルシステムは、ext3 ファイルシステムの拡張性を高めたファイルシステムです。Red Hat Enterprise Linux 7 では、最大 16 テラバイトのファイルシステムしかサポートしていなかった Red Hat Enterprise Linux 6 とは異なり、最大 16 テラバイトの個別のファイルサイズと、最大 50 テラバイトのファイルシステムをサポートすることができます。また、サブディレクトリーの数を無制限にサポートします (ext3 ファイルシステムは最大 32,000 までしかサポートしません)。ただし、リンク数が 65,000 を超えると 1 にリセットされ、増加しなくなります。bigalloc 機能は現在サポートされていません。
注記
ext3 と同様に、fsck を実行するには、ext4 ボリュームをアンマウントする必要があります。詳細は、4章Ext3 ファイルシステム。 を参照してください。
- 主な特長
- ext4 ファイルシステムはエクステントを使用します (ext2 および ext3 で使用される従来のブロックマッピングスキームとは異なります)。これにより、大きなファイルを使用する際のパフォーマンスが向上し、大きなファイルのメタデータオーバーヘッドが低減します。また、ext4 では、未使用のブロックグループと inode テーブルのセクションにそれぞれラベル付けが行なわれます。これにより、ファイルシステムの検査時にこれらを省略することができます。また、ファイルシステムの検査速度が上がるため、ファイルシステムが大きくなるほどその便宜性は顕著になります。
- 割り当て機能
- Ext4 ファイルシステムには、以下のような割り当てスキームが備わっています。
- 永続的な事前割り当て
- 遅延割り当て
- マルチブロック割り当て
- ストライプ認識割り当て
遅延割り当てや他のパフォーマンスが最適化されるため、ext4 のディスクへのファイル書き込み動作は ext3 の場合とは異なります。ext4 では、プログラムがファイルシステムに書き込むと、プログラムが後で fsync () 呼び出しを発行しない限り、ディスク上のディスク上の保証はありません。デフォルトでは、ext3 は、fsync ()を使用せずに、新規作成されたファイルをほぼ即時にディスクに強制し ます。この動作により、書き込まれたデータがオンディスクにあることを確認するために fsync () を使用しないプログラムのバグが妨げられました。一方、ext4 ファイルシステムは、ディスクへの変更書き込みの前に数秒間待機することが多く、書き込みを結合して再度順序付けを行うことにより、ext3 を上回るディスクパフォーマンスを実現しています。警告ext3 とは異なり、ext4 ファイルシステムでは、トランザクションコミット時にディスクへのデータの書き込みを強制しません。このため、バッファーされた書き込みがディスクにフラッシュされるまでに時間がかかります。ファイルシステムと同様に、fsync () などのデータの整合性呼び出しを使用して、データが永続ストレージに書き込まれるようにします。 - Ext4 のその他の機能
- ext4 ファイルシステムでは次の機能にも対応しています。
- 拡張属性 (
xattr
): これにより、システムはファイルごとに追加の名前と値のペアを関連付けることができます。 - Quota journaling: クラッシュ後に行なわれる時間がかかるクォータの整合性チェックが不要になります。注記ext4 で対応しているジャーナリングモードは data=ordered (デフォルト)のみです。
- サブセカンド (一秒未満) のタイムスタンプ - サブセカンドのタイムスタンプを指定します。
5.1. Ext4 ファイルシステムの作成
- ext4 ファイルシステムを作成するには、以下のコマンドを使用します。
#
mkfs.ext4 block_device- block_device をブロックデバイスへのパスに置き換えます。たとえば、
/dev/sdb1
、/dev/disk/by-uuid/05e99ec8-def1-4a5e-8a9d-5945339ceb2a
、または/dev/my-volgroup/my-lv
です。 - 一般的な用途では、デフォルトのオプションが最適です。
例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
重要
tune2fs を使用して、ext3 ファイルシステムで特定の ext4 機能を有効にすることができます。ただし、この方法で tune2fs を使用することは完全にはテストされてい ない ため、Red Hat Enterprise Linux 7 ではサポートされません。その結果、Red Hat は tune2fs を使用して変換またはマウントされた ext3 ファイルシステムの一貫したパフォーマンスと予測可能な動作を保証できません。
ストライプ化ブロックデバイス
ストライプ化されたブロックデバイス (RAID5 アレイなど) の場合は、ファイルシステムの作成時にストライプジオメトリーを指定できます。適切なストライプ配列を使用することで、ext4 ファイルシステムのパフォーマンスが大幅に改善されます。
LVM ボリュームまたは MD ボリューム上にファイルシステムを作成する場合、mkfs.ext4 は最適なジオメトリーを選択します。オペレーティングシステムに配列情報をエクスポートするハードウェア RAID の中にも、こうした最適な配列を選択するものがあります。
ストライプジオメトリーを指定するには、以下のサブオプションを指定して mkfs.ext4 (拡張ファイルシステムオプション)の -E オプションを使用します。
- stride=value
- RAID チャンクサイズを指定します。
- stripe-width=value
- RAID デバイス内のデータディスク数、または 1 ストライプ内のストライプユニット数を指定します。
両方のサブオプションについて、値 はファイルシステムブロック単位で指定する必要があります。たとえば、4k ブロックのファイルシステムで、64k ストライド (16 x 4096) のファイルシステムを作成する場合は、次のコマンドを使用します。
#
mkfs.ext4 -E stride=16,stripe-width=64 /dev/block_device
UUID の設定
また、ファイルシステムに特定の UUID を設定することもできます。ファイルシステムの作成時に UUID を指定するには、
-U
オプションを使用します。
#
mkfs.ext4 -U UUID device
- UUID は、設定する UUID に置き換えます(例:
7cd65de3-e0be-41d9-b66d-96d749c02da7
)。 - device を、ext4 ファイルシステムへのパスに置き換え、UUID を追加します(例:
/dev/sda8
)。
既存のファイルシステムの UUID を変更するには、「永続的な命名属性の変更」 を参照してください。
関連情報
ext4 ファイルシステムの作成に関する詳細は、以下を参照してください。
- mkfs.ext4(8) の man ページ