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?
Répondre
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.
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
- 1. Comment préparer un projet java?
- 2. Programmer un fichier .vbs à exécuter dans Windows
- 3. Comment masquer le volume complet?
- 4. Comment programmer un plug-in?
- 5. Comment programmer un programme
- 6. mysqli_stmt :: bind_param et mysqli_stmt :: préparer
- 7. Comment préparer un contrôle ActiveX pour livraison sur le Web
- 8. Création d'une cible iSCSI émulée dans un environnement de test/laboratoire à l'aide de Windows Server 2008 R2
- 9. Erreur d'initiateur iSCSI
- 10. Comment régler le volume du système par programme (sous OSX et Windows)
- 11. Basculement pour Windows démarré à partir d'une cible iSCSI à l'aide d'ietd
- 12. Comment programmer les paramètres de renvoi d'appel sur Windows Mobile?
- 13. Programmer l'application dans BREW
- 14. Volume Automount EBS dans l'instance Windows Amazon EC2
- 15. Comment programmer un lecteur de musique simple?
- 16. Comment commencer à apprendre à programmer dans Flex?
- 17. Comment contrôler "Windows XP Volume Control" avec VC#
- 18. Comment éjecter un volume en Java?
- 19. PHP Comment envoyer un paquet HTTP brut
- 20. Comment programmer le numéro de vos threads dans Delphi
- 21. Comment programmer un routeur par programme?
- 22. Préparer un message SMS à partir d'une application iPhone
- 23. Comment définir le volume du matériel dans une application iPhone?
- 24. Comment programmer la dernière heure de connexion à une machine?
- 25. Comment contrôler le volume audio dans .NET 3.5?
- 26. Comment détecter le volume actuel du périphérique audio
- 27. Mesurer le volume de données téléchargées
- 28. Comment puis-je obtenir un fichier texte brut dans Flash?
- 29. Programmer un travail dans un serveur Web hébergé
- 30. Programmer les onglets dans l'iPhone
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. –