Linux ext4とは?特徴・他ファイルシステム比較・作成(mkfs.ext4)から運用コマンドまで解説

コマンドリファレンス実務レシピ

ext4(Fourth Extended Filesystem)は、Linuxで最も広く利用されている標準的なファイルシステムです。Ubuntu、Debian、Red Hat Enterprise Linux(RHEL)、CentOSなどの主要ディストリビューションで長年デフォルト採用されており、高い信頼性と安定性を備えています。

新しいストレージの追加やVPS・クラウドサーバーの環境構築において、ディスクをフォーマットする際やマウント設定を行う際に必ず登場します。本記事では、ext4の基本概念や特徴、他のファイルシステム(ext3, XFS, Btrfs, FAT32/exFAT)との比較から、mkfs.ext4 を使った作成・フォーマット手順、tune2fs / resize2fs / e2fsck などの運用・保守コマンドまで、初心者にも分かりやすく徹底解説します。

  1. ext4とは|Linux標準ファイルシステムの基本と特徴
    1. 1. ジャーナリング(Journaling)による高い信頼性
    2. 2. 大容量ファイル・ボリュームへの対応
    3. 3. エクステント(Extents)割り当てによるI/O高速化
    4. 4. 遅延割り当て(Delayed Allocation / delalloc)
  2. 他のファイルシステムとの比較|ext3・XFS・Btrfs・FAT32/NTFS
    1. ext3 と ext4 の違い
    2. XFS と ext4 の違い
    3. Btrfs / ZFS と ext4 の違い
    4. FAT32 / exFAT / NTFS と ext4 の違い
  3. ext4ファイルシステムの作成とフォーマット手順|mkfs.ext4
    1. 手順1: 対象ディスク・パーティションの確認
    2. 手順2: mkfs.ext4 コマンドでフォーマット
    3. ラベルを指定してフォーマットする場合(-L オプション)
  4. ext4の確認・運用・保守コマンド5選
    1. 1. tune2fs / dumpe2fs で詳細情報を確認・変更
    2. 2. マウントと自動マウント設定(mount / /etc/fstab)
    3. 3. 容量とInode(インデックス)の使用状況確認(df -h / df -i)
    4. 4. ファイルシステムの整合性チェックと修復(e2fsck / fsck.ext4)
    5. 5. オンライン容量拡張(resize2fs)
  5. トラブルシューティングと運用の落とし穴
    1. 1. 空き容量(GB)はあるのにファイルが作成できない(Inode枯渇)
    2. 2. アンマウントせずに e2fsck を実行してしまう事故
    3. 3. ディスクエラー発生時の自動リードオンリー(errors=remount-ro)
    4. 4. Windowsでext4フォーマットのディスクを読み書きしたい場合
  6. 関連コマンド一覧
  7. よくある質問(FAQ)
    1. ext4のフォーマットを実行すると既存データはすべて消えますか?
    2. ext4パーティションの容量を安全に縮小できますか?
    3. ext4からXFSへ直接変換(コンバート)することは可能ですか?
    4. ext4とXFSはどちらを選べばよいですか?
  8. まとめ
  9. 関連記事

ext4とは|Linux標準ファイルシステムの基本と特徴

ext4は、2008年にLinuxカーネル 2.6.28 で正式リリースされたファイルシステムです。前身であるext3の後継として開発され、拡張性・大容量対応・処理速度・データ保護機能が大幅に強化されました。

1. ジャーナリング(Journaling)による高い信頼性

ext4はジャーナリング機能を備えています。ジャーナリングとは、実際のディスクへデータを書き込む前に、変更予定のメタデータや内容を「ジャーナル(ログ領域)」に記録する仕組みです。万が一、書き込み中に突然の停電やサーバークラッシュが発生しても、再起動時にジャーナルを参照することで短時間で整合性をチェック・復旧でき、ファイルシステムの破損を防ぎます。

2. 大容量ファイル・ボリュームへの対応

ext3ではファイルサイズやボリューム容量に制限がありましたが、ext4では以下のような大容量ストレージに対応しています。

項目ext3 の上限ext4 の上限
最大単一ファイルサイズ2 TiB16 TiB
最大ボリューム(容量)16 TiB1 EiB(エクサバイト)
1ディレクトリ内のサブディレクトリ数32,00064,000以上(unlimited)

3. エクステント(Extents)割り当てによるI/O高速化

ext3までは、ファイルがディスク上のどのブロックに保存されているかを個別ブロック指定で管理していました。ext4ではエクステント(Extents)構造が導入され、「連続するブロック群の開始位置と長さ」をまとめて管理します。これにより、大きなファイルの管理メタデータ量が削減され、読み書き性能の向上とファイルの断片化(フラグメンテーション)防止が実現されました。

4. 遅延割り当て(Delayed Allocation / delalloc)

データを即座にディスクブロックへ割り当てるのではなく、メモリ(ページキャッシュ)から実際のディスクへ書き出す直前までブロック割り当てを遅らせる機能です。まとめて最適な連続領域を確保できるため、断片化を強力に抑制します。

他のファイルシステムとの比較|ext3・XFS・Btrfs・FAT32/NTFS

Linux環境やマルチOS環境では、用途に応じて様々なファイルシステムが使い分けられます。代表的なファイルシステムとext4の違いを整理しました。

ext3 と ext4 の違い

ext4はext3と高い互換性を維持しつつ、エクステント導入や大容量対応、ナノ秒単位のタイムスタンプ対応、e2fsck の高速化など全般的な性能向上を果たしています。特別な理由がない限り、新規構築でext3を選択するメリットはありません。

XFS と ext4 の違い

XFSはRHEL 7以降のデフォルトファイルシステムです。並列I/O性能が高く、超大規模ファイルシステム(数TB〜PB規模)や高負荷データベースで威力を発揮します。一方、ext4は汎用性が高く、パーティションの縮小(オンライン/オフライン)に対応している点がXFSと異なります(※XFSは拡張のみ可能で縮小不可)。

Btrfs / ZFS と ext4 の違い

BtrfsやZFSはCopy-on-Write(CoW)を採用しており、瞬時にバックアップが取れる「スナップショット機能」やサブボリューム管理、RAID統合機能を備えています。高度なストレージ管理が不要でシンプルさや実績を最重視する場合はext4が適しています。

FAT32 / exFAT / NTFS と ext4 の違い

FAT32、exFAT、NTFSは主にWindowsやmacOSとの互換性のために使われるファイルシステムです。ext4はLinux固有のパーミッション(所有者・グループ・権限)を保持できますが、WindowsやMacに直接接続しても標準では読み書きできません。

ファイルシステムジャーナリングLinuxパーミッション縮小リサイズ主な用途・適した場面
ext4Linux汎用サーバー、Ubuntu、一般Linuxシステム
XFS×(不可)RHEL/CentOS、大容量ストレージ、並列I/O重視
Btrfs○ (CoW)スナップショットやNAS運用、最新Linux環境
exFAT / NTFS△ / ○×Windows共用USBメモリ、外付けHDD

ext4ファイルシステムの作成とフォーマット手順|mkfs.ext4

新しいストレージ(追加ディスクやUSBドライブ)をLinuxに接続し、ext4でフォーマットして使用可能にするまでの基本手順を解説します。

注意: フォーマットを行うと、指定したパーティション内の既存データはすべて消去されます。対象のデバイス名を誤らないよう慎重に確認してください。

手順1: 対象ディスク・パーティションの確認

まず lsblk コマンドで接続されているブロックデバイスを確認します。

lsblk -f
NAME   FSTYPE TABLE TYPE MOUNTPOINTS
sda                 disk 
├─sda1 ext4   dos   part /
sdb                 disk 
└─sdb1              part 

上記例では、追加ディスク /dev/sdb 内のパーティション /dev/sdb1 にまだ FSTYPE が設定されていないことが分かります。

手順2: mkfs.ext4 コマンドでフォーマット

mkfs.ext4 コマンド(または mkfs -t ext4)を使用して対象パーティションをフォーマットします。

sudo mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

ラベルを指定してフォーマットする場合(-L オプション)

ボリュームラベルをあらかじめ付与したい場合は -L オプションを指定します。

sudo mkfs.ext4 -L "DataDisk" /dev/sdb1

ext4の確認・運用・保守コマンド5選

ext4の作成後に日常運用やトラブルシューティングで使用する重要な5つのコマンドを解説します。

1. tune2fs / dumpe2fs で詳細情報を確認・変更

tune2fs はext2/ext3/ext4ファイルシステムのパラメータを確認・変更できるコマンドです。-l オプションでスーパーブロックの情報を参照できます。

# ファイルシステム情報の表示
sudo tune2fs -l /dev/sdb1

# ボリュームラベルの変更
sudo tune2fs -L "BackupStorage" /dev/sdb1

# エラー発生時の挙動を「リードオンリーで再マウント」に設定
sudo tune2fs -e remount-ro /dev/sdb1

また、dumpe2fs -h /dev/sdb1 でも同様にヘッダー情報をすばやく確認可能です。

2. マウントと自動マウント設定(mount / /etc/fstab)

作成したext4パーティションを利用するには、ディレクトリにマウントします。

# マウントポイントを作成して手動マウント
sudo mkdir -p /mnt/data
sudo mount -t ext4 /dev/sdb1 /mnt/data

手動マウントの詳しい使い方は mount コマンドの使い方解説 を参照してください。

サーバー再起動後も自動でマウントさせるには、/etc/fstab に記述します。UUIDを blkid で確認し、以下のように追加します。

# /etc/fstab の記述例
UUID=9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d  /mnt/data  ext4  defaults  0  2

安全なfstabの編集手順については fstab の書き方と自動マウント設定 で詳しく説明しています。

3. 容量とInode(インデックス)の使用状況確認(df -h / df -i)

ディスク容量の確認には df コマンドを使用します。

# 容量の確認(人間が読みやすい単位 -h)
df -h /mnt/data

# Inode(インデックス節)使用量の確認(-i)
df -i /mnt/data

詳細な実行例は df コマンドの使い方とディスク容量確認 をあわせてご確認ください。

