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
lsblk -f
blkid
# 現在のマウント状況と解決結果
findmnt
# LUKS デバイスの状態確認(例)
cryptsetup status disk1_crypt
補助ツール(get-serial / get-mountpoint / get-device)
今回、運用を支援するツールとして get-serial、get-mountpoint、get-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
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
/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
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 依存やタイムアウトも含めて起動時挙動を設計する。