web-dev-qa-db-ja.com

WindowsでiSCSIの詳細から物理パーティション名を取得するにはどうすればよいですか?

たとえば、次のように、\Device\Harddisk2\Partition1スタイルのパーティションの名前が必要なソフトウェアがあります。 WinObj で。このパーティション名は、パーティションの基礎となるiSCSI接続の詳細から取得したいと思います。問題は、ディスクの順序が固定されていないことです。接続され、初期化されているデバイスの順序によっては、ディスクが移動する可能性があります。

したがって、ポータル名(iSCSIターゲットのDNS)、ターゲットIQNなどがあるとします。システム内のどのボリュームがそれに関連しているかを自動化された方法で何らかの方法で検出したいと思います。

目的の情報にいくらか近づくPowerShellWMIクエリを作成できます。

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

ここのNameから、Ithinkパーティション番号に1を追加することで、対応する名前を作成できます。\Device\Harddisk0\Partition1- Partition0は、ディスク全体にマッピングされている偽のパーティションのようです。

しかし、正確なサイズの一致に基づいて推測しない限り、上記には、基盤となる物理デバイスにマップするための十分な情報がありません。

SCSIデバイスに関する情報を入手できますが、結合するのに役立ちません(iSCSIターゲットは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...

同様に、次のようなクエリを実行できます。

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

これらの人は、私のiSCSIターゲット名とGUIDボリューム名(\\?\Volume{guid-goes-here}のようなボリューム名))に関連する情報を返しますが、GUID volume名前は私には良くありません。また、ターゲット名と参加できるボリュームとの間に信頼できる対応関係がないようです。

IQN(例:iqn.1992-01.com.example:storage:diskarrays-sn-a8675309)からそのターゲットからマップされた物理パーティションに移動する簡単な方法を見つけることができません。

手でやる方法は?ディスクの管理を開始し、正しいサイズのパーティションを探し、そのドライバーがNEXENTA COMSTARと表示されていることを確認し、ディスク番号を確認します。しかし、まったく同じサイズのiSCSIボリュームが複数ある場合は、これでも信頼性がありません。

助言がありますか?

4
Barry Kelly

1つの可能性:GUIDボリューム名(質問ではこれが明確ではありません)が見つかり、ボリュームにドライブ文字が割り当てられている場合、Win32_VolumeはGUIDボリューム名をドライブ文字にリンクすると、Win32_LogicalDiskToPartitionがドライブ文字をディスク番号とパーティション番号にリンクします。

しかしながら、 MSiSCSIInitiator_SessionClassより良いオプションのようです。このコマンドは私のために働きます:

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

複数のパーティションが存在する可能性がある場合は、Win32_DiskDriveToDiskPartitionクラスを使用してそれらをリストできます。

2
Harry Johnston