ファイルシステムの種類入門 - ext4 / xfs / btrfs の違い

ファイルシステムの種類入門 - ext4 / xfs / btrfs の違い

ファイルシステムとは?どれを選べばよいか

結論: 迷ったら ext4(枯れて安定)。大容量・並列 I/O なら xfs、スナップショットやチェックサムが欲しいなら btrfs を選ぶ。

ファイルシステム(filesystem)とは、ディスク上の生のブロックを「ファイルとディレクトリ」という構造に対応づけ、メタデータ(権限・更新日時・サイズ)を管理する仕組みである。Linux では同じ物理ディスクでも、フォーマット時にどのファイルシステムを選ぶかで性能特性・運用機能・拡張縮小の柔軟性が変わる。

この記事では現代の Linux で主流の 3 種類 —— ext4 / xfs / btrfs —— を、実務の判断軸で比較する。

3 行サマリ

  • ext4: 枯れた安定の定番。デスクトップ・一般サーバの無難な既定値
  • xfs: 大容量・大量並列 I/O に強い。RHEL 系の標準。オンライン拡張可・縮小不可
  • btrfs: CoW・スナップショット・チェックサム・内蔵 RAID を備える多機能型

前提

  • 対象は Linux 上のローカルファイルシステム(ネットワーク FS や FAT/exFAT は対象外)
  • フォーマット(mkfs)はデータを完全消去する操作。本番では必ずバックアップとデバイス指定を確認すること

ext4 とは?どんなときに使うのか

結論: ext4 は最も実績のある汎用ファイルシステム。journaling と extent でクラッシュ耐性と連続領域性能を確保し、迷ったときの安全な既定値になる。

ext4(fourth extended filesystem)は ext2 / ext3 の系譜を継ぐ Linux 標準ファイルシステムの一つで、Debian / Ubuntu などで長くデフォルトに採用されてきた。最大の強みは枯れていること——実運用での実績が圧倒的に多く、トラブル事例とその対処も広く知られている。

主な特徴:

  • ジャーナリング(journaling): 書き込みを先にジャーナルへ記録するため、電源断後も fsck で短時間に整合性を回復できる
  • エクステント(extent): 連続ブロックを範囲(開始+長さ)でまとめて管理し、断片化を抑えて大きなファイルを高速に扱う
  • オンライン拡張: マウントしたまま resize2fs で拡張可能。縮小はアンマウントが必要
# ext4 でフォーマット(対象デバイスを必ず確認)
$ sudo mkfs.ext4 /dev/sdX1

# マウント中のまま拡張(LV やパーティション拡張後)
$ sudo resize2fs /dev/sdX1

こんなときに ext4

  • 何を選ぶか決め手がない一般用途(デスクトップ / 小〜中規模サーバ)
  • 安定性と情報量を最優先したい

xfs とは?どんなときに使うのか

結論: xfs は大容量・高並列 I/O に最適化された 64bit ファイルシステム。オンライン拡張はできるが縮小はできない点が運用上の最大の注意点。

xfs はもともと SGI が IRIX 向けに開発した高性能ファイルシステムで、現在は RHEL / CentOS Stream / Rocky / AlmaLinux などのデフォルトファイルシステムとして広く使われている。大きなファイルや大量のメタデータ操作、並列 I/O に強いのが特徴。

主な特徴:

  • アロケーショングループ: ボリュームを複数の独立領域に分割し、並列にメタデータ更新を行うことでスループットを稼ぐ
  • 大容量志向: エクスサバイト級まで拡張可能な 64bit 設計で、ファイルサーバや大規模ストレージ向き
  • オンライン拡張のみ: xfs_growfs でマウント中に拡張できるが、縮小機能は提供されない
# xfs でフォーマット
$ sudo mkfs.xfs /dev/sdX1

# マウントポイント指定でオンライン拡張
$ sudo xfs_growfs /mnt/data

縮小できない前提で設計する

xfs は容量を後から減らせない。パーティションや LVM のサイズは「将来増やす方向」で計画し、減らす可能性があるなら ext4 や btrfs を検討する。

こんなときに xfs

  • 数 TB 以上の大容量ボリューム / ファイルサーバ
  • RHEL 系で標準に合わせたい(運用ナレッジが揃う)

btrfs とは?どんなときに使うのか

結論: btrfs は CoW・スナップショット・チェックサム・サブボリュームを備えた多機能型。データ保護とロールバックを重視するなら有力だが、運用は ext4/xfs より複雑になる。

