ファイルシステムの作成(mkfs)
パーティションはそのままでは使えず、ファイルを置けるようにする「ファイルシステム」を作成(フォーマット)する必要があります。Linuxでは ext4 が定番で、ほかに xfs や btrfs などがあります。mkfs.ext4 /dev/sda1 のように、種類ごとのコマンドへ対象パーティションを渡して作成します。mkfs は対象上の既存データをすべて消すため、デバイス名は lsblk や blkid で二重に確認してから実行してください。作成後は blkid で UUID やファイルシステム種別を確認できます。
ディスクを区切ってパーティションを用意しただけでは、まだファイルを保存することはできません。パーティションはあくまで「仕切られた空き地」のようなもので、その中にファイルやディレクトリを整理して記録するための骨組みを作る必要があります。この骨組みがファイルシステムであり、それを作る作業を「フォーマット」と呼びます。ファイルシステムは、どこにどのファイルの実体があるか、各ファイルの名前・サイズ・更新日時・権限はどうか、空き領域はどこか、といった情報を管理する仕組みです。これがあって初めて、私たちは「ファイルを作る・読む・消す」という当たり前の操作ができるようになります。
Linuxで使えるファイルシステムにはいくつか種類があります。最も広く使われている定番が ext4 で、安定性と実績に優れ、迷ったらこれを選んで間違いありません。大容量・大量ファイルの扱いに強い xfs は、RHEL系のディストリビューションでは標準のファイルシステムとして採用されています。さらに、スナップショットや圧縮といった高度な機能を持つ btrfs、USBメモリなどWindowsとやり取りする用途で使う vfat(FAT32)などもあります。用途に応じて選びますが、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 で種類を指定する書き方も同じ意味になります。実行すると、ファイルシステムの管理情報(スーパーブロックやinodeテーブルなど)がパーティション上に書き込まれ、ファイルを置ける状態が整います。作成時にラベルを付けておくと後で識別しやすく、mkfs.ext4 -L data /dev/sda1 のように -L でラベルを指定できます(xfs では mkfs.xfs -L data /dev/sda1)。なお mkfs はパーティションだけでなく、後のトピックで扱う論理ボリュームやRAIDデバイスといったブロックデバイス全般に対しても、まったく同じ要領で実行できます。
ここで、ファイルシステムを理解するうえで欠かせないのが inode(アイノード)という概念です。inode は、ファイル1つ1つのメタ情報——サイズ・所有者・パーミッション・タイムスタンプ・実データがディスク上のどこにあるか——を格納する管理単位です。興味深いことに、inode はファイル名そのものは持ちません。名前はディレクトリ側が「この名前はこの inode 番号」という対応表として管理しています。mkfs.ext4 でフォーマットすると、このときに使える inode の総数がほぼ決まります。そのため、ごく小さなファイルを大量に作るような使い方をすると、ディスクの容量にはまだ余裕があるのに inode を使い切ってしまい、新しいファイルが作れなくなる、ということが起こり得ます(この状況は後述の df -i で確認できます)。
作成後は blkid で確認する
フォーマットが終わったら、blkid で結果を確かめます。blkid /dev/sda1 と打つと、そのパーティションのファイルシステム種別(TYPE="ext4" など)と、新しく割り当てられた UUID が表示されます。フォーマットのたびに UUID は新しく生成されるため、この値が出ていれば「正しくファイルシステムが作られた」ことの確認になります。ここで得た UUID は、続くマウントや /etc/fstab への登録で、そのファイルシステムを名指しするための安定した目印として使います。なお、作成済みのブロックデバイス全体の構成は lsblk でも確認でき、lsblk -f とすると各パーティションのファイルシステム種別やマウント状況まで一覧できて便利です。
既存データを消す操作であることを忘れない
mkfs は、ストレージ操作の中でも最も破壊的なコマンドの1つです。フォーマットとは新しい管理情報で領域を上書きすることなので、対象のパーティションに既存のデータが入っていれば、それらは原則としてすべて失われます。しかも mkfs は基本的に確認を求めず、実行した瞬間に処理を始めます。ここでデバイス名を1文字間違えれば、消すつもりのなかった大切なパーティションを一瞬で初期化してしまいます。
この事故を防ぐ作法は、パーティション操作のときと同じく「実行前の二重確認」です。まず lsblk で全体像を見て対象のサイズとマウント状況を把握し、次に blkid で「そのパーティションにいま何が入っているか(既存のファイルシステムやUUID)」を確かめ、本当にフォーマットしてよい空きパーティションかを見極めてから mkfs を打ちます。とくに、いままさにシステムが使っているパーティション(マウント中のもの)を誤ってフォーマットしようとすると、システムを壊しかねません。マウント中のデバイスは通常 mkfs を拒否しますが、それに頼り切らず、自分の目でデバイス名を確認することを最後の砦にしてください。新品のディスクやUSBメモリを使えるようにする、といった「中身が空であることが確実な」場面で使うのが、mkfs の最も安全な使いどころです。