Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

25.8.3. 由 / dev/disk/by-* 中的 u dev机制管理的设备名称

udev 机制由三个主要组件组成:
内核
生成在添加、删除或更改设备时发送到用户空间的事件。
udevd 服务
接收事件。
udev 规则
指定 udev 服务接收内核事件时要执行的操作。
这种机制用于 Linux 中的所有设备,而不仅仅是存储设备。对于存储设备,Red Hat Enterprise Linux 包含 udev 规则,它在 /dev/disk/ 目录中创建符号链接,允许存储设备的内容、唯一标识符、其序列号或用于访问该设备的硬件路径。
/dev/disk/by-label/
这个目录中的条目提供了一个符号链接名称,使用存储在该设备中的内容(即数据)中的标签指向存储设备。blkid 实用程序用于从设备读取数据并确定设备的名称(即标签)。例如:
/dev/disk/by-label/Boot
注意
信息是从设备上的内容(即数据)获取的,因此如果内容被复制到另一个设备,该标签将保持不变。
该标签还可用于使用以下语法引用 /etc/fstab 中的设备:
LABEL=Boot
/dev/disk/by-uuid/
此目录中的条目提供一个符号链接名称,使用存储在该设备上的内容(即数据)中的唯一标识符来指代存储设备。blkid 实用程序用于从设备读取数据并获取设备的唯一标识符(即 UUID)。例如:
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
/dev/disk/by-id/
这个目录中的条目提供了一个符号链接名称,它使用唯一标识符(与所有其他存储设备不同)指向存储设备。标识符是设备的属性,但不存储在设备上的内容(即数据)中。例如:
/dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05
/dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05
id 获取自设备的全球 ID 或设备序列号。/dev/disk/by-id/ 条目还可以包含分区号。例如:
/dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05-part1
/dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05-part1
/dev/disk/by-path/
这个目录中的条目提供了一个符号链接名称,它使用用于访问该设备的硬件路径引用存储设备,首先在 PCI 层次结构中引用存储控制器,包括 SCSI 主机、通道、目标和 LUN 号,以及可选的分区号。虽然这些名称最好使用主号码和副名称或 sd 名称,但必须谨慎确保光纤通道 SAN 环境中的目标编号不会改变(例如,通过使用持久绑定),并且在主机适配器移到不同的 PCI 插槽时会更新名称的使用。此外,如果按不同顺序加载驱动程序,或者系统中安装了新的 HBA,则 SCSI 主机编号可能会改变。by-path 列表的示例如下:
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0
/dev/disk/by-path/ 条目还可以包括分区号,例如:
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0-part1

25.8.3.1. udev 设备命名约定的限制

以下是 udev 命名规则的一些限制:
  • 执行查询时可能无法访问该设备,因为 udev 机制可能依赖于在针对 udev 事件 处理 udev 规则时查询存储设备的能力。当设备不在服务器机箱中时,这更可能会在光纤频道、iSCSI 或者 FCoE 存储设备中发生。
  • 内核可能会随时发送 udev 事件,从而导致规则被处理,并可能会导致 /dev/disk/by-*/ 链接被删除(如果该设备无法访问)。
  • 生成 udev 事件和处理时可能会有延迟,例如检测到大量设备时和用户空间 udevd 服务需要一些时间来处理每个设备的规则。这可能会导致内核检测到该设备以及 /dev/disk/by-*/ 名称可用时出现延迟。
  • 规则调用 的 blkid 等外部程序可能会在短时间内打开设备,从而使设备无法被其他用途访问。