fdiskでパーティションを切った後の手順がわからない。
ext4とxfsどちらを選べばいいか判断できない。
ファイルシステムの作成(フォーマット)は、ディスクを使えるようにするための必須手順です。
この記事では、mkfsコマンドを使ったext4とxfsのフォーマット方法、
fdiskによるパーティション作成後のフォーマット手順、
マウントとfstab登録、そしてxfsとext4の選択基準を体系的に解説します。
RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTS で動作確認済みです。
この記事のポイント
・mkfs.ext4 / mkfs.xfs でディスクをフォーマットする方法がわかる
・fdiskでパーティション作成後にファイルシステムを作る手順を理解できる
・/etc/fstab に登録して自動マウントを設定できる
・ext4とxfsの違いと使い分けの基準がわかる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ファイルシステムとはなにか
ファイルシステムとは、ディスク上のデータを「ファイル」として扱うための仕組みです。ファイルシステムがなければ、ディスクのデータを読み出すために
「193765セクタと193766セクタのデータを読み出す」というように
物理的なセクタ番号を直接指定する必要があります。
ファイルシステムがあることで、
「/var/log/messages を開く」という人間に分かりやすい操作ができます。
Linuxの主なファイルシステム:
・ext4:Linuxで最も広く使われてきた標準ファイルシステム。安定性が高い
・xfs:RHEL 7以降のデフォルト。大容量ファイルや高並列書き込みに強い
・btrfs:スナップショット機能を持つ次世代ファイルシステム
・vfat/exFAT:USBメモリなどのWindowsとの互換用
サーバー用途では ext4 または xfs の選択が実質的な判断になります。
fdiskでパーティションを作成する
新しいディスクを追加した場合、まずパーティションを作成し、次にファイルシステムを作成(フォーマット)します。
【重要】以下の手順はデータが消えます。誤ったデバイスを指定しないよう必ず確認してください。
1. 追加されたディスクを確認する
# ディスク一覧を確認(ブロックデバイス) lsblk # 実行例 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part / sdb 8:16 0 100G 0 disk ←新しく追加したディスク # ディスクの詳細情報を確認 sudo fdisk -l /dev/sdb
2. fdiskでパーティションを作成する
# fdiskを起動(対話モード) sudo fdisk /dev/sdb # fdisk内のコマンド # n : 新しいパーティションを作成 # p : パーティションテーブルを表示 # d : パーティションを削除 # w : 変更を書き込んで終了 # q : 変更を保存せずに終了 # t : パーティションタイプを変更 # 操作例(ディスク全体を1つのパーティションにする場合) Command (m for help): n Partition type: p primary Partition number (1-4, default 1): 1 First sector (2048-209715199, default 2048): (Enterでデフォルト) Last sector: (Enterでデフォルト=全領域使用) Command (m for help): w ←変更を書き込む
3. partprobeでカーネルにパーティション変更を通知する
# カーネルのパーティションテーブルを更新 sudo partprobe /dev/sdb # パーティションが認識されたか確認 lsblk /dev/sdb
mkfsコマンドでファイルシステムを作成する
パーティションが作成できたら、mkfs コマンドでファイルシステムを作成(フォーマット)します。1. ext4でフォーマットする
# ext4ファイルシステムを作成 sudo mkfs.ext4 /dev/sdb1 # 実行例 mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 26214400 4k blocks and 6553600 inodes Filesystem UUID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, ... Allocating group tables: done Writing inode tables: done Creating journal (131072 blocks): done Writing superblocks and filesystem accounting information: done # ラベル付きでフォーマット(/etc/fstabでの管理が楽になる) sudo mkfs.ext4 -L datadisk /dev/sdb1
2. xfsでフォーマットする
# xfsファイルシステムを作成 sudo mkfs.xfs /dev/sdb1 # 実行例 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553600 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=1 inobtcount=1 data = bsize=4096 blocks=26214400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=12799, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # 既存のxfsを強制的に再フォーマット(警告が出る場合) sudo mkfs.xfs -f /dev/sdb1
3. mkfsコマンドの主なオプション
| コマンド | 説明 |
|---|---|
mkfs.ext4 /dev/sdb1 |
ext4でフォーマット |
mkfs.xfs /dev/sdb1 |
xfsでフォーマット |
mkfs.ext4 -L label /dev/sdb1 |
ラベル付きでext4フォーマット |
mkfs.ext4 -b 4096 /dev/sdb1 |
ブロックサイズ4096でフォーマット |
mkfs.xfs -f /dev/sdb1 |
強制フォーマット(既存を上書き) |
マウントとfstabへの登録
ファイルシステムを作成したら、マウントして使えるようにします。1. UUIDを確認する
# ファイルシステムのUUIDを確認する(fstab登録に使う) sudo blkid /dev/sdb1 # 実行例 /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" # または lsblk -f でも確認できる lsblk -f /dev/sdb
2. マウントポイントを作成してマウントする
# マウントポイントを作成 sudo mkdir -p /data # 手動でマウントする(再起動で解除される) sudo mount /dev/sdb1 /data # マウント確認 df -h /data # 実行例 Filesystem Size Used Avail Use% Mounted on /dev/sdb1 100G 92K 100G 1% /data
3. /etc/fstabに登録して自動マウントする
再起動後も自動でマウントされるように /etc/fstab に登録します。# /etc/fstab に追記する(UUIDで指定するのが推奨) # 書式: デバイス マウントポイント fstype オプション dump pass UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data ext4 defaults 0 2 # xfsの場合 UUID=xxxxx-xxxx-xxxx-xxxx /data xfs defaults 0 2 # fstabの構文チェック(マウントせずに確認) sudo mount -a --fake # 再マウントして確認 sudo umount /data sudo mount -a # マウント確認 mount | grep /data
・dump(5列目):0=バックアップしない(通常0)
・pass(6列目):fsckの起動順序。root=1、その他=2、チェック不要=0
ext4とxfsの選択基準
どちらのファイルシステムを使うか迷ったときの判断基準を整理します。| 比較項目 | ext4 | xfs |
|---|---|---|
| 最大ファイルサイズ | 16TB | 8EB(実質無制限) |
| 最大ボリュームサイズ | 1EB | 8EB |
| RHEL 7以降のデフォルト | 非デフォルト | デフォルト |
| 縮小(shrink) | 可能 | 不可(拡張のみ) |
| 高並列書き込み | 普通 | 強い |
| 小ファイル多数の環境 | 得意 | 普通 |
・一般的なサーバー用途(Webサーバー、アプリケーション):xfs(RHEL 9のデフォルト)
・大量の小ファイル(メールサーバー、Gitリポジトリ):ext4
・後でボリューム縮小の可能性がある:ext4(xfsは縮小不可)
・大容量ファイルサーバー、データベース:xfs
ファイルシステムの内部構造を理解する
ファイルシステムの仕組みを理解しておくと、トラブル時に原因を絞り込みやすくなります。
1. スーパーブロック
ファイルシステムを作成した際、最初のブロックに「スーパーブロック」が作成されます。スーパーブロックは、ファイルシステム全体の管理情報(サイズ、ブロックサイズ、未使用ブロック数など)を持ちます。
スーパーブロックが破損するとファイルシステム全体が使用不能になるため、
ext4では一定の間隔でバックアップスーパーブロックが作成されます。
# ext4のスーパーブロック情報を確認 sudo dumpe2fs /dev/sdb1 | head -30 # バックアップスーパーブロックの位置を確認 sudo dumpe2fs /dev/sdb1 | grep superblock # 実行例 Primary superblock at 0, Group descriptors at 1-3 Backup superblock at 32768, Group descriptors at 32769-32771 Backup superblock at 98304, Group descriptors at 98305-98307
# バックアップスーパーブロックを使ってfsmkチェック sudo fsck.ext4 -b 32768 /dev/sdb1
2. inode(Indexノード)
inode は、ファイルの属性・管理情報(サイズ、所有者、パーミッション、データブロックの位置)を格納する領域です。ディレクトリ自体も inode を持ち、そのデータブロックにファイル名と inode 番号の対応表が保存されています。
つまり「ファイル名」はディレクトリエントリが持ち、
「ファイルの実体(属性とデータ)」は inode とデータブロックが持ちます。
このため、ハードリンクは同じ inode を指す別のファイル名として実装されています。
# ファイルのinode番号を確認 ls -i /etc/passwd # 実行例 131073 /etc/passwd # inode情報の詳細を表示 stat /etc/passwd # 実行例 File: /etc/passwd Size: 2847 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 131073 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
3. ジャーナリング
ext4 と xfs はどちらもジャーナリングファイルシステムです。ジャーナルは「これから書き込む操作」を事前に記録するログ領域で、
突然の電源断があってもジャーナルを再生することでファイルシステムの整合性を保てます。
ext4 のジャーナリングモード:
・ordered(デフォルト):データ書き込み後にメタデータをジャーナルに記録
・writeback:メタデータのみジャーナル記録(パフォーマンス重視)
・journal:データもメタデータも全てジャーナルに記録(最も安全・遅い)
ファイルシステムの確認・修復コマンド
1. ファイルシステムの整合性チェック
# ext4の整合性チェック(アンマウントが必要) sudo umount /data sudo fsck.ext4 /dev/sdb1 # xfsの整合性チェック sudo umount /data sudo xfs_repair /dev/sdb1 # マウントしたまま読み取り専用でチェック(ext4) sudo fsck.ext4 -n /dev/sdb1
2. ext4のinodeを確認する
inode はファイルの管理情報を格納する領域です。inode が枯渇するとファイルが作成できなくなります。
# inode の使用状況を確認 df -i /data # 実行例 Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 6553600 1234 6552366 1% /data # ext4のinode数を指定してフォーマット(小ファイル多数の場合) # -N で総inode数を指定 sudo mkfs.ext4 -N 10000000 /dev/sdb1
3. xfsのメタデータを確認・修復する
xfs はマウントしたままの状態では fsck は使えません。修復には xfs_repair を使い、必ずアンマウントしてから実行します。
# xfs の情報を確認 sudo xfs_info /data # 実行例(RHEL 9のxfs情報) meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553600 blks data = bsize=4096 blocks=26214400, imaxpct=25 # xfs の整合性チェック・修復(ドライラン) sudo xfs_repair -n /dev/sdb1 # xfs の実際の修復(アンマウント必須) sudo umount /data sudo xfs_repair /dev/sdb1
4. LVM(論理ボリューム管理)と組み合わせる
物理ディスクを直接使う代わりに、LVM を経由するとオンラインでボリュームを拡張できます。xfs との組み合わせでオンライン拡張が使えます。
# xfsをオンラインで拡張する(LVM経由の場合) # 1. 論理ボリュームを拡張 sudo lvextend -L +50G /dev/mapper/vg0-data # 2. xfsファイルシステムを拡張(マウントしたまま可能) sudo xfs_growfs /data # ext4のオンライン拡張 sudo lvextend -L +50G /dev/mapper/vg0-data sudo resize2fs /dev/mapper/vg0-data
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ディスク一覧を確認 | lsblk |
| fdiskでパーティション作成 | sudo fdisk /dev/sdb |
| ext4でフォーマット | sudo mkfs.ext4 /dev/sdb1 |
| xfsでフォーマット | sudo mkfs.xfs /dev/sdb1 |
| UUIDを確認 | sudo blkid /dev/sdb1 |
| 手動マウント | sudo mount /dev/sdb1 /data |
| fstabの構文チェック | sudo mount -a --fake |
| inode使用状況を確認 | df -i /data |
| ext4の整合性チェック | sudo fsck.ext4 /dev/sdb1 |
| xfsのオンライン拡張 | sudo xfs_growfs /data |
ディスクのパーティション構成を事前に設計しておくことも重要です。
システム領域(/)とデータ領域(/data, /var など)を分けることで、
データ領域がいっぱいになってもシステムは動き続けます。
現場では「/ は 30GB、/var は 50GB、/data は残り全部」のように分割するのが一般的です。
また、本番環境のディスク操作は必ず事前にスナップショットやバックアップを取ってから行ってください。
mkfs は取り消しができない操作です。コマンドを実行する前にデバイス名(/dev/sdX)を必ず再確認する習慣をつけましょう。
この手順を1度手を動かして覚えれば、本番環境でも自信を持って作業できます。
特に /etc/fstab の編集は書き方を間違えるとOSが起動しなくなる危険があります。
sudo mount -a --fake や sudo mount -a での確認を必ずセットで行ってください。Linuxのログ確認については、Linuxのログファイルの種類と確認方法もあわせてご覧ください。
起動プロセスの詳細については、Linuxのsystemdによる起動プロセスを理解するで解説しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:/etc/fstabの書き方と読み方|6つのフィールド解説とUUIDを使ったマウント設定
- 前のページへ:リダイレクトの使い方|>・>>・<・2>&1・/dev/nullの全パターン実践例
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます