2.2. udev 设备命名规则
用户空间设备管理器(udev
)子系统允许您为设备分配持久名称定义规则。这些规则存储在带有 .rules
扩展名的文件中。有两个用于存储 udev 规则的主要位置:
-
/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
规则,以指定如何根据序列号、全球名称(WWN)标识符或其他特定于设备的特征来命名设备。通过定义特定的命名规则,您可以精确控制设备如何在系统中被识别。要在 /dev 中为设备创建特定的自定义符号链接,请查看系统中的 udev (7)
手册页。
虽然 udev
规则非常灵活,但了解 udev
限制很重要:
-
可访问性计时:在
udev
查询时可能无法访问一些存储设备。 -
基于事件的处理:内核可以随时发送
udev
事件,如果设备无法访问,可能会触发规则处理和链接删除。 - 处理延迟:事件生成和处理之间可能会有延迟,特别是有多个设备时,从而导致内核检测和链路可用性之间的滞后。
-
设备可访问性:
udev
规则调用的外部程序(如blkid
)可能会短暂打开该设备,使其他任务暂时无法访问它。 -
链接更新:由
/dev/disk/
中的udev
管理的设备名称可能会在主版本间有所变化,需要链接更新。
下表列出了 /dev/disk 中可用的符号链接。
设备类型 | Nonpersistent Name (内核名称) | 持久性 Symlink 名称 |
---|---|---|
真实设备 | ||
NVMe (Non-Volatile Memory Express) | /dev/nvme* |
/dev/disk/by-id/nvme-<wwid> |
SCSI (Small 计算机系统接口) | /dev/sd*, /dev/sr* |
/dev/disk/by-id/scsi-<model>_<serial> |
ata (高级技术附加)/atapi (ATA 数据包接口) | /dev/sd*, /dev/sr* |
/dev/disk/by-id/ata-<model>_<serial> |
cciss (SCSI-3 支持的Compaq 命令接口) | /dev/cciss* |
/dev/disk/by-id/cciss-<model>_<serial> |
VirtIO (虚拟输入输出) | /dev/vd* | /dev/disk/by-id/virtio-<serial> |
PMEM (持久内存) | /dev/pmem* | /dev/disk/by-id/pmem-<uuid> |
MMC (多媒体卡) | /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 (多个设备) | /dev/md* |
/dev/md/<devname> |
分区(位于实际或者虚拟设备之上) | ||
(任何) | (任何) |
/dev/disk/by-partuuid/<uuid> |
LVM PV (逻辑卷管理器物理卷;在实际或者虚拟设备之上) | ||
(任何) | (任何) | /dev/disk/by-id/lvm-pv-uuid-<pvuuid> |
2.2.1. 获取现有设备的设备链接值 复制链接链接已复制到粘贴板!
您可以从当前 udev
数据库获取现有设备的设备链接值。
先决条件
- 该设备存在并连接到该系统。
流程
列出现有设备的
/dev
下所有分配的设备符号链接(DEVLINKS
)到基本内核设备节点(DEVNAME
):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 nvme0n1 替换为您的设备名称。
您还可以使用以下命令获取所有 devlinks 指向的基本内核名称:
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! Toggle word wrap Toggle overflow 内核名称和其任何 devlinks 可以互换使用。
您可以使用以下命令之一获取 devlinks 的完整列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow