Implementing Common Storage Scenarios in Windows Server 2012 with SC SP1 VMMHector LinaresSenior Program ManagerMicrosoft
WS-B314
“I do not have the expertise to automate storage operations”
“too much room for human error.”
“There are too many APIs that I need to work with across different arrays”
“I spent lots of time waiting for storage to be provisioned”
Customer Pain Points
Partner Pain Points
“Customers are asking for PowerShell and REST APIs. Microsoft is asking us to build providers for integration. Which one should do I build?”
“The administrators that use our management consoles do not have any visibility into the virtualization environment. They need to see managed devices in the context of virtualization.”
Evolving Storage Management
VM migration automation using NPIV automation or VDS HW providers
VMM 2007 VMM 2008VMM 2008 R2 SP1
SMI-S based discovery, management and automation of block storage
VMM 2012
Discovery, management and automation of block and file storage using Windows Server 2012
VMM 2012 SP1
A Fresh Perspective
“By embracing cloud design points and best practices, I am in control.”
Customer deploying fully integrated racks
“Microsoft’s approach highlights the power of hardware with software, making it simple to use.”
Partner building storage providers“The Microsoft stack is starting to exceed what we can build on our own.
Service provider choosing to embrace System Center
Private Cloud Storage Management
Allocation and Assignment
Standards Based Management
VM, Host, and Cluster Storage Management
Extensive SAN and NAS Support
Scalable Provisioning
Storage Monitoring
Array Onboarding
Storage Classification
Rapid ProvisioningBlock and File
Storage Management End to End
Mapping
Insight Flexibility Automation
SAN Migration
Windows Server 2012 – Storage Management API
Management
Applications
Storage Managemen
t APIs
Windows Storage Management API (Windows PowerShell and WMI)
Pass-through API for extensibility (WMI)
Storage Array
Storage Management Provider Interface
Non-Microsoft management application
System Center 2012 SP1 - VMM
File Server Manager(File and Storage Services
role)
Vendor-provided SMI-S provider (CIMXML or WMI)
Storage Array
Vendor-provided transport and/or protocol
SMP: Windows Standards Based Storage
Management Service
SMP: Vendor-provided WMI-based provider
SMP: Storage Spaces (no pass-through API support)
SM I-S SAN/NAS Proxy
Provider
SM I-S SANw/ Embedded
Provider
SM I-S NASProxy Provider
WindowsScale-out File Server
SM API
WMI
SM P:SM I-S
StorageService
SM PPartner Provider
SM P:Spaces
WSMAN/WinRM
WSMan/WinRM
Hyper-VStandalone Hyper-V
Cluster
NAS Device
SAN/NAS Device
CIMXML/WMI
CIMXMLCIMXML
SAN Device
Proprietary
Proprietary Proprietary
VMM Server
WSMan/WinRM
SM I-S SAN Proxy
Provider
SANDevice
Proprietary
FC/iSCSI
(some providersrequire this
CIMXMLWMI
VMVM
Library Server
WSMan/WinRM
Scenario: Is my storage overprovisioned?
What is thin provisioning?Thinly provisioned storage gets allocated by the underlying device on-demand. The provisioned capacity (from the file system and application perspective) can even exceed physically capacity of the device.
Pool: Physically Available
Disk: Promised Disk: Promised
File Syste
m: Used
File Syste
m: Used
Pool: Physically Available
What is thin provisioning?Thinly provisioned storage gets allocated by the underlying device on-demand. The provisioned capacity (from the file system and application perspective) can even exceed physically capacity of the device.
Great way to lower the cost of storage by increasing the number of workloads that can use storage from the device.
Disk: Promised Disk: Promised Disk: Promised Disk: Promised Disk: Promised
File Syste
m: Used
File Syste
m: Used
Pool: Physically Available
What is thin provisioning?Thinly provisioned storage gets allocated by the underlying device on-demand. The provisioned capacity (from the file system and application perspective) can even exceed physically capacity of the device.
Great way to lower the cost of storage by increasing the number of workloads that can use storage from the device.
Disk: Promised Disk: Promised Disk: Promised Disk: Promised Disk: Promised
File Syste
m: Used
File Syste
m: Used
File System: Used
File System: Used
File System: Used
What is thin provisioning?Thinly provisioned storage gets allocated by the underlying device on-demand. The provisioned capacity (from the file system and application perspective) can even exceed physically capacity of the device.
Great way to lower the cost of storage by increasing the number of workloads that can use storage from the device.
Disk: Promised Disk: Promised Disk: Promised Disk: Promised Disk: Promised
File Syste
m: Used
File Syste
m: Used
File System: Used
File System: Used
File System: Used
Pool: Physically Available
Demo
Thin Provisioning Alerts in Operations Manager
Overprovisioned % for a pool
Import-Module virtualmachinemanager$vmm = Get-SCVMMServer localhost function New-OverAllocationResult(){ param ($level, $pool, $overprovisioned, $lunnames) $result = new-object PSObject $result | Add-Member -MemberType NoteProperty -Name "LogLevel" -Value $level $result | Add-Member -MemberType NoteProperty -Name "Pool" -Value $pool $result | Add-Member -MemberType NoteProperty -Name "OverProvisioned" -Value $overprovisioned $result | Add-Member -MemberType NoteProperty -Name "LUN Names" -Value $lunnames return $result} #Get all managed pools#VMM imports LUN information for managed pools$pools = Get-SCStoragePool -All | where {$_.IsManaged -eq $true} #for each pool, add up max size of LUN #calculate overprov % for the pool$results = @()
Overprovisioned % for a pool
foreach($pool in $pools){ $luns = $pool.StorageLogicalUnits $totallunsize=0 $lunnames=$null foreach($lun in $luns) { $totallunsize+=$lun.TotalCapacity if($lun -ne $luns[$luns.count-1]){ $lunnames += ($lun.Name + ", ")} else {$lunnames += $lun.Name} } $overprovisioned = ($totallunsize/$pool.TotalManagedSpace)*100 if($overprovisioned -le "70") { $results += New-OverAllocationResult "2.INFORMATIONAL" $pool ("{0:N1}" -f $overprovisioned +"%") $lunnames } if($overprovisioned -gt "70" -and $overprovisioned -le "100") { $results += New-OverAllocationResult "1.WARNING" $pool ("{0:N1}" -f $overprovisioned +"%") $lunnames } if($overprovisioned -gt "100") { $results += New-OverAllocationResult "0.CRITICAL" $pool ("{0:N1}" -f $overprovisioned +"%") $lunnames }}
Overprovisioned % for a pool
$a = "<style>"$a = $a + "BODY{background-color:rgb(255,255,255);}"$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:rgb(16,195,243)}"$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"$a = $a + "</style>" $results | Sort-Object LogLevel,OverProvisioned | ConvertTo-HTML -head $a -Body "<H2>Thin Disk Overprovisioning Report</H2>" | Out-File "C:\temp\PoolTPReport.htm"Invoke-Expression "C:\temp\PoolTPReport.htm"
SMB3.0 and NAS StorageWindows Server 2012 introduces new SMB file server features designed for workloads like Hyper-V and SQL.Storage partners can implement SMB 3.0 in NAS devices
Discovery of Windows standalone and clustered file servers (WMI), discovery of self-contained and NAS head devices (non-Windows using SMI-S), creation and deletion of files shares, setting ACLs
Supported
Deployment of file server clusters, configuration of block storage, load balancing of SMB client connections, file share classification, management of single server with iSCSI software target (through SMI-S provider) and file server roles
Not Supported
Dynamics Disks and Thin Provisioned VolumesThe actual capacity available to the workload inside of the application depends on how much is available on the host AND the underlying pool.
Pool: Physically Available
Host Disk: Promised
Host: File System: Used
VM: Virtual Hard Disk: Promised
VM: File System: Used
Overprovisioned % volumes with dynamic disksImport-Module virtualmachinemanager$vmm = Get-SCVMMServer localhost function New-OverAllocationResult(){ param ($level, $label, $overprovisioned, $vmnames) $result = new-object PSObject $result | Add-Member -MemberType NoteProperty -Name "LogLevel" -Value $level $result | Add-Member -MemberType NoteProperty -Name "Volume" -Value $label $result | Add-Member -MemberType NoteProperty -Name "OverProvisioned" -Value $overprovisioned $result | Add-Member -MemberType NoteProperty -Name "VM Names" -Value $vmnames return $result} $vhds = Get-SCVirtualHardDisk -All$disks = Get-SCStorageDisk$shares = (Get-SCStorageFileShare -All) | where {$_.IsManaged -eq $true}$results = @()
Overprovisioned % volumes with dynamic disksforeach($share in $shares){ $overprovisioned=0 $vmnames=$null $vhdmaxsize=0 $overprovisioned=0 foreach($vhd in $vhds){ if($vhd.FileShare -eq $share){ $vhdmaxsize += ($vhd.MaximumSize) $vmnames += ($vhd.Name +",") } } $overprovisioned = (($vhdmaxsize)/$share.Capacity)*100 $sharepath = $share.sharepath if($overprovisioned -le "70") { $results += New-OverAllocationResult "2.INFORMATIONAL" $sharepath ("{0:N1}" -f $overprovisioned +"%") $vmnames } if($overprovisioned -gt "70" -and $overprovisioned -le "100") { $results += New-OverAllocationResult "1.WARNING" $sharepath ("{0:N1}" -f $overprovisioned +"%") $vmnames } if($overprovisioned -gt "100") { $results += New-OverAllocationResult "0.CRITICAL" $sharepath ("{0:N1}" -f $overprovisioned +"%") $vmnames }}
Overprovisioned % volumes with dynamic disksforeach($disk in $disks){ foreach($volume in $disk.DiskVolumes){ $overprovisioned=0 $vmnames=$null $vhdmaxsize=0 $overprovisioned=0 foreach($vhd in $vhds){ if($vhd.HostVolume -eq $volume){ $vhdmaxsize += ($vhd.MaximumSize) $vmnames += ($vhd.Name +",") } } $overprovisioned = (($vhdmaxsize)/$volume.StorageDisk.Capacity)*100 $volumelabel = $vmhostvolume.VolumeLabel if($overprovisioned -le "70") { $results += New-OverAllocationResult "2.INFORMATIONAL" $volume ("{0:N1}" -f $overprovisioned +"%") $vmnames } if($overprovisioned -gt "70" -and $overprovisioned -le "100") { $results += New-OverAllocationResult "1.WARNING" $volume ("{0:N1}" -f $overprovisioned +"%") $vmnames } if($overprovisioned -gt "100") { $results += New-OverAllocationResult "0.CRITICAL" $volume ("{0:N1}" -f $overprovisioned +"%") $vmnames } }}
Overprovisioned % volumes with dynamic disks$a = "<style>"$a = $a + "BODY{background-color:rgb(255,255,255);}"$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:rgb(16,195,243)}"$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"$a = $a + "</style>" $results | Sort-Object LogLevel,OverProvisioned | ConvertTo-HTML -head $a -Body "<H2>Dynamic Disk Overprovisioning Report</H2>" | Out-File "C:\temp\DynamicDiskReport.htm"Invoke-Expression "C:\temp\DynamicDiskReport.htm"
Demo
Dynamic Disk Overprovision Report
Scenario: Rapid Provisioning and VDI
Hyper-V Storage ManagementProvision and assign block and file storage to Hyper-V host, clusters. Support for iSCSI, FC, SAS arrays and SMB3.0 capable devices (Windows Server, NetApp, EMC).
Discovery of array, pool, LUNs, masking sets, file server, file shares, ACLsProvision new virtual disk from pool, clone, snapshot, new file share from pool, new file share in pathVirtual disk masking and mappingIndications/eventing
Supported
Support for Windows Scale-out File Server using WMISupport for EMC and NetApp NAS using SMI-SSupport for SAS (HP P2000) and dynamic iSCSI target arrays (EqualLogic, MS iSCSI Target, HP StoreVirtual)Ability to assign LUNs to VMs using IQN
New in SP1
SAN based Rapid ProvisioningDeployment of VMs using snapshot/cloning capability of storage arrays.
Provision new LUN to Library serverCreate new VM from VHD, place VM on new volumeCustomize VHD and create new template from VMTemplate is automatically marked SAN Copy Capable
Setup
Migration between hosts, clusters, and Library uses “SAN Transfer” – masking and unmasking of the LUNDeletion of VM will also delete the VHD and LUNVM clone does NOT create a clone of the LUN
Lifecycle
Large Scale ProvisioningAssociated Storage Logical Units feature increases the scale limits of storage array that have limitations on the number of snapshots per logical unit.
Create a SAN copy capable VM templateCreate associated logical units by cloning the VM template logical unit
Setup
New VM from template deployments will exhaust one of the associated logical units and then move to the next
Algorithm
SAN Copy Capable Template
#initialize variables$templatename = "MMSDemoTemplate"$temp_templatename = "MMSDemoTemplate_temp"$vmhostname = "vmmlab1823n3.dcmanager.lab"$Libraryserver = $vmhostname$poolname = "iSCSITarget: vmmlab1823h1: D:"$hostgroupname = "All Hosts"$osname = "Windows Server 2012 Datacenter"$vhdname = "smallW2K12OS.VHD"#get pool by name$pool = Get-SCStoragePool | where {$_.Name -eq $poolname}#create LUN from available capacity on that pool($lun = New-SCStorageLogicalUnit -Name $templatename -StoragePool $pool -DiskSizeMB 1024) | fl name, totcalcapacity, classification#Get All Hosts host group$hg = Get-SCVMHostGroup -Name $hostgroupname#Allocate the LUN to the host group (this is required so you can unmask)(Set-SCStorageLogicalUnit -StorageLogicalunit $lun -VMHostGroup $hg) | Out-Null#Get VMHost object$vmhost = Get-SCVMhost | where {$_.Name -match $vmhostname}
SAN Copy Capable Template
#unmask the LUN to the vm host(Register-SCStorageLogicalUnit -StorageLogicalUnit $lun -VMHost $vmhost) | Out-Null#Save VM path UNC to variable$uncpath = ("\\" + $vmhost.Name + "\v$\VMs\" + $templatename)#Create path on remote VM hostNew-Item ($uncpath + "\LUN1") -Type Directory | Out-Null#Save remote local path to variable$remotelocalpath = ("V:\VMs\" + $templatename + "\LUN1")#Get the disk that is the OS surfaces after unmasking LUN$disk = Mount-SCStorageDisk -StorageDisk $lun.HostDisks[0] -QuickFormat -ForceFormat -MasterBootRecord -VolumeLabel "MMSDEMOTemplate_A" -MountPoint $remotelocalpath #Get OS by Name$os = Get-SCOperatingSystem | where {$_.Name -match $osname}#Get VHD in Library by name$vhd= Get-SCVirtualHardDisk | where {$_.Location -eq ("\\" + $vmhostname + "\Library\W2K12\" + $vhdname)}#create a temporary template#first check if the template exists$temp_template = Get-SCVMTemplate -Name $temp_templatename#remove template if it existsif($temp_template -ne $null){Remove-SCVMTemplate -VMTemplat $temp_template | Out-Null}#create new template using New-VMTemplate$temp_template = New-SCVMTemplate -Name $temp_templatename -VirtualHardDisk $vhd -MemoryMB 8 -OperatingSystem $os -NoCustomization
SAN Copy Capable Template
#Create VM that will serve as template for rapid provisioning#Create new VM config from template($vmconfig = New-SCVMConfiguration -VMTemplate $temp_template -Name ($templatename + "_Config")) | fl Name#Set destination to specific host(Set-SCVMConfiguration -VMConfiguration $vmconfig -VMHost $vmhost -VMLocation $remotelocalpath) | fl Name, VMHost, VMLocation#update VM config object with placement recommendationsUpdate-SCVMConfiguration -VMConfiguration $vmconfig | Out-Null#Update VHD information(Set-SCVirtualHardDiskConfiguration -VHDConfiguration $vmconfig.VirtualHardDiskConfigurations[0] -DeploymentOption "UseNetwork" -DestinationLocation $remotelocalpath -FileName ($templatename + "_OS.VHD")) | fl DeploymentOption, FileName#create VM($vm = New-SCVirtualMachine -VMConfiguration $vmconfig -Name $templatename) | fl Name, VirtualizationPlatform, HostGroupPath#Get Library server object$LibraryServer = Get-SCLibraryServer -VMMServer localhost | where {$_.Name -eq $Libraryserver}#create template that is SAN COPY CAPABLE (VMM uses SAN migration)$Libraryshare = Get-SCLibraryShare | where {$_.Name -match "Library"}$template = New-SCVMTemplate -Name $templatename -VM $VM -LibraryServer $LibraryServer -SharePath $libraryshare[0].Path -NoCustomization#refresh LibraryRead-SCLibraryShare -LibraryShare $Libraryshare[0] | Out-Null
SAN Copy Capable Template#show template with associated LUNs and explain example#New-SCStorageLogicalUnit -StorageLogicalUnit $lun#$range = 1..10;foreach($_ in $range){New-SCStorageLogicalUnit -Name ($templatename + $_) -LogicalUnitCopyMethod "Clone" -StorageLogicalUnit $logicalUnit -SetLogicalUnitCopySource #Launch RDWEBInvoke-Expression "c:\demo\rdweb.url" #start cleanupRemove-SCVMConfiguration -VMConfiguration $vmconfig | Out-Null$temp_template = Get-SCVMTemplate -Name $temp_templatename Remove-SCVMTemplate -VMTemplate $temp_template | Out-Null$template = Get-SCVMTemplate -Name $templatenameRemove-SCVMTemplate -VMTemplate $template | Out-Null$libuncpath = ("\\" + $vmhost.Name + "\v$\Library\" + $templatename)#remove directory$junction = Get-item ($libuncpath + "\LUN1")$junction.Delete()$templatedirectory = Get-Item $libuncpath$templatedirectory.Delete()$libvhd = Get-SCVirtualHardDisk -Name "MMSDemoTemplate_OS"Remove-SCVirtualHardDisk -VirtualHardDisk $libvhd | Out-Null#Unregister LUN$lun = Get-SCStorageLogicalUnit | where {$_.Name -eq $templatename}(Unregister-SCStorageLogicalUnit -StorageLogicalUnit $LUN -VMHost $vmhost) | fl Name, IsAssigned, StorageGroups, HostDisks#delete LUN(Remove-SCStorageLogicalUnit -StorageLogicalUnit $LUN) | fl Name, MarkedForDeletion
SAN Copy Capable Template#show template with associated LUNs and explain example#New-SCStorageLogicalUnit -StorageLogicalUnit $lun#$range = 1..10;foreach($_ in $range){New-SCStorageLogicalUnit -Name ($templatename + $_) -LogicalUnitCopyMethod "Clone" -StorageLogicalUnit $logicalUnit -SetLogicalUnitCopySource#Launch RDWEBInvoke-Expression "c:\demo\rdweb.url"#start cleanupRemove-SCVMConfiguration -VMConfiguration $vmconfig | Out-Null$temp_template = Get-SCVMTemplate -Name $temp_templatename Remove-SCVMTemplate -VMTemplate $temp_template | Out-Null$template = Get-SCVMTemplate -Name $templatenameRemove-SCVMTemplate -VMTemplate $template | Out-Null$libuncpath = ("\\" + $vmhost.Name + "\v$\Library\" + $templatename)#remove directory$junction = Get-item ($libuncpath + "\LUN1")$junction.Delete()$templatedirectory = Get-Item $libuncpath$templatedirectory.Delete()$libvhd = Get-SCVirtualHardDisk -Name "MMSDemoTemplate_OS"Remove-SCVirtualHardDisk -VirtualHardDisk $libvhd | Out-Null#Unregister LUN$lun = Get-SCStorageLogicalUnit | where {$_.Name -eq $templatename}(Unregister-SCStorageLogicalUnit -StorageLogicalUnit $LUN -VMHost $vmhost) | fl Name, IsAssigned, StorageGroups, HostDisks#delete LUN(Remove-SCStorageLogicalUnit -StorageLogicalUnit $LUN) | fl Name, MarkedForDeletion
Creating associated clones manually#on server with MS iSCSI software target create copies of the template LUN and rename files#import virtual disks (http://technet.microsoft.com/en-us/library/jj612803.aspx)PS C:\> Import-IscsiVirtualDisk -Path "D:\{01BDE84C-EFA6-4FD3-9578-4378AB8570CB}.vhd" -Description "MyScaleTemplate01"PS C:\> Import-IscsiVirtualDisk -path "D:\{02BDE84C-EFA6-4FD3-9578-4378AB8570CB}.vhd" -Description "MyScaleTemplate02"
#on VMM server rescan providerPS C:\> Read-SCStorageProvider -StorageProvider $prov –ForcePS C:\> $array | fl Name, *snapshot*MaximumReplicasPerSourceSnapshot : 256
#gets template LUNsPS C:\> $luns = Get-SCStorageLogicalUnit | where {$_.name -match "MyScaleTemplate0"}PS C:\> $lun = Get-SCStorageLogicalUnit | where {$_.name -eq "MyScaleTemplate"}
#associate template LUNs to source LUNPS C:\> Set-SCStorageLogicalUnit -StorageLogicalUnit $luns[0] -LogicalUnitCopySource $lunPS C:\> Set-SCStorageLogicalUnit -StorageLogicalUnit $luns[1] -LogicalUnitCopySource $lun
#verify$lun.LogicalUnitCopies | fl name
Demo
SAN based Rapid Provisioning for VDI
Scenario: Managing Tier 1 Applications with FC Storage
Virtual Fibre ChannelHyper-V provides Fibre Channel ports within the guest operating system, which allows you to connect to Fibre Channel directly from within virtual machines
Compatible with discovered VMs configured with virtual HBA
Supported
VM template add/remove vHBA, VM instance add/remove/modify vHBA, VM hot add/remove/modify virtual FC SAN, masking/unmasking LUN to VM with vHBA
Not Supported
What is Passthrough?
Leverages CIM-XML stack built for the Storage ServiceCIM-XML client functionality exposed via WMI interfacePassthrough acts as a proxy to talk to the SMIS provider
SMI-S Service(includes cache)Storage Management API
Block Storage API
Pass through API
SMI-S Service(includes cache)
SMI-S ProviderSMP:SMIS:CIMXML
SMI-S ProviderSMP:SMIS:WMI
SMP ProviderSMP:WMI
Storage SpacesSMP:SPACES
PowerShell
REST EndPoints
Client
WMIv2 Provider (Microsoft) WMIv2 Provider (vendor)
PS
REST
Storage ProviderStorage ArrayStorage PoolStorage VolumePhysica DiskMasking SetIndicationsHost (Windows)
Performance CountersBlock NASFabric
OData IIS Extension OData Ext
Provider Interface
• Exposed via WMI provider• In root/Microsoft/Windows/Storage/PT namespace
• Top-level API is provided by a CimSession object• Uses CIM operation options to specify connection
details (context) for the SMIS provider
Provider Interface
• Sample CimSession class methods:• CreateInstance• DeleteInstance• EnumerateAssociatedInstances• EnumerateClasses• EnumerateInstances• EnumerateReferencingInstances• GetInstance• InvokeMethod• ModifyInstance• QueryInstances
Provider Connection Context
$options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions$options.SetCustomOption("TargetServer", "http://Provider:5988", $False)$options.SetCustomOption("TargetNamespace", "root/impl", $False)$options.SetCustomOption("TargetUsername", "admin", $False)$options.SetCustomOption("TargetPassword", "password", $False)
Demo: Class Enum$options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions$options.SetCustomOption("TargetServer", "http://SmisProvider:5988", $False)$options.SetCustomOption("TargetNamespace", "root/impl", $False)$options.SetCustomOption("TargetUsername", "admin", $False)$options.SetCustomOption("TargetPassword", “password", $False)
$session = New-CimSession$ns = "root/microsoft/windows/storage/pt"$classes = $session.EnumerateClasses($ns, "CIM_StoragePool", $options) $classes = $classes.GetEnumerator()while ($classes.MoveNext()){ $classes.Current}
Demo: Instance Enum$options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions$options.SetCustomOption("TargetServer", "http://SmisProvider:5988", $False)$options.SetCustomOption("TargetNamespace", "root/impl", $False)$options.SetCustomOption("TargetUsername", "admin", $False)$options.SetCustomOption("TargetPassword", "!!123abc", $False)
$session = New-CimSession$ns = "root/microsoft/windows/storage/pt"$instances = $session.EnumerateInstances($ns, "CIM_StoragePool", $options)$instances = $instances.GetEnumerator()while ($instances.MoveNext()){ $instances.Current}
Demo: Method Invocation# Find the relevant CIM_StorageConfigurationService instance$configService
# Can get method signature from its class definition$method = $configService.CimClass.CimClassMethods | where Name -eq "CreateOrModifyElementFromStoragePool"
$cimMethodParam = [Microsoft.Management.Infrastructure.CimMethodParameter]$cimType = [Microsoft.Management.Infrastructure.CimType]$cimFlags = [Microsoft.Management.Infrastructure.CimFlags]
$inParams = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection$inParams.Add($cimMethodParam::Create("ElementName", “DemoVolume", $cimType::String, $cimFlags::Parameter))$inParams.Add($cimMethodParam::Create("ElementType", 2, $cimType::UInt16, $cimFlags::Parameter))$inParams.Add($cimMethodParam::Create("Size", 10GB, $cimType::UInt64, $cimFlags::Parameter))$inParams.Add($cimMethodParam::Create("InPool", $PTStoragePool, $cimType::Reference, $cimFlags::Parameter))
# Method invocation$result = $session.InvokeMethod($script:PTNamespace, $configService, "CreateOrModifyElementFromStoragePool", $inParams, $Options)
# Handle output$createdVD = $result.OutParameters['TheElement'].Value
Current Issues
• Association instance references passed as method parameters not passed correctly.
Demo
How can I automate common fibre channel fabric operations?
Adding zone member and activating zonesetfunction GetCimInstanceArrayFromEnum ($Enum){ $cimInstances = @()
while ($Enum.MoveNext()) { $cimInstances += $Enum.Current }
return $cimInstances}
$ns = "root/microsoft/windows/storage/pt"$options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions$options.SetCustomOption("TargetServer", "http://10.184.102.47:5988", $False)$options.SetCustomOption("TargetNamespace", "cimv2", $False)$options.SetCustomOption("TargetUsername", "admin", $False)$options.SetCustomOption("TargetPassword", "!!123abc", $False)
Adding zone member and activating zoneset$session = New-CimSession
Write-Host "Getting Fabric Admin domain."$fabricEnum = $session.EnumerateInstances($ns, "CIM_AdminDomain", $options).GetEnumerator()$fabric = GetCimInstanceArrayFromEnum -Enum $fabricEnum | where ElementName -eq "Dummy"
Write-Host "Getting zone service."$configSvcEnum = $session.EnumerateAssociatedInstances($ns, $fabric, "CIM_HostedService", "CIM_ZoneService", $null, $null, $options).GetEnumerator()$configService = GetCimInstanceArrayFromEnum -Enum $configSvcEnum
Write-Host "Getting zone."$zoneEnum = $session.EnumerateInstances($ns, "CIM_Zone", $options).GetEnumerator()$zones = GetCimInstanceArrayFromEnum -Enum $zoneEnum | where ElementName -eq "DummyZone"$zone = $zones | where Active -EQ $False
$method = $configService.CimClass.CimClassMethods | where Name -eq "CreateZoneMembershipSettingData"
$methodParam = [Microsoft.Management.Infrastructure.CimMethodParameter]$cimType = [Microsoft.Management.Infrastructure.CimType]$cimFlags = [Microsoft.Management.Infrastructure.CimFlags]
Adding zone member and activating zoneset$inParams = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection$inParams.Add($methodParam::Create("ConnectivityMemberID", "abcdabcdabcdabca", $cimType::String, $cimFlags::Parameter))$inParams.Add($methodParam::Create("ConnectivityMemberType", 2, $cimType::UInt16, $cimFlags::Parameter))$inParams.Add($methodParam::Create("SystemSpecificCollection", $zone, $cimType::Reference, $cimFlags::Parameter))
Write-Host "Invoking CreateZoneMembershipSettingData method." $result = $session.InvokeMethod($ns, $configService, "CreateZoneMembershipSettingData", $inParams, $options)
# Non-job caseif ($result.ReturnValue.Value -eq 0){ $instanceKeys = $result.OutParameters['ZoneMembershipSettingData'].Value $member = $session.GetInstance($ns, $instanceKeys, $options)}else{ Write-Error "Error adding member to zone: $($result.ReturnValue.Value)"}
Adding zone member and activating zonesetWrite-Host "Getting zoneset."$zonesetEnum = $session.EnumerateInstances($ns, "CIM_ZoneSet", $options).GetEnumerator()$zonesets = GetCimInstanceArrayFromEnum -Enum $zonesetEnum | where ElementName -eq "DummyActive"$zoneset = $zonesets | where Active -EQ $False
$activateParams = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection$activateParams.Add($methodParam::Create("Activate", $true, $cimType::Boolean, $cimFlags::Parameter))$activateParams.Add($methodParam::Create("ZoneSet", $zoneset, $cimType::Reference, $cimFlags::Parameter))
Write-Host "Invoking ActivateZoneSet method." $result = $session.InvokeMethod($ns, $configService, "ActivateZoneSet", $activateParams, $options)
# Non-job caseif ($result.ReturnValue.Value -eq 0){ Write-Host "Successfully activated"}else{ Write-Error "Error adding member to zone: $($result.ReturnValue.Value)"}
Support for Windows Server Features
Windows Storage SpacesEnables you to virtualize storage by grouping physical disks into storage pools, and then create virtual disks called Storage Spaces from the available capacity in the storage pools
Compatible with VM hosts/file servers configured with storage spaces
Supported
Create/delete/modify storage pools, create/delete/modify spaces, attach/detach spaces, discovery of physical disks
Not Supported
Offloaded Data Transfer (ODX)Windows uses tokens instead of buffered read/writes to copy data within a storage device. Storage arrays require updated firmware to enable ODX
Hyper-V initiated storage migrationsSupported
New VM from template, VM clone, store VM to library, deploy VM from library, new template from VM, new VM from library VHD
Not Supported
Hyper-V ReplicaHyper-V Replica is an asynchronous virtual machine replication technology that is designed for business continuity and disaster recovery.
Refresh VMs with Hyper-V Replica enabled. All actions on secondary VM are disabled.
Supported
Setup and configure Hyper-V Replica settings on host. Enable/disable replication per VM.
Not Supported
VHDXVHDX supports up to 64TB storage capacity, much larger than the older VHD format. It also provides data corruption protection during power failures and optimizes structural alignments of dynamic and differencing disks to prevent performance degradation on new, large-sector physical disks..
Creation of VMs with new VHDX. Discovery of VHDX in Library. Creation of templates with VHDX.
Supported
Standards Based Management
Storage Management InitiativeSNIA adopted the Storage Management Initiative Specification in 2002 (BlueFin spec) and designated an ISO/IEC standard in 2007.
SMI consists of three main programs:SMI-S: Primary organization governing the SMI-S effort with the guidance of the SNIACTP: Conformance Testing Program validates that a member company's products conform to a particular version of the SMI-SSMILab: environment that manages and coordinates vendors' development efforts to deliver SMI-S with a centralized data center with storage equipment and multiple plugfests per year.
SMI-S Present at MMS 2013 – Booth 717
Microsoft ParticipationPlugfestsMicrosoft attend 5-6 plugfests a year
TWGActive participation in several TWGs
Storage Developers ConferenceMultiple presenters at SDC
PartnersDeep technical engagement with partners
Admin/Scripters
SMIS Client Apps
System Center
Windows Server
Hosters/ISV
Solutions
SMI-S Providers
WMIPowerShell
Other
WMIPowerShell WMI
CIMXML
CIMXML
WMIPowerShell
Multiple
SMP WMIProvidersWMI
SMP Spaces
Provider
WMI
SMP SMIS Service
CIMXML
Partner
Provider Type
Array Validation
Version Availability
NetApp SMI-S FAS 7-Mode (Block)
FAS C-Mode (Block and File)
Complete
In Progress
DataOnTap v8.1SMI-S Agent v4
DataOnTap v8.2SMI-S Agent v5
Now
August 2013
EMC (guide)
SMI-S VMAX 40K/VMAX SE/VMAX_e
VNX
Complete
Complete
Enginuity 5875 and 5876Solutions Enabler 7.5.1
FLARE 30, OE Version 5.31 and 5.32Solutions Enabler 7.5.1
Now
HP (matrix)
SMI-S 3PAR StoreServ 7000/100003PAR F-Class, T-Class, P10000
P6000 (EVA)
StoreVirtual (LeftHand)
P2000 G3 (MSA)
CompleteComplete
Complete
In Progress
Complete
OS 3.1.2.P01Inform OS 3.1.1.P10
1000 0000Command View 10
TBD
TS240
Now
Now
2H CY2013
Now
Hitachi SMI-S VSP Complete 70-05-02 Now
Dell SMI-S
SMP
SMI-S
Compellent Storage center
EqualLogic PS 4000/6000
MD32xx / MD36xx
Complete
Complete
Complete
SC 5.5.4 (or later) or EM 5.5.5 (or later)Host Integration Toolkit 4.6
FW: 07.84.44.60Mgmt SW: 10.84.G6.25SMI-S Provider: 10.28.G6.03
Now
June 2013
Now
Partner Provider Type
Array Validation
Version Availability
IBM SMI-S XIV
Storwize disk family (V7000, Flex node V7000, V3700)
SVC
Complete
In Progress
In Progress
11.1
6.4.1.5
6.4.1.5
Now
End of April 2013
End of April 2013Microsoft SMI-S iSCSI Software Target Complete (Ships with SC SP1 VMM) NowFujitsu SMI-S DX80 S2/DX90 S2/DX410 S2
DX440 S2/DX8100 S2/DX8700 S2
Complete V10L40 or later Now
Nexsan SMP E-Series Complete Q0C1.1100 Storage Tools 1.6.30
Now
NEC SMI-S iStorage M300/M500/M700 In Progress Rev.081E or later NowStarwind SMI-S StarWind iSCSI SAN
StarWind Native SANNot Started 6.0.5437 April 2013 BETA (
link) (link)NimbleStorage SMI-S CS-Series In Progress TBD TBDDataCore SMI-S SANSymphony Not Started TBD TBD
http://social.technet.microsoft.com/wiki/contents/articles/16100.supported-storage-arrays-for-system-center-2012-vmm.aspx
In Closing
Thank you to all our customers and partners!
Related MMS Sessions
SD-B201 Implementing Common Scenarios in VMM: Services and Service Templates
IM-B203 Building UI Add–Ins For System Center 2012 SP1 Virtual Machine Manager
IM-B308 System Center 2012 SP1 Virtual Machine Manager: Managing Large
Datacenters
IM-B310 Troubleshooting Common System Center 2012 SP1 Virtual Machine Manager
Issues
WS-B312 How to Design and Configure Networking in VMM and HyperV (Part 1 of 2)
WS-B313 How to Design and Configure Networking in VMM and HyperV (Part 2 of 2)
WS-B314 Implementing Common Storage Scenarios in Windows Server 2012 with
SCVMM
WS-B327 Software Defined Networking with WS2012, SC2012 SP1 and Partner Solutions
Resources
http://channel9.msdn.com/Events
Access MMS Online to view session recordings after the event.
Evaluation
Complete your session evaluations today and enter to win prizes daily. Provide your feedback at a CommNet kiosk or log on at www.2013mms.com.Upon submission you will receive instant notification if you have won a prize. Prize pickup is at the Information Desk located in Attendee Services in the Mandalay Bay Foyer. Entry details can be found on the MMS website.
We want to hear from you!
© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Appendix
Microsoft vs. VMware
NTFSGPT
VMFS-5 – Unified 1MB block (large files), increased, file count, small file support,
large volumes (60TB), smaller blocks (8K)
Hyper-V live storage migration, shared nothing migration
Storage vMotion – single pass migration (using mirroring)
Offloaded data transfer (supports block and file), thin provisioning reclamation and
threshold alertsNote: assisted locking not required with
CSV
VAAI – Full copy, block zeroing, hardware assisted locking, thin provisioning reclamation and alerts, hardware
accelerated NAS file copy
MPIO and partner DSMiSCSI Multipathing Enhancements
Hyper-V Virtual FC HBAVM with FC storage
Windows Server 2012Scale-out File Server
SMB 3.0NFS 4.1
NFS Support
Multiple improvement in the platform around better handling of this situation to
avoid threads waiting indefinitely.
Better handling the All Paths Down (APD) and Permanent Device Loss (PDL)
conditions
Hyper-V live snapshot mergeSnapshot Consolidate
VMM placement engine accounts for available space but limited visibility into
I/O latency
Storage DRS Initial Placement - pick the most appropriate datastore for a VM,
based on available space and I/O latency
VMM storage classification (pool level)Profile Driven Storage
VM storage profiles, compatibility checking
Windows Storage SpacesVirtual Storage Appliance
Virtual SAN
VMM storage discoveryWindows Server 2012 SMAPI
VASA - Storage AwarenessStorage capability discovery (dedup,
compression, capacity and storage health monitoring, thin provisioning alarms
Mitigation: Use SSD based storage with SAN or Windows Storage Spaces
vFlash
Strategic differenceScale-out File Server, SMB3, Spaces
vVOL
Mitigation: Storage live migration + OM + PRO
Storage DRS - Balance On Space UsageAutomatic balancing space utilization
Mitigation: Storage live migration + OM + PRO
Storage DRS - Balance On I/O MetricsAutomatic balancing based Storage I/O Control (SIOC) evaluation of datastore
capabilities & latency information
VMware vVOLVirtual Volumes make the VMDK a first class citizen in the storage array. vVOL allows you to snapshot, clone or replicate on a per VM basis from the storage array.
I/O demultiplexor device which can communicate to the VVOLs (VMDKs)
Protocol Endpoint
Storage pool on arrayStorage Container
vCenter uses VASA providers to discover capabilities, create VMDK based on storage profile, and retrieve secondary LUN ID
Storage Provider
Masking In-depth
Masking In-depthSCSI Protocol Controller a.k.a. Storage Groupsa.k.a. Masking Setsa.k.a. Host Groupsa.k.a. View
Ports Per ViewArray target ports
One Hardware ID Per View Server initiator ports
SCSI Protocol ControllerSCSI protocol controller (SPC) is a grouping mechanism on the array using for exposing a storage volume (LUN) to a Windows server
SPC contains target ports (array), storage volumes (LUN), initiator ports (Windows host)
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
Storage Volume(LUN)
SCSIProtocolController (SPC)
VM host
Initi
ator
Port
Initi
ator
Port
Ports per SPCControls how many array target ports an SPC can haveAll Ports Share Same View – All targets ports in SPCMultiple Ports Per View – one, some or all target ports in SPCOne Port Per view – one target port in SPC
All Ports Share Same SPCSPC includes all of the target ports on the array
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
SCSIProtocolController (SPC)
Multiple Ports per SPCSPC includes all, some, or one of the target ports on the array
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
SCSIProtocolController
(SPC)
SCSIProtocolController (SPC)
One Port per SPCSPC includes only one target port on the array
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
Targ
etPo
rt
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
Ports per SPC
Setting Implementation Notes Examples
All Ports Share Same View Simplicity NetApp FASHP EVAEMC ClariionDell Compellent
Multiple Ports Per View Flexibility (can mimic both One Port per View and All Ports Share Same View)
EMC VMAXHP 3PAR
One Port Per View Traditional Hitachi VSPHP P2000Hitachi AMS
One Hardware ID per SPCOne Hardware ID per SPC == True One Hardware ID per SPC ==
False
Storage Array
Targ
etPo
rt
Targ
etPo
rt Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
One Hardware ID per SPC
Setting Implementation Notes Examples
TRUE Traditional Hitachi AMSHP P2000Dell Compellent
FALSE Flexibility (allows for one SPC per cluster) EMC VMAX, ClariionIBM XIV, SVC, V7000HP EVA, 3ParNetApp FASHitachi VSP
SPC Creation for ClustersCreate SPCs per Cluster == True Create SPCs per Cluster == False
Storage Array
Targ
etPo
rt
SCSIProtocolController (SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController (SPC)
Storage Volume(LUN)
Storage Array
Targ
etPo
rt
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
Storage Volume(LUN)
SPC Creation for Clusters
Setting Implementation Notes Examples
TRUE On some arrays, unmasking operations get serialized so the time required to unmask a LUN to multiple nodes in the cluster increases (minutes)
No flexibility to have a separate LUN for boot from SAN
EMC VMAXHitachi VSP
Setting Implementation Notes Examples
All Ports Share Same SPC
Multiple Ports Per SPC
One Port Per SPC
One Hardware ID Per SPC == FALSE
Create SPCs per Cluster == True or
False
Create SPCs per Cluster == True or
False
Create SPCs per Cluster == True or
False
One Hardware ID Per SPC == TRUE
Create SPCs per Cluster – Not Applicable
Create SPCs per Cluster - Not Applicable
Create SPCs per Cluster - Not Applicable
All/Multi Ports per SPC
One Hardware ID per SPC == False
Create SPCs per Cluster == True
All/Multi Ports per SPC
One Hardware ID per SPC == False
Create SPCs per Cluster == False
Storage Array
Targ
etPo
rt
Targ
etPo
rt Storage Volume(LUN)
SCSIProtocolController (SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
Storage Array
Targ
etPo
rt
Targ
etPo
rt Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
One Port per SPC
One Hardware ID per SPC == False
Create SPCs per Cluster == True
One Port per SPC
One Hardware ID per SPC == False
Create SPCs per Cluster == False
Storage Array
Targ
etPo
rt
Targ
etPo
rt Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
All/Multi Ports per SPC
One Hardware ID per SPC == True
Create SPCs per Cluster – N/A
Storage ArrayTarg
etPo
rt
Targ
etPo
rt Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
One Ports per SPC
One Hardware ID per SPC == True
Create SPCs per Cluster – N/A
Storage Array
Targ
etPo
rt
Targ
etPo
rt
Storage Volume(LUN)
SCSIProtocolController
(SPC)
VM host
Initi
ator
Port
Initi
ator
Port
VM host
Initi
ator
Port
Initi
ator
Port
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
SCSIProtocolController
(SPC)
Top Related