簡體   English   中英

如何以編程方式在Windows中掛載原始iscsi卷,並准備使用它?

[英]How do I programatically mount a raw iscsi volume in windows, and get it ready to use?

在我們的SAN上創建新卷的API非常簡單。 我還不能弄清楚如何以編程方式將iSCSI啟動器連接到它,初始化空間(就Windows磁盤管理器而言),最后格式化並安裝它是一個驅動器號。

我目前使用的是win2k3,但是如果可以簡化實現,可以選擇使用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,但是,如果您只是想初始化磁盤,創建分區,對其進行格式化並將其裝入驅動器號,那么您所需的大部分就已經存在並且相當容易實現。 祝好運。

我已經從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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM