ファイルシステムのマウント - mount/umount/fstab【LPIC-1 104.3】

ファイルシステムのマウント - 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 で失敗する。原因プロセスは lsoffuser で特定する。

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 フィールドの defaultsrw,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 -afindmnt --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 -afindmnt --verify で検証する。

ミス 2: 使用中で umount できない

target is busy は、そのファイルシステム上に開いているファイルやカレントディレクトリを持つプロセスがあるサイン。lsof /mntfuser -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 合格と実務の両方で重要になる。

次に読む