Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I've got a piece of software that needs the name of a partition in \Device\Harddisk2\Partition1 style, as shown e.g. in WinObj. I want to get this partition name from details of the iSCSI connection that underlies the partition. The trouble is that disk order is not fixed - depending on what devices are connected and initialized in what order, it can move around.

So suppose I have the portal name (DNS of the iSCSI target), target IQN, etc. I'd like to somehow discover which volumes in the system relate to it, in an automated fashion.

I can write some PowerShell WMI queries that get somewhat close to the desired info:

PS> get-wmiobject -class Win32_DiskPartition
NumberOfBlocks   : 204800
BootPartition    : True
Name             : Disk #0, Partition #0
PrimaryPartition : True
Size             : 104857600
Index            : 0
...

From the Name here, I think I can fabricate the corresponding name by adding 1 to the partition number: \Device\Harddisk0\Partition1 - Partition0 appears to be a fake partition mapping to the whole disk.

But the above doesn't have enough information to map to the underlying physical device, unless I take a guess based on exact size matching.

I can get some info on SCSI devices, but it's not helpful in joining things up (iSCSI target is Nexenta/Solaris COMSTAR):

PS> get-wmiobject -class Win32_SCSIControllerDevice
__GENUS             : 2
__CLASS             : Win32_SCSIControllerDevice
...
Antecedent          : \\COBRA\root\cimv2:Win32_SCSIController.DeviceID="ROOT\\ISCSIPRT\\0000"
Dependent           : \\COBRA\root\cimv2:Win32_PnPEntity.DeviceID="SCSI\\DISK&VEN_NEXENTA&PROD_COMSTAR...

Similarly, I can run queries like these:

PS> get-wmiobject -namespace ROOT\WMI -class MSiSCSIInitiator_TargetClass
PS> get-wmiobject -namespace ROOT\WMI -class MSiSCSIInitiator_PersistentDevices

These guys return information relating to my iSCSI target name and the GUID volume name respectively (a volume name like \\?\Volume{guid-goes-here}), but the GUID volume name is no good to me, and there doesn't appear to be a reliable correspondence between the target name and the volume that I can join on.

I simply can't find an easy way of getting from an IQN (e.g. iqn.1992-01.com.example:storage:diskarrays-sn-a8675309) to physical partitions mapped from that target.

The way I do it by hand? I start Disk Management, and look for a partition of the correct size, verify that its driver says NEXENTA COMSTAR, and look at the disk number. But even this is unreliable if I have multiple iSCSI volumes of the exact same size.

Any suggestions?

share|improve this question

1 Answer 1

up vote 1 down vote accepted

One possibility: if you can find the GUID volume name (your question doesn't make this clear) and if the volume has a drive letter assigned, then Win32_Volume will link the GUID volume name to the drive letter and Win32_LogicalDiskToPartition will link the drive letter to the disk number and partition number.

However, MSiSCSIInitiator_SessionClass looks to be a better option. This command works for me:

PS C:\Windows\system32> (get-wmiobject -namespace ROOT\WMI -class MSiSCSIInitiator_SessionClass -filter "TargetName='iqn.2001-05.com.equallogic:0-8a0906-d27481f06-93a000d015c4ed69-oslo-san-1'").Devices | Select -property LegacyName

LegacyName
----------
\\.\PhysicalDrive2

If there might be more than one partition, the Win32_DiskDriveToDiskPartition class can be used to list them.

share|improve this answer
    
Thanks! I was able to massage that into the format I needed. In my usage, a raw partition covers the whole disk, so I didn't need further mapping. –  Barry Kelly Jul 8 '12 at 7:56
    
Also: Because it's a raw partition, there is nothing Windows maps to a drive letter by default; and there is no desire to further litter the limited drive letter namespace with something that Windows can't read. –  Barry Kelly Jul 8 '12 at 8:04
    
Theoretically, you could have assigned a drive letter on-the-fly and removed it again once you'd gotten the information you needed. Luckily you don't need to do that. :-) –  Harry Johnston Jul 8 '12 at 21:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.