![udev 从哪里获取 iSCSI 设备的 ID?](https://linux22.com/image/18650/udev%20%E4%BB%8E%E5%93%AA%E9%87%8C%E8%8E%B7%E5%8F%96%20iSCSI%20%E8%AE%BE%E5%A4%87%E7%9A%84%20ID%EF%BC%9F.png)
我正在使用 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 如何获取信息的更多信息: