2.2. udev デバイスの命名規則
ユーザー空間デバイスマネージャー (udev
) サブシステムを使用すると、デバイスに永続的な名前を割り当てるためのルールを定義できます。これらのルールは、.rules
拡張子を持つファイルに保存されます。udev ルールを保存する主な場所は 2 つあります。
-
/usr/lib/udev/rules.d/
ディレクトリーには、インストールされたパッケージに付属するデフォルトのルールが含まれています。 -
/etc/udev/rules.d
ディレクトリーはカスタムudev
ルール用です。
/usr/lib/udev/rules.d/
のルールが変更された場合、更新中にパッケージのルールファイルによって上書きされます。したがって、手動またはカスタムのルールは /etc/udev/rules.d
に追加する必要があります。これらのルールは、明示的に削除されるまで保持されます。使用する前に、両方のディレクトリーの udev
ルールがマージされます。/etc/udev/rules.d
内のルールが /usr/lib/udev/rules.d/
内のルールと同じ名前である場合、前者のルールが優先されます。
これらのルールの目的は、システムの再起動後や設定の変更後も、ストレージデバイスが一貫して予測どおりに識別されるようにすることです。
udev
ルールは、デバイスの追加、変更、または削除を通知する受信イベントに基づいて実行するアクションを定義します。これは、永続ストレージ属性の値を収集し、収集された情報に基づいて udev
に /dev
コンテンツを作成するように指示するのにも役立ちます。udev
ルールは、キーと値のペアを使用して人間が読める形式で記述されます。
ストレージデバイスの場合、udev
ルールは /dev/disk/
ディレクトリー内のシンボリックリンクの作成を制御します。これらのシンボリックリンクはストレージデバイスに使いやすいエイリアスを提供するため、これらのデバイスの参照と管理がより便利になります。
カスタムの udev
ルールを作成して、シリアル番号、World Wide Name (WWN) 識別子、その他のデバイス固有の特性などのさまざまな属性に基づいてデバイスに名前を付ける方法を指定できます。特定の命名規則を定義することにより、システム内でデバイスを識別する方法を正確に制御できます。デバイスの特定のカスタムシンボリックリンクを/dev に作成するには、システムの udev(7)
man ページを参照してください。
udev
ルールは非常に柔軟ですが、udev
の制限事項に注意することが重要です。
-
アクセス可能なタイミング: 一部のストレージデバイスは、
udev
クエリー時にアクセスできない場合があります。 -
イベントベースの処理: カーネルはいつでも
udev
イベントを送信できます。そのため、デバイスがアクセスできない場合は、ルール処理とリンクの削除をトリガーする可能性があります。 - 処理の遅延: 特に多数のデバイスがある場合、イベントの生成と処理の間に遅延が発生する可能性があります。これにより、カーネルがデバイスを検出してからリンクが利用可能になるまでに遅れが生じます。
-
デバイスのアクセシビリティー:
udev
ルールによって呼び出される外部プログラム (blkid
など) がデバイスを一時的に開き、他のタスクからデバイスに一時的にアクセスできなくなる可能性があります。 -
リンクの更新:
/dev/disk/
でudev
によって管理されるデバイス名は、メジャーリリース間で変更される可能性があります。その場合、リンクの更新が必要になります。
次の表は、/dev/disk で使用可能なシンボリックリンクを示しています。
デバイスの種別 | 非永続名 (カーネル名) | 永続的なシンボリックリンク名 |
---|---|---|
実際のデバイス | ||
nvme (Non-Volatile Memory Express) | /dev/nvme* |
/dev/disk/by-id/nvme-<wwid> |
scsi (Small Computer System Interface) | /dev/sd*、/dev/sr* |
/dev/disk/by-id/scsi-<model>_<serial> |
ata (Advanced Technology Attachment)/atapi (ATA Packet Interface) | /dev/sd*、/dev/sr* |
/dev/disk/by-id/ata-<model>_<serial> |
cciss (Compaq Command Interface for SCSI-3 Support) | /dev/cciss* |
/dev/disk/by-id/cciss-<model>_<serial> |
virtio (Virtual Input Output) | /dev/vd* | /dev/disk/by-id/virtio-<serial> |
pmem (Persistent Memory) | /dev/pmem* | /dev/disk/by-id/pmem-<uuid> |
mmc (MultiMedia Card) | /dev/mmcblk* | /dev/disk/by-id/mmc-<name>_<serial> |
memstick (Memory Stick) | /dev/msblk* | /dev/disk/by-id/memstick-<name>_<serial> |
仮想デバイス | ||
loop | /dev/loop* |
/dev/disk/by-loop-inode/<id_loop_backing_device>-<id_loop_backing_inode> |
dm (device-mapper) | /dev/dm-* |
/dev/mapper/<name> |
md (multiple device) | /dev/md* |
/dev/md/<devname> |
パーティション (実デバイス上または仮想デバイス上) | ||
(any) | (any) |
/dev/disk/by-partuuid/<uuid> |
LVM PV (論理ボリュームマネージャー物理ボリューム。実デバイスまたは仮想デバイス上) | ||
(any) | (any) | /dev/disk/by-id/lvm-pv-uuid-<pvuuid> |
2.2.1. 既存デバイスのデバイスリンク値を取得する
現在の udev
データベースから、既存のデバイスのデバイスリンクの値を取得できます。
前提条件
- デバイスが存在し、システムに接続されています。
手順
既存のデバイスの
/dev
配下のベースカーネルデバイスノード (DEVNAME
) に割り当てられたすべてのデバイスシンボリックリンク (DEVLINKS
) をリスト表示します。udevadm info --name /dev/nvme0n1 --query property --property DEVLINKS --value
# udevadm info --name /dev/nvme0n1 --query property --property DEVLINKS --value /dev/disk/by-path/pci-0000:00:02.0-nvme-1 /dev/disk/by-diskseq/6 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1_1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1-ns-1 /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001
Copy to Clipboard Copied! nvme0n1 をデバイス名に置き換えます。
次のコマンドを使用して、すべての devlink が指すベースカーネル名を取得することもできます。
udevadm info --name /dev/nvme0n1 --query property --property DEVNAME --value /dev/nvme0n1
# udevadm info --name /dev/nvme0n1 --query property --property DEVNAME --value /dev/nvme0n1
Copy to Clipboard Copied! カーネル名とその devlink は互換的に使用できます。
次のコマンドを使用し、devlink の 1 つを使用して devlink の完全なリストを取得できます。
udevadm info --name /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001 --query property --property DEVLINKS --value
# udevadm info --name /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001 --query property --property DEVLINKS --value /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1 /dev/disk/by-diskseq/6 /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1-ns-1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1_1 /dev/disk/by-path/pci-0000:00:02.0-nvme-1
Copy to Clipboard Copied!