Como faço para programaticamente montar um volume iSCSI cru em janelas, e obtê-lo pronto para usar?

StackOverflow https://stackoverflow.com/questions/1053763

  •  20-08-2019
  •  | 
  •  

Pergunta

A API para criar um novo volume em nosso SAN é bastante simples. O que eu não tenho sido capaz de descobrir é como conectar programaticamente o iniciador iSCSI para isso, inicializar o espaço (no sentido janelas gerenciador de disco) e, finalmente, formatá-lo e montá-lo é uma letra de unidade.

Eu uso atualmente win2k3, no entanto de se mudar para Win2k8 é uma opção se ele iria simplificar a implementação desta.

Foi útil?

Solução

Eu tive de implementar a inicialização do disco, particionamento e formatação para um dos produtos da empresa. Eu não posso compartilhar o código, mas eu você pode apontar na direção certa.

A API que você quer é chamado VDS - disco virtual serviço. É uma API COM, mas eu usei-o com sucesso do C ++ (com ATL) e C # (interoperabilidade).

Infelizmente, a documentação é bastante falta; você só tem que mergulhar no modelo de objeto, escrever algum código, e, gradualmente, você começa uma sensação para ela.

Windows Server 2008 é enviado com a C # wrapper em situação irregular, mas bastante útil em torno VDS. Procure um DLL chamado Microsoft.Storage.Vds.dll. Você pode usar o refletor para descobrir suas diversas classes e métodos. Eu descobri sobre isso quando eu li este post , em que o autor está tentando inicializar um disco de PowerShell usando a DLL acima mencionado.

VDS inclui APIs que podem ser implementadas pelos fornecedores de SAN para provisionar um LUN e fazer outras coisas SAN; sugiro que você evite aqueles e focar o fornecedor de software básico, que irá criar básica (em oposição a dinâmica) partições de cada um disco MBR ou GPT. Note que a Microsoft invólucro mencionei é um pouco luz sobre suporte GPT; Eu tive que modificá-lo um pouco para conseguir discos GPT trabalho.

VDS é uma API complexa e mimado, mas se você está olhando apenas para inicializar um disco, criar uma partição, formatá-lo e montá-lo em uma letra de unidade, mais do que você precisa está lá e bastante fácil de fazer . Boa sorte.

Outras dicas

Eu tenho feito isso desde o PowerShell usando diskpart com um script.

Algo como:

$target    = ''    #Desired target IQN
$partition = 1     #Desired partition
$drvLetter = ''    #Desired drive letter

#get the disk device number from the iscsi session class (diskpart needs it)
$iscsiSsn = gwmi -namespace "root\wmi" -class MSiSCSIInitiator_SessionClass
$diskNum = ($($iscsiSsn | where { $_.targetname -eq $target}).devices).deviceNumber

#create the diskpart script on-the-fly then call the utility
$dskPrtScr = "$($env:temp)\diskpart.scr"
"sel disk $diskNum`nsel par 1`nassign letter=$drvLetter`nexit" | out-file $dskPrtScr -encoding ascii
diskpart /s $dskPrtScr
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top