4. ファイルシステムの整合性チェックと修復(e2fsck / fsck.ext4)

ファイルシステムの不整合やエラーをチェック・修復するには e2fsck(または fsck.ext4)を使用します。

# 必ず事前にアンマウントする
sudo umount /mnt/data

# 強制チェック実行(-f)
sudo e2fsck -f /dev/sdb1

# 自動修復付きチェック(-p)
sudo e2fsck -pv /dev/sdb1

重要: マウント中のファイルシステムに対して e2fsck を実行すると、データを重大に破損させる危険があります。必ず umount を完了させてから実行してください。

5. オンライン容量拡張(resize2fs)

クラウドやLVM環境でディスクパーティションを拡大した際、ext4ファイルシステム側も拡張する必要があります。resize2fs を使うと、マウントしたままオンラインで拡張が可能です。

# パーティション拡張後、ファイルシステムを最大サイズへ拡張
sudo resize2fs /dev/sdb1

トラブルシューティングと運用の落とし穴

ext4の運用現場で頻出するトラブルと解決策を整理しました。

1. 空き容量(GB)はあるのにファイルが作成できない(Inode枯渇)

ext4ではフォーマット時にInode(ファイル管理領域)の総数が固定作成されます。大量の小さなファイル(セッションファイルやログなど)を作成すると、ディスク容量(バイト数)が余っていてもInodeが100%になり、「No space left on device」エラーが発生します。

対処法として df -i でInode使用量を確認し、不要な大量小ファイルを削除するか、フォーマット時に mkfs.ext4 -N <inode数> または -i <bytes-per-inode> でInode数を増やして再作成します。

2. アンマウントせずに e2fsck を実行してしまう事故

マウント中に e2fsckfsck を叩くと、カーネルの書き込みとチェック処理が干渉し、ファイル構造が破壊されます。整合性チェックの際は、対象がアンマウント状態であることを lsblkfindmnt で必ずダブルチェックしてください。

3. ディスクエラー発生時の自動リードオンリー(errors=remount-ro)

I/Oエラーやファイルシステム破損が検知されると、ext4はデータ破壊の拡大を防ぐために自動的に読み込み専用(Read-Only)に切り替わります(/etc/fstab のデフォルト挙動)。この現象が発生した場合は、速やかにサービスを停止・アンマウントし、e2fsck による修理またはストレージハードウェアの調査を行ってください。

4. Windowsでext4フォーマットのディスクを読み書きしたい場合

ext4はLinux標準形式のため、Windowsからは直接認識できません。WSL 2環境を利用している場合、wsl --mount コマンドを使ってWindowsからLinux上のext4物理ドライブへ直接アクセスできます。WSL環境の構築手順については WSL 2 入門ガイド をご覧ください。

関連コマンド一覧

コマンド概要・主な役割
mkfs.ext4ext4ファイルシステムの作成(フォーマット)
tune2fsext4のスーパーブロック情報表示・設定変更(ラベル設定、エラー挙動など)
dumpe2fsext4ファイルシステムの詳細ヘッダー・ブロックグループ情報表示
resize2fsext4ファイルシステムの容量拡大・縮小(オンライン拡大対応)
e2fsck / fsck.ext4ext4ファイルシステムの整合性チェックおよび修復(※要アンマウント)
e2labelext4のボリュームラベル表示・設定
mount / umountファイルシステムのマウント/アンマウント
dfディスク容量(df -h)およびInode使用量(df -i)の確認

よくある質問(FAQ)

ext4のフォーマットを実行すると既存データはすべて消えますか?

はい。mkfs.ext4 を実行すると対象パーティションの管理情報とデータ領域が初期化されるため、データは消去されます。実行前にバックアップを取り、対象デバイス名を必ず確認してください。

ext4パーティションの容量を安全に縮小できますか?

可能です。ただし、拡大(オンライン対応)とは異なり、縮小は必ずアンマウント(オフライン)状態で実行する必要があります。先に e2fsck -f でエラーがないか確認した上で resize2fs /dev/sdX1 50G のようにサイズを指定し、その後にパーティションサイズを変更します。

ext4からXFSへ直接変換(コンバート)することは可能ですか?

インプレース(データの入った状態)での直接変換はできません。データを一度別ストレージへバックアップし、mkfs.xfs でフォーマットし直してからデータを書き戻す必要があります。

ext4とXFSはどちらを選べばよいですか?

一般的なWebサーバー、開発環境、Ubuntu/Debian環境、または将来的にディスクサイズを縮小する可能性がある場合はext4がおすすめです。一方、数TB以上の巨大データベースやRHEL/CentOSの標準構成を維持したい場合はXFSが適しています。

まとめ

ext4は、高い信頼性・大容量対応・エクステントによる高速化を備えたLinuxの標準ファイルシステムです。作成には mkfs.ext4 を使用し、tune2fsresize2fse2fsck などのコマンドを組み合わせることで、安全かつ効率的にストレージを運用できます。

フォーマット後は mount コマンド でマウントし、/etc/fstab の自動マウント設定 を行うことで実運用に組み込むことができます。日頃の運用では df -i によるInode監視 も忘れずに行いましょう。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント