Q: How do I determine if a disk is connected via iSCSI?
A: The easiest way to determine this, is by using diskpart, using the commands below. In the “Type” field if it lists iSCSI, then the disk is an iSCSI connected disk.
Diskpart
Select Disk X (Where X is the desired disk to check)
Detail disk

Our iSCSI Boot guide is now available. This provides information on iSCSI boot, as well as stepping through the process of creating and deploying iSCSI boot images:
http://technet.microsoft.com/en-us/library/ee619733(WS.10).aspx
Our MPIO Guide for Windows Server 2008 R2 is now available in our Storage area on TechNet for Windows Server 2008 R2 at the link below:
http://technet.microsoft.com/en-us/library/ee619778(WS.10).aspx
At the link below, you will find information about what has changed for the iSCSI Initiator, and MPIO in Windows 2008 R2.
Also, the first in the series of our new configuration and step-by-step guides is available at the same location, which covers the configuration and usage of the iSCSI Initiator for both R2 and Windows 7.
http://technet.microsoft.com/en-us/library/ee344838(WS.10).aspx
Bruce Langworthy
Senior Program Manager - Enterprise Storage Networking, iSCSI, FC, MPIO, Core Storage
Windows Core OS Division
The Windows Boot from SAN whitepaper has been updated, and is available via the link below, this includes information on upgrading to Windows Server 2008 R2:
http://www.microsoft.com/downloads/details.aspx?FamilyID=f4095fae-553d-4700-aafa-1cce38b5618f&displaylang=en
Hello Everyone,
Just wanted to post a note that we’ve updated the WMI class information for MPIO, including information on the MPIO Health class information that was added for Windows Server 2008 R2:
http://msdn.microsoft.com/en-us/library/ee239136.aspx
We have released an updated version of the Windows Server High Availability with Microsoft MPIO whitepaper and couldn’t wait to let everyone know as there is a lot of new content in this update.
You can download the updated Whitepaper directly using the link below:
Windows Server High Availability with Microsoft MPIO
Microsoft Windows Server 2008 R2 Beta will be the next version of the Windows Server operating system from Microsoft. Building on the features and capabilities of the current Windows Server 2008 release version, Windows Server 2008 R2 allows you to create solutions that are easier to plan, deploy, and manage than previous versions of Windows Server.
http://www.microsoft.com/downloads/details.aspx?FamilyID=85cfe4c9-34de-477c-b5ca-75edae3d57c5&displaylang=en
We have updated our documentation on the WMI classes supported by the iSCSI Initiator. You can see the update at the link below:
Link to iSCSI WMI Classes
Thanks,
The Storage Area Networking Team
The following scripting example shows how to set the MPIO Load Balancing policy via a script calling WMI:
Just to expand on the information below,
| FOO |
Failover Only |
| RR |
Round Robin |
| RRwS |
Round Robin with Subset |
| LQD |
Least Queue Depth |
| WP |
Weighted Paths |
'-----------------------------------------------------------------------------
'
' SET_LBP.vbs
'
' WScript which can be used to change MPIO Load Balance Policies on Windows 2008
'
' USAGE:
'
' SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>
' Change to FOO: SET_LBP.vbs FOO
' Change to RR: SET_LBP.vbs RR
' Change to RRwS: SET_LBP.vbs RRwS
' Change to LQD: SET_LBP.vbs LQD
' Change to WP: SET_LBP.vbs WP
'
' Return value:
' Success: 0
' Failure: -1
'
'
'-----------------------------------------------------------------------------
'
' Function returning ALUA or nonALUA flag
'
Function aluaflag(theInstance)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set objShare = objWMIService.Get("DSM_QueryLBPolicy_V2.InstanceName=" & _
"'"&theInstance&"'")
For Each objDsmPath in objShare.LoadBalancePolicy.DSM_Paths
aluaflag = objDsmPath.ALUASupport
Exit for
Next
End Function
Dim Usage
Usage = "USAGE:" & vbCrLf & _
" SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>" & vbCrLf
'
' Make sure we have the correct number of arguments.
'
If ( WScript.Arguments.Count <>1 ) Then
WScript.StdOut.Write Usage
WScript.Quit -1
End If
'
' Extract the arguments.
'
Dim bFlag, BOOL, LBP, LBPath, LBPolicy, foo, rr, rrws, lqd, wp
Dim fooValue, rrValue, rrwsValue, lqdValue, wpValue
LBP = WScript.Arguments(0): foo = "FOO" : rr = "RR" : rrws = "RRwS" : lqd = "LQD" : wp = "WP"
fooValue = StrComp(LBP, foo, 1)
rrValue = StrComp(LBP, rr, 1)
rrwsValue = StrComp(LBP, rrws, 1)
lqdValue = StrComp(LBP, lqd, 1)
wpValue = StrComp(LBP, wp, 1)
' ----------FOO---------
If ( 0 = fooValue) Then
LBPolicy = 1
End If
' ----------RR---------
If ( 0 = rrValue ) Then
LBPolicy = 2
End If
' ----------RRwS---------
If ( 0 = rrwsValue ) Then
LBPolicy = 3
End If
' ----------LQD---------
If ( 0 = lqdValue ) Then
LBPolicy = 4
End If
' ----------WP---------
If ( 0 = wpValue ) Then
LBPolicy = 5
End If
If ( Err.Number = 0 ) Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
'
' Locate device
'
Set colSWbemObjectSet = objWMIService.InstancesOf("DSM_QueryLBPolicy_V2")
'
' Loop through all devices
'
For Each objSWbemObject In colSWbemObjectSet
'
' Set the boolean flag to FALSE
'
BOOL = 0
WScript.StdOut.Write "InstanceName= "& objSWbemObject.InstanceName & vbCrLf
'
' Flag for ALUA LUN
'
bFlag = aluaflag(objSWbemObject.InstanceName)
'
' If ALUA=True and LBPolicy=RoundRobin, don't apply the change
'
Do
if LBPolicy = 2 Then
if bFlag > 0 Then Exit Do:
End if
'
' Set boolean flag to TRUE if ALUA
'
if bFlag > 0 Then
BOOL = 1
End if
'
'Assign each WbemObject to LBPolicy object
'
Set objLBPolicy = objSWbemObject
'
' Obtain an instance of the the class using a key property value.
'
Set objShare = objWMIService.Get("DSM_LB_Operations.InstanceName=" & _
"'"&objSWbemObject.InstanceName&"'")
'
' Obtain an InParameters object specific to the method we are going to call.
'
Set objInParam = objShare.Methods_("DsmSetLoadBalancePolicyALUA").inParameters.SpawnInstance_()
'
' set to user-defined LB Policy
'
objLBPolicy.LoadBalancePolicy.LoadBalancePolicy = LBPolicy
Dim count
count = 0
'
' If LB Policy is set to FOO
'
' If it is the 1st path, Set to A/O
' If is is not the 1st Path, Set to A/U if ALUA or S/B if not ALUA
'
'
' else LB Policy is set to other than FOO
'
' If It is ALUA
' If TargetPortGroup State is A/O
' Set the associated paths to A/O
' If TargetPortGroup State is A/U
' Set the associated paths to A/U
'
' else It is not ALUA
' Set all paths to A/O
'
'
For Each objDSMPath In objLBPolicy.LoadBalancePolicy.DSM_Paths
if LBPolicy = 1 Then
if count = 0 Then
objDSMPath.PrimaryPath = 1
else
if BOOL = 1 Then
objDSMPath.OptimizedPath = 0
objDSMPath.PrimaryPath = 1
else
objDSMPath.OptimizedPath = 1
objDSMPath.PrimaryPath = 0
End if
End if
else
if BOOL = 1 Then
if objDSMPath.TargetPortGroup_State = 0 Then
objDSMPath.OptimizedPath = 1
objDSMPath.PrimaryPath = 1
else
objDSMPath.OptimizedPath = 0
objDSMPath.PrimaryPath = 1
End if
else
objDSMPath.PrimaryPath = 1
End if
End if
count = count + 1
Next
objInParam.Properties_.item("LoadBalancePolicy") = objLBPolicy.LoadBalancePolicy
WScript.StdOut.Write "DSM_LB_Operations.InstanceName=" & "'"& _
objSWbemObject.InstanceName & "'" & vbCrLf & vbCrLf
Set objOutParams = objWMIService.ExecMethod("DSM_LB_Operations.InstanceName=" & _
"'"&objSWbemObject.InstanceName&"'","DsmSetLoadBalancePolicyALUA", objInParam)
Loop Until True:
Next
If (LBPolicy = 5) Then
WScript.StdOut.Write "LB Policy has successfully changed to WP" & vbCrLf
End If
If (LBPolicy = 4) Then
WScript.StdOut.Write "LB Policy has successfully changed to LQD" & vbCrLf
End If
If (LBPolicy = 3) Then
WScript.StdOut.Write "LB Policy has successfully changed to RRwS" & vbCrLf
End If
If (LBPolicy = 2) Then
If(BOOL = 0) Then
WScript.StdOut.Write vbCrLf & "Found no applicable device for RR" & vbCrLf
else
WScript.StdOut.Write "LB Policy has successfully changed to RR" & vbCrLf
End If
End If
If (LBPolicy = 1) Then
WScript.StdOut.Write "LB Policy has successfully changed to FOO" & vbCrLf
End If
WScript.Quit 0
Else
'
' Something went wrong.
'
WScript.StdOut.Write "Failed to change LB Policy" & Err.Description & vbCrLf
WScript.Quit -1
End If
------------------------
The following steps will allow you to access the User Interface (UI) for the iSCSI Initiator on a Windows Server 2008 Server Core installation, as an alternative to using ISCSCLI from the CMD line to configure the Microsoft iSCSI Initiator settings.
There are two important caveats:
1. This is strictly speaking, unsupported, since this functionality did not ship with Server Core
2. Since the files for the user interface did not ship with Server Core, they would not be updated by any future updates to these files since they are not expected to exist on Server Core.
Copy the following files, from a GUI version of the Same SKU of 2008.
For example, if you are using Windows Server 2008 Enterprise server core, then copy these from a Windows 2008 Server Enterprise GUI version of the same processor type, they will need to be copied to the same location on the server core machine.
1. c:\windows\system32\iscsicpl.dll
2. c:\windows\system32\iscsicpl.exe
3. c:\windows\system32\en-us\iscsicpl.dll.mui
4. c:\windows\system32\en-us\iscsicpl.exe.mui
5. To access the iSCSI control panel, run “iscsicpl.exe” from the CMD prompt.
This script can be run from the command line including Server Core to quickly connect to an iSCSI target
Pre-Requisites:
- Windows host running the Microsoft iSCSI Software Initiator (You can check the iSCSI initiator location guide on how to get the initiator here:
http://blogs.msdn.com/san/archive/2008/07/28/microsoft-iscsi-software-initiator-location-guide.aspx
2. Pre-configured iSCSI target. You will first need to create a LUN on your iSCSI target. A list of supported targets is here: http://blogs.msdn.com/san/archive/2008/08/04/logo-listings-for-enterprise-storage-arrays.aspx
@ECHO OFF
SETLOCAL
setlocal EnableDelayedExpansion
REM - Batch file quick connect to an iSCSI Target.
REM - 1. First add portal for the IP address that has been entered.
REM - 2. List Targets.
REM - 3. If only one target is listed, then logon.
REM - 4. Mark it persistent.
REM - 5. Done.
SET ipaddress=%1
echo "Trying to add target %1 for discovery"
iscsicli QAddTargetPortal %ipaddress%
REM – Find out the number of Targets discovered for the portal address
SET _count=0
FOR /F "usebackq skip=1" %%G IN (`iscsicli ListTargets`) DO (
SET _cmp=%%G
SET _result=!_Cmp:~0,4!
REM - Get a valid IQN Name.
IF !_RESULT!==iqn. (
set TargetName=!_cmp!
SET /a _count = _count + 1
)
)
REM - Check if there is only one target.
if !_count! equ 1 (
echo "Found A Target - %TargetName%: Attempt to login"
iscsicli QLoginTarget %TargetName%
Echo “Mark the target as a persistent target”
iscsicli PersistentLoginTarget %TargetName% * * * * * * * * * * * * * * * *
) ELSE (
echo "Did not find a single Target to login"
)
Suzanne Morgan
Microsoft Corporation
Senior Program Manager Lead - Storage Networking Interconnects, iSCSI, Fibre Channel, MPIO, Core Storage
Windows Core OS Division
sumorgan@microsoft.com
www.microsoft.com/hvs
www.microsoft.com/hyper-vserver
www.microsoft.com/hyper-v-server
Microsoft Hyper-V Server 2008 provides a simplified, reliable, and optimized virtualization solution, enabling improved server utilization and reduced costs. Since Hyper-V Server is a dedicated stand-alone product, which contains only the Windows Hypervisor, Windows Server driver model and virtualization components, it provides a small footprint and minimal overhead. It easily plugs into customers’ existing IT environments, leveraging their existing patching, provisioning, management, support tools, processes, and skills.
Key Benefits
- Improved server utilization
- Small footprint
- Minimal overhead
IT Pros can easily to leverage their existing knowledge and skills with Microsoft virtualization products, as well as the collective knowledge of the community, minimizing any learning curve. In addition, with Microsoft providing comprehensive support for Microsoft applications and heterogeneous guest operating systems, customers can virtualize with confidence and peace of mind.
Suzanne Morgan
Microsoft Corporation
Senior Program Manager Lead - Storage Networking Interconnects, iSCSI, FC, MPIO, Core Storage
Windows Core OS Division
sumorgan@microsoft.com
The Microsoft iSCSI Software Initiator implements a number of key features in the initiator to protect against loss of connectivity to an iSCSI target. These include support for Microsoft MPIO, (MCS) multiple connections per session, portal hopping, as well as advanced error recovery.
The loss of connection to an iSCSI target portal could be due to one of the following reasons:
1. Connection drops unexpectedly without notification from the target which can result from transient network errors or other conditions
2. Unexpected connection loss without prior notification from the target.
3. Connection loss as a result of an iSCSI target dropping connections through an async logout
If multiple portals are available for the target, portal hopping is designed to the try establishing a connection to alternate portals automatically
Configuring portal hopping:
This feature can be enabled or disabled via the Advanced setting of the "Logon to the Target" page in the Microsoft iSCSI GUI.
Steps:
Portal hopping operates by default without requiring user configuration. When you're creating the connection to the iSCSI target from the initiator UI, just make sure "default" in "Target Portal" list is used. To disable this feature, specify a specific target portals instead. With Portal Hopping disabled, the Microsoft Initiator will only try to attempt to recover the iSCSI session via the target portal used in the original iSCSI login.
There are situations where using Portal Hopping is not desirable. For example, in a configuration that has multiple physical networks or multiple VLANs, it is possible that some of the target portals are not accessible to a given host. In this situation, SendTargets responses sent by the iSCSI target will advertise some addresses which may not be accessible by the host.
If the number of inaccessible target portals advertised in the SendTargets response is large, Portal Hopping may cause a delay to recover the iSCSI session. After the initial attempt to connect to the original target portal fails, the Microsoft Initiator attempts to connect to other target portals which are not accessible. It may take a long time for the Microsoft Initiator to cycle through the list of inaccessible target portals before it makes another attempt to the original target portal.
Recommendation:
If multiple ports exist, it's better to use MPIO or MCS and use explicit addresses for both initiator & target to ensure alignment between the virtual connection and the physical link. This offers a more deterministic approach to redundancy. Portal hopping does offer a good solution to ensure continuous IO flow for single port environments and configurations that don't use MPIO or MCS.
Suzanne Morgan
Microsoft Corporation
Senior Program Manager - Storage Networking Interconnects, iSCSI, FC, MPIO, Core Storage
Windows Core OS Division
Windows Server supports a broad ecosystem of SAN storage arrays and enterprise class storage devices. The Windows Server tested products catalog includes listing for hardware devices which have been qualified using the Windows Logo tests to validate interoperability with the Windows Server platform.
Home Page for Windows server tested products
http://www.windowsservercatalog.com/results.aspx?bCatID=1338&cpID=0&avc=10&OR=1
There are 2 categories which include listings for storage arrays (iSCSI, Fibre Channel & SAS) which have passed applicable tests. These include small, medium and enterprise class arrays from a wide variety of our ecosystem partners including EMC, NetApp, Dell/Equallogic, Compellent, HP/Lefthand Networks, HDS, LSI Logic, iStor, NEC, IBM, Fujitsu Siemens, 3Par, XIOtech, Intransa to name a few .....
Category 1: RAID Storage
http://www.windowsservercatalog.com/results.aspx?&bCatID=1354&cpID=0&avc=10&ava=0&avq=0&OR=1&PGS=25&ready=0
Category 2: Hardware based raid array
http://www.windowsservercatalog.com/results.aspx?&bCatID=1511&cpID=0&avc=10&ava=0&avq=0&OR=1&PGS=25&ready=0
Suzanne Morgan
Microsoft Corporation
Senior Program Manager Lead - Storage Networking Interconnects, iSCSI, FC, MPIO, Core Storage
Windows Core OS Division
sumorgan@microsoft.com