udev 从哪里获取 iSCSI 设备的 ID?

udev 从哪里获取 iSCSI 设备的 ID?

我正在使用 iscsi-initiator-utils 成功地在 CentOS 5 上使用一些 iscsi 设备,并且我在 /dev/disk 中有一些由 udev 创建的符号链接:

# ls -l /dev/disk/by-path/ip-* /dev/disk/by-id/scsi-*
lrwxrwxrwx 1 root root 9 Sep 29 15:41 /dev/disk/by-id/scsi-14f504e46494c45006779706e4d772d746d36582d6869556e -> ../../sdb
lrwxrwxrwx 1 root root 9 Sep 29 15:41 /dev/disk/by-path/ip-192.168.20.149:3260-iscsi-iqn.2006-01.com.openfiler:tsn.0a16ba8cb6c9-lun-0 -> ../../sdb

我知道 by-path 是设备的 IQN,并且我推测 by-id 是 SCSI 设备标识符。

我想知道如何自己从 /dev/sdb 获取这些值。 scsi_id -g /dev/sdb什么也不返回。

(我知道我可以映射符号链接并从文件名中删除 ID,但这将是多余的:udev 正在从某个地方获取这些 ID,我想知道在哪里)。

答案1

尝试udevinfo命令

man 7 udev

例子:

[root@centos ~]# udevinfo -q all -n /dev/sda1 | grep 'ID_FS_UUID=' | awk -F'='  '{print $2}'
358c8298-3889-4982-8831-817a18ae4e67

[root@centos ~]# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Dec  1 12:47 358c8298-3889-4982-8831-817a18ae4e67 -> ../../sda1
[root@centos ~]# readlink -e /dev/disk/by-uuid/358c8298-3889-4982-8831-817a18ae4e67 
/dev/sda1

另一种是 blkid,它与 udev 集成以显示 uuid

[root@centos ~]# blkid 
/dev/mapper/VolGroup00-LogVol01: TYPE="swap" 
/dev/mapper/VolGroup00-LogVol00: UUID="7951711f-0564-46a5-8e1c-427eff4b4115" TYPE="ext3" 
/dev/sda1: LABEL="/boot" UUID="358c8298-3889-4982-8831-817a18ae4e67" TYPE="ext3" 
/dev/hdc: LABEL="VBOXADDITIONS_4.1.2_73507" TYPE="iso9660" 
/dev/VolGroup00/LogVol00: UUID="7951711f-0564-46a5-8e1c-427eff4b4115" TYPE="ext3" 
/dev/VolGroup00/LogVol01: TYPE="swap" 

答案2

udev 监听内核生成的 uevent。您需要构建一些东西来监听它们,以与 udev 相同的方式获取此信息。以下是一些示例代码和有关执行此操作的讨论:

http://lwn.net/Articles/242046/

有关 udev 如何获取信息的更多信息:

http://en.wikipedia.org/wiki/Udev#Operation

相关内容