ファイルシステムのマウント - mount/umount/fstab【LPIC-1 104.3】
この記事で達成できること
mountでデバイスを任意のマウントポイントに接続できるumountで安全にアンマウントし、使用中エラーに対処できる/etc/fstabの 6 フィールドを正確に読み書きできる- UUID / LABEL でデバイスを不変に指定し、
blkid/findmntで確認できる nofailの有無による起動可否の違いを根拠付きで説明できる
LPIC-1 主題 104.3「ファイルシステムをマウント・アンマウントする」の中核。デバイスとディレクトリツリーを接続する仕組みを、試験頻出の fstab 設定ミスまで含めて押さえる。
マウントとは何か
マウントとは、ブロックデバイス上のファイルシステムを既存のディレクトリツリーの一点(マウントポイント)に接続する操作。Linux ではドライブにドライブレターを割り当てず、すべてを単一のツリーに統合する。
mount を引数なしで実行すると、現在マウント済みのすべてのファイルシステムが表示される。デバイス・マウントポイント・タイプ・オプションがこの順で並ぶ。
mount | grep sdb
/dev/sdb1 on /mnt type ext4 (rw,relatime)
ファイルやディレクトリではなく「デバイスとディレクトリの対応関係」を扱う点が重要。マウントポイントに元々あったファイルは、マウント中は隠れて見えなくなる(消えるわけではなく、アンマウントで再び見える)。
mount でどうマウントするか
mount デバイス マウントポイント が基本形。/etc/fstab に該当エントリがあれば、どちらか一方の指定だけでマウントできる。
Step 1: マウント先のデバイスを確認する
lsblk blkid
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part /dev/sda1: UUID="a1b2c3d4-..." TYPE="ext4" /dev/sdb1: UUID="e5f6a7b8-..." TYPE="ext4" LABEL="data"
lsblk でブロックデバイスの階層を、blkid で各パーティションの UUID・LABEL・ファイルシステムタイプを確認する。マウント前にタイプを把握しておく。
Step 2: デバイスをマウントする
mount /dev/sdb1 /mnt findmnt /mnt
TARGET SOURCE FSTYPE OPTIONS /mnt /dev/sdb1 ext4 rw,relatime
mount /dev/sdb1 /mnt で /dev/sdb1 を /mnt に接続する。多くの環境ではタイプは自動判別されるが、明示するなら -t ext4 を付ける。findmnt で接続結果をツリー表示して確認できる。
Step 3: オプションを指定してマウントする
mount -t ext4 -o ro,noexec /dev/sdb1 /mnt findmnt -o TARGET,OPTIONS /mnt
TARGET OPTIONS /mnt ro,noexec,relatime
-o でマウントオプションをカンマ区切りで渡す。ro は読み取り専用、noexec はそのファイルシステム上のバイナリ実行を禁止する。複数指定は -o ro,noexec のように連結する。
Step 4: ISO イメージをループバックマウントする
mount -o loop ubuntu.iso /mnt findmnt /mnt
TARGET SOURCE FSTYPE OPTIONS /mnt /dev/loop0[/ubuntu.iso] iso9660 ro,relatime
-o loop はファイル(ISO イメージ等)をループバックデバイス経由でマウントする。物理デバイスがなくてもイメージの中身をディレクトリとして参照できる。
Step 5: マウント済みファイルシステムを再マウントする
mount -o remount,ro /mnt findmnt -o TARGET,OPTIONS /mnt
TARGET OPTIONS /mnt ro,relatime
-o remount はアンマウントせずにオプションだけを変更する。rw で動作中のファイルシステムを ro に切り替える、といった用途に使う。/ のような常時使用中のファイルシステムにも適用できる。
umount でどう安全に外すか
umount はマウントポイントまたはデバイス名のどちらでも指定できる。使用中のファイルシステムは外せないため、原因プロセスの特定が要点になる。
Step 1: 通常のアンマウント
umount /mnt findmnt /mnt
(no output)
umount /mnt(または umount /dev/sdb1)でアンマウントする。コマンド名は unmount ではなく umount(n なし)である点に注意。出力がなければ成功。
Step 2: 使用中で外せない場合
umount /mnt
umount: /mnt: target is busy.
そのファイルシステム上に開いているファイルやカレントディレクトリを持つプロセスがあると target is busy で失敗する。原因プロセスは lsof や fuser で特定する。
lsof /mnt fuser -m /mnt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 4210 user cwd DIR 8,17 4096 2 /mnt /mnt: 4210c
lsof /mnt は対象を使用中のプロセス一覧を、fuser -m /mnt は PID を表示する。多くの場合、自分のシェルが cd /mnt した状態が原因なので、別ディレクトリへ移動してから再度 umount する。
Step 3: 最終手段としての遅延アンマウント
umount -l /mnt
(no output)
-l(lazy)はファイルシステムをツリーから即座に切り離し、参照がなくなった時点で実際の解放を行う。busy を回避できるが、書き込み中データの扱いに注意が必要なため、原因プロセスを止められない場合の最終手段とする。
/etc/fstab の 6 フィールドをどう書くか
/etc/fstab は起動時や mount -a で参照される静的なマウント定義ファイル。各行は空白またはタブ区切りの 6 フィールドで構成される。
UUID=e5f6a7b8-... /data ext4 defaults,nofail 0 2
| # | フィールド | 内容 | 例 |
|---|---|---|---|
| 1 | デバイス | マウント対象。UUID= / LABEL= / デバイスパス |
UUID=e5f6... |
| 2 | マウントポイント | 接続先ディレクトリ。swap は none または swap |
/data |
| 3 | ファイルシステムタイプ | ext4 / xfs / vfat / swap / auto 等 |
ext4 |
| 4 | マウントオプション | カンマ区切り。defaults 等 |
defaults,nofail |
| 5 | dump | dump 用のバックアップ要否(通常 0) |
0 |
| 6 | fsck passno | 起動時 fsck の順序(0=検査しない) |
2 |
第 5 フィールドは dump コマンド用で、通常 0。第 6 フィールド(passno)は起動時のファイルシステムチェック順序で、ルート / は 1、その他のチェック対象は 2、検査不要なら 0 とする。passno が同じドライブのものは順次、異なるドライブのものは並行して検査される。
第 4 フィールドの defaults は rw,suid,dev,exec,auto,nouser,async をまとめて指定するショートカット。標準的なローカルディスクはこれで足りる。
UUID / LABEL でなぜ指定するのか
/dev/sdb1 のようなデバイス名は、ディスクの増設や接続順の変化で /dev/sdc1 等に変わりうる。fstab でデバイス名を直書きすると、名前がずれた瞬間に誤ったデバイスをマウントするか、マウント失敗で起動に支障が出る。
UUID(ファイルシステム生成時に割り当てられる一意な識別子)や LABEL(任意のラベル名)はデバイスの接続位置に依存しないため、fstab ではこれらの指定が推奨される。値は blkid で確認する。
blkid /dev/sdb1
/dev/sdb1: UUID="e5f6a7b8-1234-..." TYPE="ext4" LABEL="data"
# /etc/fstab の記述例 UUID=e5f6a7b8-1234-... /data ext4 defaults,nofail 0 2 LABEL=data /data ext4 defaults,nofail 0 2
UUID 指定なら blkid で得た値をそのまま第 1 フィールドに書く。LABEL 指定はラベルを付けたファイルシステムにのみ有効で、e2label 等でラベルを設定しておく必要がある。
fstab を編集したらどう検証するか
fstab の記述ミスは起動不能に直結する。再起動する前に、現在のシステムで記述が正しいかを必ず検証する。
mount -a で一括テストする
mount -a
(no output = 成功)
mount -a は fstab 内の auto 対象エントリ(noauto 以外)をすべてマウントする。すでにマウント済みのものはスキップされる。エラーが出なければ fstab の記述は妥当。出力にエラーが出た行は記述ミスの可能性が高い。
findmnt で fstab エントリを照合する
findmnt --verify
/data [ ] target exists [ ] FS options: defaults,nofail 0 parsing errors, 0 errors, 0 warnings
findmnt --verify は fstab を解析し、マウントポイントの存在やオプションの妥当性を実際にマウントせずに点検する。0 errors を確認してから再起動するのが安全。
fstab の編集後に検証せず再起動すると、記述ミスがある場合に通常ブートが止まり緊急シェルに落ちる。必ず mount -a と findmnt --verify で確認してから再起動すること。
主要マウントオプションの早見表
第 4 フィールドや mount -o で使う代表的なオプション。組み合わせはカンマ区切り。
| オプション | 意味 |
|---|---|
defaults |
rw,suid,dev,exec,auto,nouser,async の標準セット |
ro / rw |
読み取り専用 / 読み書き可能 |
noexec |
そのファイルシステム上のバイナリ実行を禁止 |
nosuid |
setuid / setgid ビットを無効化 |
nodev |
デバイスファイルの解釈を禁止 |
auto / noauto |
mount -a・起動時に自動マウントする / しない |
user / users |
一般ユーザーにマウントを許可(user は実行者のみ umount 可) |
nofail |
デバイスが存在しなくても起動を継続する |
noexec,nosuid,nodev は USB メモリや一時データ領域のセキュリティ強化の定番。実行ファイルや setuid バイナリを置かない領域に付けておくと安全性が上がる。
systemd による自動マウントの概要
systemd を採用する現代のディストリビューションでは、/etc/fstab は起動時に systemd-fstab-generator によって .mount ユニットへ自動変換され、systemd 管理下でマウントされる。fstab を書けば従来どおり動作する点は変わらない。
第 4 フィールドのオプションで systemd 固有の挙動を指定できる。例えば x-systemd.automount を付けると、対象ディレクトリに初めてアクセスした時点でオンデマンドにマウントされる(オートマウント)。ネットワークファイルシステムでは _netdev を付けてネットワーク到達後にマウントさせる。
# アクセス時にオンデマンドマウントする例 UUID=e5f6... /data ext4 noauto,x-systemd.automount 0 2
LPIC-1 の範囲では「fstab が systemd により .mount ユニットへ変換される」という関係と、nofail / _netdev 程度のオプションを押さえておけば十分。
よくあるミスと対処法
ミス 1: fstab の記述ミスで起動不能になる
存在しないデバイスや誤った UUID を fstab に書くと、デフォルトでは起動が停止して緊急シェルに落ちる。必須でないデータ領域には nofail を付け、デバイスが無くても起動を継続させる。編集後は必ず mount -a と findmnt --verify で検証する。
ミス 2: 使用中で umount できない
target is busy は、そのファイルシステム上に開いているファイルやカレントディレクトリを持つプロセスがあるサイン。lsof /mnt や fuser -m /mnt で原因プロセスを特定し、そのプロセスを終了するか作業ディレクトリを移動してから umount する。
ミス 3: UUID 変更でマウントに失敗する
mkfs でファイルシステムを作り直すと UUID が変わるため、古い UUID を書いた fstab エントリはマウントに失敗する。再フォーマット後は blkid で新しい UUID を取得し、fstab を更新する。
ミス 4: コマンド名を unmount と打ってしまう
アンマウントのコマンドは umount(n なし)。unmount は存在せず command not found になる。試験でもコマンド名の綴りが問われる。
ミス 5: マウントポイントのファイルが消えたと誤認する
マウントポイントに元々あったファイルは、マウント中は隠れて見えなくなるだけで削除はされていない。アンマウントすれば元のファイルが再び見える。
トラブルシューティング
症状: mount で「wrong fs type」エラーになる
原因: ファイルシステムタイプの自動判別に失敗、または -t で誤ったタイプを指定している
確認:
blkid /dev/sdb1
対処: blkid で実際のタイプを確認し、mount -t 正しいタイプ で明示する。タイプ対応のカーネルモジュールやツール(xfsprogs 等)が無い場合はそれを導入する。
症状: 再起動後にデータ領域がマウントされていない
原因: fstab エントリに noauto が付いている、または UUID がずれている
確認:
findmnt --verify blkid
対処: findmnt --verify で fstab の妥当性を点検し、auto(または noauto の削除)と正しい UUID に修正する。手動確認は mount -a で行う。
症状: umount -l 後もディスクが取り外せない
原因: 遅延アンマウントはツリーから切り離すだけで、参照中プロセスが残っていると実解放されない
確認:
fuser -m /dev/sdb1
対処: fuser -m で残存プロセスを特定して終了させる。すべての参照が消えた時点で実際の解放が完了する。
作業完了チェックリスト
- [ ]
lsblk/blkidでデバイスとタイプを確認した - [ ]
mountでマウントしfindmntで結果を確認した - [ ]
umountで安全にアンマウントできた(busy 時はlsof/fuserで対処) - [ ]
/etc/fstabを UUID / LABEL で記述した - [ ]
mount -a/findmnt --verifyで再起動前に検証した - [ ] 任意領域に
nofailを付けて起動不能リスクを回避した
まとめ
| 場面 | コマンド | 目的 |
|---|---|---|
| マウント | mount -t ext4 -o ro /dev/sdb1 /mnt |
タイプ・オプション指定で接続 |
| アンマウント | umount /mnt |
安全に切り離す |
| 使用中対処 | lsof /mnt / fuser -m /mnt |
busy の原因特定 |
| 識別子確認 | blkid |
UUID / LABEL / タイプ取得 |
| 状態確認 | findmnt |
マウントツリー表示 |
| fstab 検証 | mount -a / findmnt --verify |
再起動前の妥当性確認 |
マウントはストレージ運用の基礎であり、パーティション作成・FHS と一体で理解すると効果が高い。fstab の記述ミスは起動不能に直結するため、検証手順まで含めて身につけることが LPIC-1 合格と実務の両方で重要になる。