2009-06-27 5 views
2

L'API permettant de créer un nouveau volume sur notre réseau de stockage est assez simple. Ce que je n'ai pas réussi à comprendre est comment connecter l'initiateur iSCSI par programme, initialiser l'espace (au sens du gestionnaire de disque de Windows) et enfin le formater et le monter est une lettre de lecteur. J'utilise actuellement win2k3, mais déplacer vers win2k8 est une option si cela simplifie l'implémentation.Comment puis-je programmer un volume iscsi brut dans Windows et le préparer à l'utilisation?

+0

Pour votre information, je finit par abandonner cette approche. J'ai fini par implémenter le système en utilisant des partages de fichiers CIFS au lieu de volumes bruts. C'était assez facile à écrire avec un SAN netapp. Le plus gros problème avec l'utilisation de volumes avec Windows est que si Windows avait vu une copie du volume avant de le monter automatiquement là où c'était auparavant, même si ce n'était pas ce que je voulais. –

Répondre

2

J'ai dû implémenter l'initialisation de disque, le partitionnement et la mise en forme pour l'un des produits de mon entreprise. Je ne peux pas partager le code mais je peux vous orienter dans la bonne direction. L'API que vous souhaitez s'appelle VDS - Virtual Disk Service. C'est une API COM, mais je l'ai utilisée avec succès depuis C++ (avec ATL) et C# (COM interop).

Malheureusement, la documentation manque cruellement; il suffit de vous immerger dans le modèle d'objet, d'écrire du code, et petit à petit, vous en aurez une idée.

Windows Server 2008 est livré avec un wrapper C# non documenté mais assez utilisable autour de VDS. Recherchez une DLL appelée Microsoft.Storage.Vds.dll. Vous pouvez utiliser Reflector pour découvrir ses différentes classes et méthodes. J'ai découvert à ce sujet quand j'ai lu this blog post, dans lequel l'auteur essaye d'initialiser un disque de PowerShell utilisant la DLL mentionnée ci-dessus.

VDS inclut des API pouvant être mises en œuvre par les fournisseurs SAN pour provisionner un LUN et effectuer d'autres tâches SAN; suggère de les éviter et de se concentrer sur le fournisseur de logiciels de base, qui créera des partitions basiques (par opposition à dynamiques) sur un disque MBR ou GPT. Notez que le wrapper Microsoft que j'ai mentionné est un peu léger sur le support GPT; J'ai dû le modifier un peu pour que les disques GPT fonctionnent. VDS est une API complexe et fastidieuse, mais si vous voulez juste initialiser un disque, créer une partition, la formater et la monter sur une lettre de lecteur, la plupart de ce dont vous avez besoin est là et assez facile à faire. Bonne chance.

2

Je l'ai fait à partir de Powershell en utilisant diskpart avec un script.

Quelque chose comme:

$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 
Questions connexes