Come posso montare programmaticamente un volume iscsi non elaborato in Windows e renderlo pronto per l'uso?

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

  •  20-08-2019
  •  | 
  •  

Domanda

L'API per la creazione di un nuovo volume sulla nostra SAN è piuttosto semplice. Quello che non sono stato in grado di capire è come collegare programmaticamente l'iniziatore iSCSI ad esso, inizializzare lo spazio (nel senso di Gestione disco di Windows) e infine formattarlo e montarlo è una lettera di unità.

Attualmente uso win2k3, tuttavia passare a win2k8 è un'opzione se semplificherebbe l'implementazione.

È stato utile?

Soluzione

Ho dovuto implementare l'inizializzazione, il partizionamento e la formattazione del disco per uno dei prodotti della mia azienda. Non riesco a condividere il codice ma posso indicarti la giusta direzione.

L'API desiderata si chiama VDS - Disco virtuale servizio. È un'API COM, ma l'ho utilizzata con successo da C ++ (con ATL) e C # (interoperabilità COM).

Purtroppo la documentazione è piuttosto carente; devi solo immergerti nel modello a oggetti, scrivere un po 'di codice e gradualmente ne hai un'idea.

Windows Server 2008 viene fornito con un wrapper C # non documentato ma abbastanza utilizzabile attorno a VDS. Cercare una DLL denominata Microsoft.Storage.Vds.dll. È possibile utilizzare Reflector per scoprire le sue varie classi e metodi. L'ho scoperto quando ho letto questo post sul blog , in cui l'autore sta tentando di inizializzare un disco da PowerShell utilizzando la suddetta DLL.

VDS include API che potrebbero essere implementate dai fornitori di SAN per eseguire il provisioning di un LUN e eseguire altre operazioni SAN; ti suggerisco di evitarli e di concentrarti sul fornitore di software di base, che creerà partizioni di base (anziché dinamiche) su un disco MBR o GPT. Si noti che il wrapper Microsoft che ho citato è un po 'leggero sul supporto GPT; Ho dovuto modificarlo un po 'per far funzionare i dischi GPT.

VDS è un'API complessa e delicata, ma se stai solo cercando di inizializzare un disco, creare una partizione, formattarlo e montarlo su una lettera di unità, la maggior parte di ciò che ti serve è lì e abbastanza facile da fare . Buona fortuna.

Altri suggerimenti

L'ho fatto da Powershell usando diskpart con uno script.

Qualcosa del tipo:

$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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top