Как программно смонтировать необработанный том iscsi в Windows и подготовить его к использованию?
API для создания нового тома в нашей сети хранения данных довольно прост. Что я не смог понять, так это как программно подключить к нему инициатор iSCSI, инициализировать пространство (в смысле диспетчера дисков Windows) и, наконец, отформатировать его и смонтировать его как букву диска.
В настоящее время я использую win2k3, однако переход на win2k8 является вариантом, если это упростит реализацию этого.
2 ответа
Мне пришлось реализовать инициализацию, разбиение и форматирование диска для одного из продуктов моей компании. Я не могу поделиться кодом, но могу указать вам правильное направление.
API, который вы хотите, называется VDS - Virtual Disk Service. Это COM API, но я успешно использовал его из C++ (с ATL) и C# (COM-взаимодействие).
К сожалению, документации не хватает; вам просто нужно погрузиться в объектную модель, написать некоторый код, и постепенно вы почувствуете это.
Windows Server 2008 поставляется с недокументированной, но довольно удобной оболочкой C# для VDS. Найдите библиотеку под названием Microsoft.Storage.Vds.dll. Вы можете использовать Reflector, чтобы обнаружить его различные классы и методы. Я узнал об этом, когда прочитал это сообщение в блоге, в котором автор пытается инициализировать диск из PowerShell, используя вышеупомянутую DLL.
VDS включает API, которые могут быть реализованы поставщиками SAN для предоставления 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