2009-06-27 8 views
2

SAN에 새 볼륨을 생성하기위한 API는 매우 간단합니다. 내가 알아낼 수 없었던 것은 프로그래밍 방식으로 iSCSI 초기화 프로그램을 연결하고, Windows 디스크 관리자의 의미로 공간을 초기화하고, 마지막으로 포맷하고 드라이브 문자로 마운트하는 방법입니다.원시 iscsi 볼륨을 프로그래밍 방식으로 Windows에 마운트하고 사용할 준비가 되셨습니까?

저는 현재 win2k3을 사용하고 있습니다 만, 이것을 구현하는 것을 단순화하려면 win2k8 로의 이동이 옵션입니다.

+0

참고로, 나는 결국이 방법에 포기했다. 원시 볼륨 대신 CIFS 파일 공유를 사용하여 시스템을 구현했습니다. 이것은 netapp SAN을 사용하여 스크립트하기가 매우 쉽습니다. Windows에서 볼륨을 사용할 때 가장 큰 문제는 이전에 있던 볼륨을 자동으로 마운트하기 전에 Windows에서 볼륨 복제본을 발견 한 경우입니다. –

답변

2

필자는 회사 제품 중 하나에 대해 디스크 초기화, 파티셔닝 및 포맷을 구현해야했습니다. 코드를 공유 할 수는 없지만 올바른 방향으로 안내 할 수 있습니다.

원하는 API는 VDS - Virtual Disk Service입니다. 그것은 COM API지만 C++ (ATL 사용) 및 C# (COM interop)에서 성공적으로 사용했습니다.

아쉽게도 설명서가 부족합니다. 당신은 객체 모델에 몰입하고, 코드를 작성하고, 점차적으로 그것을 느낀다.

Windows Server 2008에는 문서화되어 있지 않지만 VDS와 관련하여 매우 유용한 C# 래퍼가 함께 제공됩니다. Microsoft.Storage.Vds.dll이라는 DLL을 찾습니다. Reflector를 사용하여 다양한 클래스와 메서드를 검색 할 수 있습니다. 저자가 앞서 언급 한 DLL을 사용하여 PowerShell에서 디스크를 초기화하려고 시도하는 this blog post을 읽을 때 알아 냈습니다.

VDS에는 SAN 공급 업체가 구현하여 LUN을 프로비저닝하고 다른 SAN 작업을 수행 할 수있는 API가 포함되어 있습니다. 이를 피하고 MBR 또는 GPT 디스크에서 기본 (동적 인 것과 반대) 파티션을 만드는 기본 소프트웨어 제공 업체에 집중할 것을 제안합니다. 내가 언급 한 Microsoft 래퍼는 GPT 지원에 대한 약간의 정보입니다. GPT 디스크를 작동 시키려면 조금 수정해야했습니다.

VDS는 복잡하고 까다로운 API이지만 디스크를 초기화하고 포맷을 만들고 포맷을 지정하고 드라이브 문자에 마운트하려는 경우 필요한 대부분이 여기에 있으며 매우 쉽게 사용할 수 있습니다. 해야 할 것. 행운을 빕니다.

2

나는 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