マウントとfstab入門 - ファイルシステムの接続方法

マウントと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 の書き方は正しい。

次に読む