如何在Windows中以编程方式挂载原始iSCSI容量并准备好使用?

用于在我们的SAN上创build新卷的API非常简单。 我无法弄清楚的是如何以编程方式将iSCSI启动器连接到它,初始化空间(在Windows磁盘pipe理器的意义上),最后格式化并挂载它是一个驱动器号。

我目前使用win2k3,但是如果能够简化实现这个,移动到win2k8是一个选项。

我必须为我公司的一个产品实现磁盘初始化,分区和格式化。 我不能分享代码,但我可以指出你在正确的方向。

你想要的API叫做VDS – 虚拟磁盘服务 。 这是一个COM API,但我已经成功地从C + +(与ATL)和C#(COM互操作)使用它。

可悲的是文件是相当缺乏, 你只需沉浸在对象模型中,编写一些代码,然后逐渐感觉到它。

Windows server 2008附带了一个没有文档但是相当有用的C#包装器,围绕着VDS。 寻找一个名为Microsoft.Storage.Vds.dll的DLL。 你可以使用Reflector来发现它的各种类和方法。 当我阅读这篇博文时,我发现了这个问题,其中作者试图使用上述DLL从PowerShell初始化一个磁盘。

VDS包括可由SAN供应商实施的API,用于配置LUN和执行其他SAN; 建议您避免使用这些内存,并将重点放在基本的软件提供程序上,这样可以在MBR或GPT磁盘上创建基本的(而不是动态的)分区。 请注意,我提到的微软包装是有点GPT支持; 我不得不修改一下让GPT磁盘工作。

VDS是一个复杂和挑剔的API,但是如果你只是想要初始化一个磁盘,创建一个分区,格式化,并挂载到一个盘符,大部分你需要的是在那里,很容易做到。 祝你好运。

我从Powershell使用diskpart和脚本完成了这个工作。

就像是:

$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