[dm-devel] Linux utility to determine WWN from a LUN number
Chip Coldwell
coldwell at redhat.com
Fri Mar 14 14:24:43 UTC 2008
On Fri, 14 Mar 2008, Hannes Reinecke wrote:
> The WWN is either in VPD page 0x83 or 0x80 (in that order of preference).
> You should be using the utility 'scsi_id' to generate the WWN for a given
> path (eg call it like 'scsi_id -g -u -s /block/sdX'), as this is the same
> program multipath is using.
scsi_id comes with udev, and uses an SG_IO to retrieve VPD page 0x83
or 0x80. It does a little bit more than that, however, and will
return a slightly different WWN than sg3_utils. According to SPC3, an
Identification Descriptor on VPD page 0x83 begins with a 4-bit code
set, then a 4-bit protocol identifier, then a 4-bit identifier type.
The identifier types are
0x00 vendor specific
0x01 T10 vendor ID based
0x02 EUI-64 based
0x03 NAA (Name Assigning Authority?)
0x04 relative target port id
0x05 target port group
0x06 logical unit group
0x07 MD5 logical unit id
0x08 SCSI name string
When the scsi_id program parses the VPD 0x83 data, it will prepend
this number to the identifier found in the VPD 0x83 descriptor.
sg3_utils does not do this. For example:
# scsi_id -g -s /block/sda
3600601601040190000c7da47f286dc11
# sg_inq -p 0x83 /dev/sda
VPD INQUIRY: Device Identification page
Designation descriptor number 1, descriptor length: 20
id_type: NAA, code_set: Binary
associated with the addressed logical unit
NAA 6, IEEE Company_id: 0x6016
Vendor Specific Identifier: 0x10401900
Vendor Specific Identifier Extension: 0xc7da47f286dc11
[0x600601601040190000c7da47f286dc11]
Designation descriptor number 2, descriptor length: 20
id_type: vendor specific [0x0], code_set: Binary
associated with the addressed logical unit
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Designation descriptor number 3, descriptor length: 8
id_type: Relative target port, code_set: Binary
associated with the target port
Relative target port: 0x1
Designation descriptor number 4, descriptor length: 8
id_type: Target port group, code_set: Binary
associated with the target port
Target port group: 0x1
In my scsitool, I chose to emulate the scsi_id behavior
# scsitool --devname=sda --hbtl --wwid
sda 0:0:0:0 3600601601040190000c7da47f286dc11
> So the scsi_id program will give a you a mapping sdX -> WWN. And to get
> the mapping 'LUN -> sdX' you can simply do a
>
> ( cd -P /sys/block/sdX/device; echo ${PWD##*/} )
>
> which will display the SCSI ID of the device; the last number of which is
> the LUN presented to the OS.
>
> The remainder is left as an exercise to the reader :-)
The --hbtl switch to scsitool gives host:bus:target:lun. If the
device is multipathed, you will see the same lun with different h:b:t
combinations. So what you could do is
scsitool --wwid --hbtl | awk '/:2 $/ { print $1 }' | sort -u
That gives you the WWID of LUN 2. Unfortunately, there seems to be a
trailing space in the output ... I'll fix that and turn a rev.
Chip
--
Charles M. "Chip" Coldwell
Senior Software Engineer
Red Hat, Inc
978-392-2426
GPG ID: 852E052F
GPG FPR: 77E5 2B51 4907 F08A 7E92 DE80 AFA9 9A8F 852E 052F
More information about the dm-devel
mailing list