マウントとfstab入門 - ファイルシステムの接続方法
この記事で解決できること
- Linux の「マウント」の概念と仕組みが分かる
mountコマンドで USB ドライブや追加ディスクを手動マウントできる/etc/fstabを読み書きして再起動後も自動マウントを維持できる- UUID でデバイスを安全に指定できる
umountで安全にアンマウントできる
結論(実務の型)
- マウント = デバイスをディレクトリ(マウントポイント)に接続する操作
- 手動マウント:
sudo mount /dev/sdX /mnt/point - 永続化:
/etc/fstabに記述 → 再起動後も自動マウント - デバイス名でなく UUID を使う(デバイス名は再起動・接続順で変わる)
前提(対象環境)
- Ubuntu / Debian 系を主に想定(RHEL 系でも基本コマンドは同一)
mount/umount/fstab編集は root 権限が必要(sudoを使用)
マウントとは何か?
ストレージデバイスをディレクトリに「接続」してファイルとしてアクセスできるようにする操作がマウント。マウント前はデバイスが存在しても中身は見えない。
/ ← ルート(/ にマウント済み) ├── home/ ← 別パーティションの場合は /home にマウント ├── mnt/ │ └── usb/ ← USBドライブをここにマウントすると中身が見える └── var/
Windows のドライブレター(C:\、D:\)と異なり、Linux は単一のディレクトリツリーにすべてを統合する。デバイスの「入り口」となるディレクトリをマウントポイントと呼ぶ。
マウント済みの状態を確認するには?
findmnt が最も見やすい。mount コマンドの出力でも確認できる。
$ findmnt
TARGET SOURCE FSTYPE OPTIONS / /dev/sda1 ext4 rw,relatime ├─/sys sysfs sysfs rw,nosuid,nodev,noexec ├─/proc proc proc rw,nosuid,nodev,noexec ├─/dev udev devtmpfs rw,nosuid ├─/run tmpfs tmpfs rw,nosuid,nodev └─/home /dev/sda2 ext4 rw,relatime
特定のマウントポイントだけ確認する場合:
$ findmnt /home TARGET SOURCE FSTYPE OPTIONS /home /dev/sda2 ext4 rw,relatime
デバイス名と UUID を確認するには?
マウント前に対象デバイスを把握する。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 20G 0 disk ├─sda1 8:1 0 19G 0 part / └─sda2 8:2 0 1G 0 part /home sdb 8:16 1 8G 0 disk └─sdb1 8:17 1 8G 0 part
sdb1 の MOUNTPOINTS が空 = まだマウントされていない。
UUID を確認する:
$ sudo blkid
/dev/sda1: UUID="a1b2c3d4-1111-2222-3333-444455556666" TYPE="ext4" /dev/sda2: UUID="b2c3d4e5-2222-3333-4444-555566667777" TYPE="ext4" /dev/sdb1: UUID="c3d4e5f6-3333-4444-5555-666677778888" TYPE="vfat"
特定デバイスだけ確認したい場合:
$ sudo blkid /dev/sdb1 /dev/sdb1: UUID="c3d4e5f6-3333-4444-5555-666677778888" TYPE="vfat"
mount コマンドで手動マウントする
マウントポイント(空のディレクトリ)を作成してからマウントする。
# マウントポイントを作成 $ sudo mkdir -p /mnt/usb # マウント(ファイルシステムは自動検出) $ sudo mount /dev/sdb1 /mnt/usb # 確認 $ findmnt /mnt/usb TARGET SOURCE FSTYPE OPTIONS /mnt/usb /dev/sdb1 vfat rw,relatime
ファイルシステムを明示する場合(-t):
$ sudo mount -t ext4 /dev/sdb1 /mnt/data $ sudo mount -t vfat /dev/sdb1 /mnt/usb $ sudo mount -t ntfs /dev/sdb1 /mnt/win
-t を省略すると mount がファイルシステムを自動判別する。ext4 / vfat / ntfs は省略可。
マウントオプション(-o):
| オプション | 意味 |
|---|---|
ro |
読み取り専用 |
rw |
読み書き可能(デフォルト) |
noexec |
実行ファイル禁止 |
nosuid |
SUID ビット無効化 |
remount |
既存マウントのオプション変更 |
# 読み取り専用でマウント $ sudo mount -o ro /dev/sdb1 /mnt/usb # 読み書きに変更して再マウント $ sudo mount -o remount,rw /mnt/usb
umount でアンマウントする
デバイスを物理的に取り外す前にアンマウントが必要。書き込みバッファをフラッシュしてデータ損失を防ぐ。
$ sudo umount /mnt/usb # またはデバイス名で指定 $ sudo umount /dev/sdb1
「device is busy」エラーが出る場合
# 使用中のプロセスを確認 $ lsof /mnt/usb
lsof でプロセスを特定して終了させてから再実行する。対象ディレクトリに cd している場合も busy になるため、別のディレクトリに移動してから umount する。
/etc/fstab とは何か?
/etc/fstab(filesystem table)は OS 起動時に自動マウントするデバイスの設定ファイル。ここに記述したエントリは起動時に自動でマウントされる。
$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> UUID=a1b2c3d4-... / ext4 defaults 0 1 UUID=b2c3d4e5-... /home ext4 defaults 0 2 UUID=f9g0h1i2-... none swap sw 0 0
/etc/fstab を誤って書くと起動不能になる。編集後は必ず sudo mount -a で動作確認してから再起動すること。
fstab エントリの書き方
各フィールドの意味:
| フィールド | 説明 |
|---|---|
<file system> |
デバイス(UUID 推奨)またはデバイスパス |
<mount point> |
マウント先ディレクトリ(swap は none) |
<type> |
ファイルシステム(ext4 / vfat / ntfs / swap など) |
<options> |
マウントオプション(defaults = rw,suid,exec,auto,nouser,async) |
<dump> |
dump バックアップ対象(0: 無効、1: 有効)。通常は 0 |
<pass> |
起動時 fsck 実行順(0: スキップ、1: ルート最初、2: その他) |
# 基本的なエントリ例(ext4 パーティション) UUID=c3d4e5f6-3333-4444-5555-666677778888 /mnt/data ext4 defaults 0 2
UUID を使う理由は?
/dev/sdb のようなデバイス名は USB の接続順序やカーネルの認識順で変化する。UUID は固定値なので、デバイスを差し替えても正しいデバイスをマウントできる。
# デバイス名指定(非推奨) /dev/sdb1 /mnt/data ext4 defaults 0 2 # ↑ 再起動後 sdc1 になることがある # UUID 指定(推奨) UUID=c3d4e5f6-3333-4444-5555-666677778888 /mnt/data ext4 defaults 0 2
fstab に書いて永続化する
追加ディスクや USB を再起動後も自動マウントする手順:
# 1. UUID を確認する $ sudo blkid /dev/sdb1 /dev/sdb1: UUID="c3d4e5f6-3333-4444-5555-666677778888" TYPE="ext4" # 2. マウントポイントを作成する $ sudo mkdir -p /mnt/data # 3. fstab を編集する $ sudo nano /etc/fstab
以下の行を追加:
UUID=c3d4e5f6-3333-4444-5555-666677778888 /mnt/data ext4 defaults 0 2
# 4. fstab を即時適用して動作確認する(再起動不要) $ sudo mount -a # 5. マウントを確認する $ findmnt /mnt/data TARGET SOURCE FSTYPE OPTIONS /mnt/data /dev/sdb1 ext4 rw,relatime
sudo mount -a は fstab の全エントリをマウントするコマンド。再起動の代わりに使える動作確認の必須手順。エラーなく終了すれば fstab の書き方は正しい。