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

我目前使用 win2k3,但是如果迁移到 win2k8 可以简化实现,那么迁移到 win2k8 也是一个选择。

有帮助吗?

解决方案

我必须为我公司的一款产品实现磁盘初始化、分区和格式化。我无法分享代码,但我可以为您指出正确的方向。

你想要的 API 叫做 VDS - 虚拟磁盘服务. 。它是一个 COM API,但我已经在 C++(使用 ATL)和 C#(COM 互操作)中成功使用了它。

遗憾的是,文档非常缺乏;你只需要让自己沉浸在对象模型中,编写一些代码,慢慢地你就能感受到它了。

Windows Server 2008 附带了一个未记录但非常有用的 VDS 周围的 C# 包装器。查找名为 Microsoft.Storage.Vds.dll 的 DLL。您可以使用 Reflector 来发现它的各种类和方法。我在阅读时发现了这一点 这篇博文, ,其中作者尝试使用上述 DLL 从 PowerShell 初始化磁盘。

VDS 包括可由 SAN 供应商实施的 API,用于配置 LUN 并执行其他 SAN 操作;建议您避免这些并专注于基本软件提供商,它将在 MBR 或 GPT 磁盘上创建基本(而不是动态)分区。请注意,我提到的 Microsoft 包装器对 GPT 支持有点少;我必须对其进行一些修改才能使 GPT 磁盘正常工作。

VDS 是一个复杂且挑剔的 API,但如果您只是想初始化磁盘、创建分区、格式化分区并将其安装到驱动器盘符,那么您需要的大部分内容都在那里并且相当容易完成。祝你好运。

其他提示

我已经使用DISKPART与脚本做到了这一点从Powershell的。

是这样的:

$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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top