Eu tenho um software que precisa do nome de uma partição em \Device\Harddisk2\Partition1
style, como mostrado, por exemplo, em WinObj . Eu quero obter esse nome de partição de detalhes da conexão iSCSI que sustenta a partição. O problema é que a ordem de disco não é fixa - dependendo de quais dispositivos estão conectados e inicializados em que ordem, ela pode se mover.
Suponhamos que eu tenha o nome do portal (DNS do iSCSI target), o IQN de destino, etc. Gostaria de descobrir de alguma forma quais volumes no sistema se relacionam com ele, de maneira automatizada.
Eu posso escrever algumas consultas WMI do PowerShell que se aproximam das informações desejadas:
PS> get-wmiobject -class Win32_DiskPartition
NumberOfBlocks : 204800
BootPartition : True
Name : Disk #0, Partition #0
PrimaryPartition : True
Size : 104857600
Index : 0
...
Do Name
aqui, acho que posso fabricar o nome correspondente adicionando 1 ao número da partição: \Device\Harddisk0\Partition1
- Partition0
parece ser um mapeamento de partição falso para o todo disco.
Mas o texto acima não tem informações suficientes para mapear para o dispositivo físico subjacente, a menos que eu adivinhe com base na correspondência exata de tamanho.
Eu posso obter algumas informações sobre dispositivos SCSI, mas não é útil unir as coisas (o destino do 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...
Da mesma forma, posso executar consultas como estas:
PS> get-wmiobject -namespace ROOT\WMI -class MSiSCSIInitiator_TargetClass
PS> get-wmiobject -namespace ROOT\WMI -class MSiSCSIInitiator_PersistentDevices
Esses caras retornam informações relacionadas ao meu nome de destino iSCSI e ao nome do volume GUID, respectivamente (um nome de volume como \?\Volume{guid-goes-here}
), mas o nome do volume GUID não é bom para mim e parece não ser confiável correspondência entre o nome do alvo e o volume que eu posso juntar.
Eu simplesmente não consigo encontrar uma maneira fácil de obter de um IQN (por exemplo, iqn.1992-01.com.example:storage:diskarrays-sn-a8675309
) para partições físicas mapeadas desse destino.
A maneira como faço isso manualmente? Eu inicio o Gerenciamento de Disco, e procuro por uma partição do tamanho correto, verifico que seu driver diz NEXENTA COMSTAR, e observe o número do disco. Mas mesmo isso não é confiável se eu tiver vários volumes iSCSI do mesmo tamanho exato.
Alguma sugestão?