デバイス管理とマウントの基本方針を整理する

Debian GNU/Linux 13 を導入したと同時に、デバイス管理とマウントの基本方針を整理した。ディスクや外部デバイスを扱うとき、起動順や接続順の変動で構成が崩れるのを防ぐには、名前の安定性とマウント方針の整理が不可欠だ。ここでは次の 3 点について記述する。

  • 1. 物理デバイス名と論理デバイス名の分離
  • 2. マウントポイント /mnt と ~/mnt のマウント位置の使い分け
  • 3. fstab と crypttab における UUID 指定

1. 物理デバイス名と論理デバイス名

  • 物理デバイス名(/dev/sda, /dev/sdb など)はカーネルの検出順や接続順で変動しうる。
  • 暗号化デバイス(/dev/mapper/cryptX)、論理ボリューム(/dev/vg0/lv_home など)は論理デバイス名として安定した名前を提供する。
  • 運用では物理名に依存せず、論理デバイス名や UUID を用いることが望ましい。これにより、再起動や接続順の変動に強い構成となる。

2. マウントポイント /mnt と ~/mnt の使い分け

  • /mnt:システム全体で共有するマウント用。管理作業や保守のための利用を想定。アクセス制御ミスや競合のリスクがある。
  • ~/mnt:各ユーザーの専用マウント先。ホームディレクトリが 700 または 750 なら他ユーザーから隠蔽され、安全に個人利用できる。

結論:管理用途は /mnt、ユーザー用途は ~/mnt と住み分ける。競合や意図しないアクセスを避け、権限設計も明確になる。


3. fstab / crypttab で UUID を使う理由

  • /etc/fstab はファイルシステムの自動マウント設定を行うが、 /dev/sdX のような物理名を書くと、デバイス順序の変動による影響を受ける。
  • UUID はパーティション固有の識別子。起動順や接続順が変わっても同一領域を確実に参照できる。
  • /etc/crypttab でも同様に、暗号化デバイスを UUID で指定することで、物理デバイス順序の変動に影響されない。

運用の指針(チェックリスト)

  • 新規ディスクやパーティション作成後は UUID を確認して把握しておく。
  • fstab/crypttab の編集後は systemd の依存関係(必要なら x-systemd.requires=… 等)を検討する。
  • 変更のたびにマウントテスト (mount -a)、起動テスト、タイムアウト設定の妥当性を確認する。
  • ユーザー用途の外部デバイスは原則 ~/mnt/ 配下で運用し、/mnt はシステム利用に限定する。

関連コマンド(確認と調査)

# パーティションと UUID の一覧
lsblk -f
blkid

# 現在のマウント状況と解決結果
findmnt

# LUKS デバイスの状態確認(例)
cryptsetup status disk1_crypt

補助ツール(get-serial / get-mountpoint / get-device)

今回、運用を支援するツールとして get-serialget-mountpointget-device の 3 つのスクリプトを作成した。

役割と使いどころ

  • get-serial:物理デバイス(/dev/sdX)のシリアル番号を取得する。
  • get-mountpoint:デバイスパス(/dev/sdXN)から現在のマウントポイントを解決する。
  • get-device:マウントポイント(例:~/mnt/disk1)からベースのブロックデバイス(/dev/sdX)を逆引きする。

使用例

# 物理デバイスのシリアル番号を取得(棚卸しや障害切り分けに)
get-serial /dev/sdb
# => SERIAL123456

# デバイスがどこにマウントされているかを確認
get-mountpoint /dev/sdb1
# => /mnt/disk1

# ベースブロックデバイスを解決(マウントポイント → /dev/sdX)
get-device ~/mnt/disk1
# => /dev/sdb

他からの呼び出し例

  • tcmount.py:アンマウント時に正確なマウントポイントを引数に指定。
  • rsync_backup.sh:論理名から物理名を導き出し、S.M.A.R.T. 情報を参照。

設定例

以下は設定例である。

/etc/fstab

# Root filesystem (LVM)
/dev/mapper/vg0-root     /            ext4   errors=remount-ro                                                                                   0 1

# Encrypted data volumes (例: HDD). cryptsetup に依存し、長時間待たないようタイムアウトを設定
/dev/mapper/disk1_crypt  /mnt/disk1   ext4   relatime,errors=remount-ro,x-systemd.requires=systemd-cryptsetup@disk1_crypt.service,x-systemd.device-timeout=15s  0 2
/dev/mapper/disk2_crypt  /mnt/disk2   ext4   relatime,errors=remount-ro,x-systemd.requires=systemd-cryptsetup@disk2_crypt.service,x-systemd.device-timeout=15s  0 2

# Boot partitions
UUID=11111111-2222-3333-4444-555555555555  /boot      ext4   defaults     0 2
UUID=AAAA-BBBB                              /boot/efi  vfat   umask=0077   0 1

# Swap (LVM)
/dev/mapper/vg0-swap     none         swap   sw          0 0

/etc/crypttab

# 例:ルート下の LUKS コンテナ
sda3_crypt  UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee   none                 luks,x-initrd.attach

# 例:データボリューム。鍵ファイルの取り扱いと権限に注意(0400 推奨)
disk1_crypt UUID=11111111-2222-3333-4444-555555555555   /etc/lvm/lvm.seckey  luks
disk2_crypt UUID=66666666-7777-8888-9999-aaaaaaaaaaaa   /etc/lvm/lvm.seckey  luks

まとめ

  • 物理名ではなく論理名や UUID を使って参照を安定化する。
  • /mnt はシステム利用、~/mnt はユーザー専用の常用先とし、権限面でも安全を確保する。
  • fstab/crypttab は UUID 指定を原則とし、systemd 依存やタイムアウトも含めて起動時挙動を設計する。