🐧 Linux 総合学習プラットフォーム
ストレージ/ファイルシステム ・ 中級

ファイルシステムの作成(mkfs)

パーティションはそのままでは使えず、ファイルを置けるようにする「ファイルシステム」を作成(フォーマット)する必要があります。Linuxでは ext4 が定番で、ほかに xfs や btrfs などがあります。mkfs.ext4 /dev/sda1 のように、種類ごとのコマンドへ対象パーティションを渡して作成します。mkfs は対象上の既存データをすべて消すため、デバイス名は lsblk や blkid で二重に確認してから実行してください。作成後は blkid で UUID やファイルシステム種別を確認できます。

ディスクを区切ってパーティションを用意した。これでもうファイルを保存できそうだが、まだできない。

パーティションはあくまで「仕切られた空き地」のようなものだからだ。その中にファイルやディレクトリを整理して記録するための骨組みが、まだ無い。

🔗
たとえパーティションは「更地」。そのままでは住めない。mkfs は更地に「部屋割り・台帳・住所」を引く工事で、これでようやくファイルを置けるようになる。

この骨組みがファイルシステムであり、それを作る作業を「フォーマット」と呼ぶ。ファイルシステムは、どこにどのファイルの実体があるか、各ファイルの名前・サイズ・更新日時・権限はどうか、空き領域はどこか、といった情報を管理する仕組みだ。

これがあって初めて、私たちは「ファイルを作る・読む・消す」という当たり前の操作ができるようになる。では、その骨組みにはどんな種類があるのか。

🗂 ファイルシステムの種類と選び方

Linuxで使えるファイルシステムにはいくつか種類がある。迷ったときの目安を押さえておこう。

最も広く使われている定番が ext4 で、安定性と実績に優れ、迷ったらこれを選んで間違いない。大容量・大量ファイルの扱いに強い xfs は、RHEL系のディストリビューションでは標準のファイルシステムとして採用されている。

さらに、スナップショットや圧縮といった高度な機能を持つ btrfs、USBメモリなどWindowsとやり取りする用途で使う vfat(FAT32)などもある。Linux専用のデータ領域なら、ext4 か xfs を選んでおくのが無難だ。

ext4迷ったら基本安定・実績組込みにもxfs大容量・大量RHEL系の標準btrfs高機能スナップショット圧縮vfatWindows互換USBの受け渡しLinux専用データなら ext4 が基本、大規模なら xfs

組込み機器のように容量が限られた環境では、小さな領域でもオーバーヘッドの少ない ext4 がよく使われる。SDカードやフラッシュ向けには専用の f2fs を選ぶこともある。

種類によって得意なこと(扱える最大容量、ジャーナル機能の有無、伸縮のしやすさ)が違う。まずは「ext4 が基本、大規模なら xfs」と押さえておけば十分だ。

🧱 mkfs は、何を書き込んでいるのか

ファイルシステムを作成するコマンドが mkfs(make filesystem)だ。

実際には、作りたいファイルシステムの種類ごとに mkfs.ext4・mkfs.xfs・mkfs.vfat といった専用のコマンドが用意されており、これらに対象のパーティションを渡して実行する。たとえば ext4 を作るなら mkfs.ext4 /dev/sda1 のように書く。mkfs -t ext4 /dev/sda1 のように、mkfs に -t で種類を指定する書き方も同じ意味になる。

mkfs.ext4 /dev/sda1(=mkfs -t ext4 /dev/sda1)。ラベル付きなら mkfs.ext4 -L data /dev/sda1(xfs は mkfs.xfs -L data /dev/sda1)。

実行すると、ファイルシステムの管理情報(スーパーブロックやinodeテーブルなど)がパーティション上に書き込まれ、ファイルを置ける状態が整う。

作成時にラベルを付けておくと後で識別しやすい。mkfs.ext4 -L data /dev/sda1 のように -L でラベルを指定できる(xfs では mkfs.xfs -L data /dev/sda1)。

なお mkfs はパーティションだけでなく、後のトピックで扱う論理ボリュームやRAIDデバイスといったブロックデバイス全般に対しても、まったく同じ要領で実行できる。

🔖 inode という管理単位

ここで、いま書き込まれた管理情報の正体に目を向けたい。ファイルシステムを理解するうえで欠かせないのが inode(アイノード)という概念だ。

inode は、ファイル1つ1つのメタ情報――サイズ・所有者・パーミッション・タイムスタンプ・実データがディスク上のどこにあるか――を格納する管理単位である。

💡
ポイントinode はファイルの「管理票」。ただし名前そのものは持たない。名前はディレクトリ側が「この名前 → この inode 番号」という対応表として管理している。

興味深いことに、inode はファイル名そのものは持たない。名前はディレクトリ側が「この名前はこの inode 番号」という対応表として管理している。

mkfs.ext4 でフォーマットすると、このときに使える inode の総数がほぼ決まる。そのため、ごく小さなファイルを大量に作るような使い方をすると、ディスクの容量にはまだ余裕があるのに inode を使い切ってしまい、新しいファイルが作れなくなる、ということが起こり得る(この状況は後述の df -i で確認できる)。

つまずきinode の総数はフォーマット時にほぼ固定。小さなファイルを大量に作ると、容量は余っていても inode を使い切り、ファイルが作れなくなることがある。

フォーマット時に決まる、というこの一点が、後で効いてくる伏線だ。

✅ 作った後は、何で確かめるのか

フォーマットが終わったら、blkid で結果を確かめる。blkid /dev/sda1 と打つと、そのパーティションのファイルシステム種別(TYPE=ext4 など)と、新しく割り当てられた UUID が表示される。

blkid /dev/sda1 ……TYPE=ext4 と新しい UUID が出れば成功。lsblk -f ……各パーティションの種別とマウント状況まで一覧。

フォーマットのたびに UUID は新しく生成されるため、この値が出ていれば「正しくファイルシステムが作られた」ことの確認になる。

ここで得た UUID は、続くマウントや /etc/fstab への登録で、そのファイルシステムを名指しするための安定した目印として使う。

なお、作成済みのブロックデバイス全体の構成は lsblk でも確認でき、lsblk -f とすると各パーティションのファイルシステム種別やマウント状況まで一覧できて便利だ。

💥 なぜ、フォーマットは「消す操作」なのか

mkfs は、ストレージ操作の中でも最も破壊的なコマンドの1つだ。

フォーマットとは新しい管理情報で領域を上書きすることなので、対象のパーティションに既存のデータが入っていれば、それらは原則としてすべて失われる。しかも mkfs は基本的に確認を求めず、実行した瞬間に処理を始める。

ここでデバイス名を1文字間違えれば、消すつもりのなかった大切なパーティションを一瞬で初期化してしまう。

つまずきmkfs は確認を求めずに走る。実行前に lsblk でサイズとマウント状況、blkid で既存の中身を必ず確かめる。空きパーティションだと確信できてから打つ。

防ぐ作法はパーティション操作のときと同じく「実行前の二重確認」だ。まず lsblk で全体像を見て対象のサイズとマウント状況を把握し、次に blkid で「そのパーティションにいま何が入っているか(既存のファイルシステムやUUID)」を確かめ、本当にフォーマットしてよい空きパーティションかを見極めてから mkfs を打つ。

とくに、いままさにシステムが使っているパーティション(マウント中のもの)を誤ってフォーマットしようとすると、システムを壊しかねない。マウント中のデバイスは通常 mkfs を拒否するが、それに頼り切らず、自分の目でデバイス名を確認することを最後の砦にしたい。

新品のディスクやUSBメモリを使えるようにする、といった「中身が空であることが確実な」場面で使うのが、mkfs の最も安全な使いどころだ。

この項目に出てくる用語

ファイルシステムふぁいるしすてむ
ディスク上にファイルやディレクトリを整理して記録する仕組み。ext4・xfs などの種類があり、mkfs で作成する。
inodeあいのーど
ファイルの実体情報(権限・所有者・場所等)を持つ管理単位。
ブロックデバイスぶろっくでばいす
データを一定サイズの「ブロック」単位で読み書きする記憶装置。ディスクやSSD、USBメモリが該当し、/dev/sda などの名前で扱う。

関連コマンド

mkfsblkidlsblk

▶ 学習アプリでこの続きを学ぶ・演習する