作成とマウント
このレッスンは暗記ではありません。ループバックデバイスを使えば、この学習環境の中で本物の mkfs と mount が動きます。
試験で問われるのは、mkfs の -t で種類を指定する書式、mkfs.ext4 のような別名、mount の -o に並ぶキーワードの意味、umount がデバイス名でもマウントポイントでも指定できること、そして device is busy への対処です。
区画を切っただけではファイルは置けません
区画の中に、ファイルをどう並べてどう探すかという台帳を作る必要があります。これがファイルシステムの作成、いわゆるフォーマットです。次の3つは同じことをします。
ターミナル
mkfs -t ext4 /dev/sdb1
mkfs.ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb1mkfs は種類ごとの実体を呼び出す入口で、-t で種類を渡します。mkfs.ext4 は最初から ext4 用と決まっている実体、mke2fs は ext 系専用の古いコマンドです。オプションは -L がボリュームラベル、-q が静かに実行、-n が実際には作らず表示だけ、です。
この操作は対象の中身をすべて消します。打つ前に lsblk と blkid でそのデバイスに何が入っているかを表示し、消してよい区画かを目で確かめてください。
ファイルシステムの種類
| 種類 | 特徴 |
|---|---|
| ext2 / ext3 | ext2 はジャーナルを持たない古い方式。ext3 はそこにジャーナルを足したもの |
| ext4 | ext3 の後継。大きなファイルとエクステントに対応。Linux の既定が多い |
| xfs | 大容量と並列書き込みに強い。オンラインで拡張できるが縮小はできない |
| btrfs | スナップショットやサブボリュームを持つ新しい方式 |
| vfat | Windows とやり取りする USB メモリ向け。パーミッションを持てない |
ジャーナルとは、変更を実際に書く前に「これから何をするか」を記録しておく仕組みです。途中で電源が落ちても、記録を見れば中途半端な状態を短時間で片付けられます。ext2 にはこれが無い、というのが最もよく問われる差です。
マウントする
作ったファイルシステムは、ディレクトリツリーのどこかに繋いで初めて使えます。書式はデバイスが先、マウントポイントが後で、逆に書いた選択肢が必ず紛れ込みます。
ターミナル
mount /dev/sdb1 /mnt/data
mount -o ro /dev/sdb1 /mnt/data
mount
findmnt-t は種類の明示ですが、今どきは省略しても自動判別されます。引数なしで mount と打つと現在の一覧が出ます。findmnt はその一覧を木の形で見せる読みやすいコマンドです。
-o の値 | 意味 |
|---|---|
| ro / rw | 読み取り専用 / 読み書き可能 |
| noexec | その中の実行ファイルを実行させない |
| nosuid | SUID と SGID を無視する |
| loop | ファイルをブロックデバイスのように扱う |
| remount | マウント済みのものをオプションだけ変えて繋ぎ直す |
| defaults | rw と suid と dev と exec と auto と nouser と async をまとめた既定値 |
複数指定するときは -o ro,noexec のようにカンマで並べます。
loop は、ふつうのファイルをディスクのように見せかける仕組みです。ディスクを切らなくても、ファイルさえあればファイルシステムを作って繋げます。空のファイルは dd if=/dev/zero of=<ファイル名> bs=1M count=<回数> で作れます。if が読み元、of が書き先、bs が1回に扱う大きさ、count が回数です。
外れないときは誰かが中にいます
ターミナル
umount /mnt/data
umount /dev/sdb1umount はマウントポイントでもデバイス名でも指定できます。コマンド名が unmount ではなく umount である点も、綴りを問う形で出ます。
device is busy と言われるのは、中を誰かが使っているときです。自分のシェルが中にいるか、プロセスが中のファイルを開いているかが大半です。まず cd で外に出て、それでも駄目なら lsof か fuser で誰が掴んでいるかを調べます。umount -l は遅延アンマウントで、参照が無くなり次第外す指示です。
よくある引っかけ
mount の引数はデバイスが先です。コマンド名は umount で n が入りません。xfs はオンラインで拡張できても縮小はできません。そして -o loop はファイルをデバイスとして扱う指定であって、ループ回数ではありません。