btrfs(B-tree filesystem)は Copy-on-Write(CoW)をベースにした次世代型ファイルシステムで、openSUSE のデフォルトや Fedora のデスクトップ既定として採用されている。単なる保存先を超えて、ボリューム管理機能までファイルシステム側に取り込んでいるのが特徴。

主な特徴:

  • CoW(Copy-on-Write): 既存データを上書きせず新しい場所へ書く方式。スナップショットとの相性がよく、書き込み途中のクラッシュでも古いデータが壊れにくい
  • スナップショット: ある時点の状態を瞬時に保存し、失敗した更新を巻き戻せる。アップデート前の保険に使える
  • チェックサム: データとメタデータにチェックサムを持ち、サイレントなビット破損(bit rot)を検出できる
  • サブボリューム / 内蔵 RAID: 1 つのファイルシステム内を論理分割し、複数デバイスをまたぐ構成も組める
  • オンライン拡張・縮小の両対応: btrfs filesystem resize でマウント中に増減できる
# btrfs でフォーマット
$ sudo mkfs.btrfs /dev/sdX1

# スナップショットの作成例(サブボリューム @ を /snap へ)
$ sudo btrfs subvolume snapshot / /snap/root-backup

多機能ゆえの運用コスト

CoW は断片化しやすく、データベースや仮想ディスクのような頻繁な上書きワークロードでは性能が落ちることがある(その用途では CoW を無効化する運用もある)。機能を使いこなす学習コストも ext4/xfs より高い。

こんなときに btrfs

  • スナップショットでアップデート前後を巻き戻したい(openSUSE の snapper 等)
  • チェックサムでデータ破損を検出したい / 複数デバイスを 1 つにまとめたい

ext4 / xfs / btrfs をどう比較して選ぶか

結論: 「安定重視→ext4」「大容量・並列→xfs」「スナップショット・データ保護→btrfs」が基本軸。縮小の可否と機能の多さがトレードオフになる。

観点 ext4 xfs btrfs
設計の成熟度 非常に高い 高い 発展途上(機能は豊富)
得意領域 汎用・安定 大容量・並列 I/O データ保護・柔軟運用
ジャーナリング あり あり CoW(別方式)
スナップショット なし(要 LVM) なし(要 LVM) ネイティブ対応
チェックサム メタデータのみ メタデータ中心 データ+メタデータ
オンライン拡張 可(xfs_growfs
オンライン縮小 不可(要umount) 不可
代表的な既定ディストロ Debian/Ubuntu RHEL 系 openSUSE / Fedora(一部)

選び方の早見

  • 決め手がない → ext4
  • 大容量ファイルサーバ・RHEL 系 → xfs
  • スナップショットでロールバックしたい / データ破損を検出したい → btrfs

自分のシステムのファイルシステムを確認するには?

結論: df -T で種類込みの使用量、lsblk -f で各デバイスの FS、blkid で UUID と TYPE が分かる。フォーマット前のデバイス確認にも使う。

# マウント済み FS を種類(Type)込みで一覧
$ df -T
Filesystem     Type     1K-blocks      Used Available Use% Mounted on
/dev/sda2      ext4      48000000  20000000  25600000  44% /
/dev/sda1      vfat        523248      6132    517116   2% /boot/efi
# ブロックデバイスごとに FS タイプ・UUID・マウント先を確認
$ lsblk -f

# 単一デバイスの TYPE / UUID を確認(mkfs 前の取り違え防止)
$ blkid /dev/sdX1

ルートファイルシステムだけ素早く知りたいときは次のどちらでもよい。

$ findmnt -no FSTYPE /
$ stat -f -c %T /

mkfs.*wipefs を実行する前に、必ず lsblk / blkid対象デバイス名が正しいかを二重確認すること。1 文字違いで別ディスクを消去する事故が後を絶たない。

まとめ - 迷ったら ext4、要件で xfs / btrfs

ファイルシステム選びは「最高の 1 つ」を探すより、要件への当てはめで決めるのが実務的だ。

  • ext4: 枯れた安定の既定値。迷ったらこれ
  • xfs: 大容量・並列 I/O・RHEL 系標準。ただし縮小不可
  • btrfs: CoW・スナップショット・チェックサムの多機能型。運用は少し複雑

まずは df -Tlsblk -f で、いま自分が使っているファイルシステムを確認するところから始めよう。