• Shortcuts : 'n' next unread feed - 'p' previous unread feed • Styles : 1 2

» Publishers, Monetize your RSS feeds with FeedShow:  More infos  (Show/Hide Ads)


Date: Tuesday, 20 Mar 2012 17:46

 

blogs.msnd.com_taylorb35Windows Server 8 brings support for storing and running Hyper-V virtual machines on SMB2.2 file shares, which is pretty handy, especially with the new Scale-Out/Continuously Available file server features in Windows Server 8.  However it does bring one challenge to the table – if you want to remotely manage your Hyper-V servers and use SMB then Kerberos's single hop tickets become a problem.

The basic issue is that when you login to a domain and want to access a remote machine the domain issues a security token which is presented to the remote server to saying who you are and what not – however just like a concert ticket once it’s scanned at the door it’s no good.  This means that in the case of Hyper-V remote management your token is only valid between the computer running the UI and the Hyper-V server so if/when you try to configure a virtual machine to use resources on a third computer there is no longer a valid token to ensure that you, the person configuring that virtual machine, should have access to the resources on the third machine.  Now once the VM has been configured the remote resources are accessed in the context of the Hyper-V servers computer account but during virtual machine creation or when attaching VHDs/ISOs to the VM we have to ensure that the user that’s performing that operation also has access to those resource and isn’t just piggy backing on the Hyper-V servers rights to access those files.

Overview_webIn order to solve this challenge we need to enable constrained delegation which tells active directory that between two computers, in this case the Hyper-V server and the SMB server, and for specific services, in this case CIFS/SMB, its allowed to effectively re-issue the token for the user – kind of like a re-admission stamp.  For the examples below let’s take an environment similar to this – we have a two node Windows Server 8 Scale-Out file server cluster, two standalone Hyper-V Servers and a remote management workstation.  In this environment we want to create an SMB share and then create a new VM on that share.  If we just create the SMB share and try to create a virtual machine on that share creating the VM will fail with access denied or the operation has failed errors – so we have to configure the security and delegation.

 

Please be aware that Hyper-V on Windows Server 2008 or R2 does not support virtual machines using SMB or any NAS storage – this is a new feature for Windows Server 8 and requires that the the SMB server support SMB 2.2.  See http://technet.microsoft.com/en-us/library/dd183729.aspx for more details.


Overview Of Process

  1. Create Active Directory Groups For Hyper-V Server and Hyper-V Administrative Users (optional)
  2. Configure Constrained Delegation Between Hyper-V Servers and SMB Server
  3. Create SMB Share For Virtual Machines
  4. Create Virtual Machines

Create Active Directory Groups For Hyper-V Server and Hyper-V Administrative Users (optional)
This is an optional step – you can chose to specify all of the computer and user accounts specifically during section 3 “Create SMB Share For Virtual Machines” steps 7.2, 7.3, 8.2, 8.3.  I like utilizing security groups as it ensures that as I change or grow an environment that new servers and users get access to resources in a uniform way.

  1. Create A New Security Group Which Will Contain All Hyper-V Servers That Will Host VMs On The SMB Share (hv-hosts in my example)
    blogs.msnd.com_taylorb12
  2. Add The Computer Accounts Of All Hyper-V Servers To The Security Group (37-4611K2615L and 37-4611K2617L in my example)
    blogs.msnd.com_taylorb14 blogs.msnd.com_taylorb13
  3. Create A New Security Group Which Will Contain All Users Accounts Of Admins That Will Create VMs On The SMB Share (hv-admins in my example)
  4. Add The User Accounts of The Admins To The Security Group

Configure Constrained Delegation Between Hyper-V Servers and SMB Server

For Each Hyper-V Server…

  1. Using The Active Directory Users and Computers Dialog Open The Properties Dialog On The Computer Account and Select The Delegation Tab
    blogs.msnd.com_taylorb2
  2. Select “Trust this computer for deliberation to the specified services only” Correction Use Kerberos only works and “Use any authentication protocol”
     blogs.msdn.com_taylorb.fix2
  3. Select “Add” and Provide the Name Of The SMB Server (or Cluster Access Point for Scale Out of Highly Available Shares) (hv-w8-beta-smb in my example)
    blogs.msnd.com_taylorb4
  4. Select The “cifs” Service – CIFS Is Another Name For SMB
    blogs.msnd.com_taylorb5 blogs.msdn.com_taylorb.fix3

Create SMB Share For Virtual Machines

These steps are specific to Windows 8 Consumer Preview (Beta) – if you are using a different OS the pertinent steps are 7.2, 7.3, 8.2, 8.3

  1. Using Server Manager Select the “File and Storage Services” Tab On the Left Side Then “Shares” From The Pop Out Menu
    blogs.msnd.com_taylorb17
  2. Select The Link To Create a New Share or From Tasks Select “Create a new share”
  3. Select the “SMB Share – Server Application” From The Profile List (this will give you the correct options in the wizard)
    blogs.msnd.com_taylorb27
  4. Select the Server and Volume (or path) Where You Want To Create the Share (hv-w8-beta-smb and c:\clusterstorage\volume1 in my example)
    blogs.msnd.com_taylorb28
  5. Provide a Name For the Share (VirtualMachines in my example)
    blogs.msnd.com_taylorb29
  6. Ensure That “Enable Continuous availability” Is Selected
    blogs.msnd.com_taylorb30
  7. On The Permissions Tab Select Customize Permissions
    1. The Following Few Steps are Optional – I Personally Don’t Like Inherited Permissions or Local Groups Because They Reduce My Control Over Access
      1. Select “Disable Inheritance” and “Convert inherited permissions into explicit permissions on this object”
        blogs.msnd.com_taylorb33
      2. Remove The Following Permissions: Users (Special), Users (Read & Execute), Administrators (Full Control/This Folder), Administrators (Full Control/Subfolders)
        blogs.msnd.com_taylorb34
      3. Change The Owner From Administrators To The Active Directory Group Created Earlier Containing The Hyper-V Administrators, or another group as desired (hv-admins in my example)
        blogs.msnd.com_taylorb18
    2. Add Full Control Permissions For The Hyper-V Administrators Using The Active Directory Group Created Earlier (hv-admins in my example)
      blogs.msnd.com_taylorb19
    3. Add Full Control Permissions For The Hyper-V Servers Using The Active Directory Group Created Earlier (hv-hosts in my example)
      blogs.msnd.com_taylorb20
  8. On The Share Tab 
    1. Remove The Allow Everyone Entry
    2. Create a Full Control Entry For The Hyper-V Administrators Using The Active Directory Group Created Earlier (hv-admins in my example)
    3. Create a Full Control Entry For The Hyper-V Servers Using The Active Directory Group Created Earlier (hv-hosts in my example)
      blogs.msnd.com_taylorb23
  9. Verify Your Settings and Create the Share
    blogs.msnd.com_taylorb25blogs.msnd.com_taylorb26

Create Virtual Machines

  1. Using Hyper-V Manager Open The New Virtual Machine Wizard
    blogs.msnd.com_taylorb37
  2. Specify a Name For the Virtual Machine and The Location as Being On The SMB Share Previously Created (this is the location that will contain the configuration, smart paging and save state files for the virtual machine)
    blogs.msnd.com_taylorb38
  3. Similarly Specify A VHD (VHDx) Location On The SMB Share For the Virtual Machine
    blogs.msnd.com_taylorb39
  4. Complete The Wizard And You’ve Got a VM Created on SMB All Done Via Remote Management
    blogs.msnd.com_taylorb40

Done…

I would like to thank Jose Barreto – his blog post Using Constrained Delegation to remotely manage a server running Hyper-V that uses CIFS/SMB file shares gives a great overview of this process as well.

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "Hyper-V - Windows 8"
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 15 Mar 2012 16:31

It’s been a busy couple months (years) but Windows Server “8” Beta has shipped and is publically available for download,  I’m personally very proud of all the work that went into Windows Server “8” especially in Hyper-V (maybe I’m biased) but really across the whole OS…  In the coming days, weeks, months I’m planning a series of posts highlighting some of the new scenarios enabled by the new features in Hyper-V and in corporation with several of the other new features from our partner teams. If you haven’t yet been to TechNet to see all the new features and functionality in Windows Server “8” Beta you should definitely take a look…

Here’s a few particularly relevant links:

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "Hyper-V - Windows 8"
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 07 Mar 2012 21:12

In response to a few of my old posts Hyper-V WMI Using PowerShell Scripts – Part 5 (Creating Virtual Switchs/Networks) and Hyper-V V2: Guest Only External Networks + Add Roles Wizard Changes I’ve had a lot of people ask me how to create external virtual switches that do not allow management traffic i.e. guest only external switches or vm only external switches. 

So Here you go – do note that I am using my ProcessWMIJob function from my past posting Hyper-V WMI: Rich Error Messages for Non-Zero ReturnValue (no more 32773, 32768, 32700…).

function CreateSwitch
{
param
(
    [string] $SwitchName = $null,
    [string] $PhysicalNICName = $null 
)

    $VirtualSwitchService = Get-WmiObject -Namespace "root\virtualization"  -Class "Msvm_VirtualSwitchManagementService"
    
    $CreatedSwitch = ($VirtualSwitchService.CreateSwitch([guid]::NewGuid().ToString(), $SwitchName, "1024","") `
        | ProcessWMIJob $VirtualSwitchService "CreateSwitch").CreatedVirtualSwitch

    $ExternalNic = Get-WmiObject -Namespace "root\virtualization" -Class "Msvm_ExternalEthernetPort" `
        -Filter "Name = '$PhysicalNICName'"
    
    $VirtualSwitchService.BindExternalEthernetPort($ExternalNic.__PATH) `
        | ProcessWMIJob $VirtualSwitchService "BindExternalEthernetPort"
    
    $ExternalNicEndPoint = $ExternalNic.GetRelated("CIM_LanEndpoint")
    
    $ExternalSwitchPort = ($VirtualSwitchService.CreateSwitchPort($CreatedSwitch, `
        [Guid]::NewGuid().ToString(), "ExternalSwitchPort", "") `
        | ProcessWMIJob $VirtualSwitchService "CreateSwitchPort").CreatedSwitchPort
        
    $VirtualSwitchService.ConnectSwitchPort($ExternalSwitchPort, $ExternalNicEndPoint) `
        | ProcessWMIJob $VirtualSwitchService "ConnectSwitchPort"
}

The process is pretty straight forward – and even more so if you consider the Hyper-V networking model…

  1. We create a new virtual switch using the CreateSwitch(…) API.  think of this as racking a new physical switch
  2. We identify the external network adapter we are going to connect to.  think of this as identifying to path port you will connect the switch to
  3. We bind the Hyper-V virtual switch driver to the physical NIC with the BindExternalEthernetPort(…) API.  think of this as plugging one end of a cable into the patch panel
  4. We identify the Lan Endpoint of the physical nic.  think of this as finding the other end of the cable from the patch panel
  5. We create an external port of the virtual switch we created in step 1.  think of this as configuring and enabling the uplink port on the new switch
  6. We connect the ports… Plug the uplink cable into the new switch.

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "WMI, Hyper-V - Windows Server 2008 R2"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 10 Jan 2012 18:50

Today we released a fix for to resolve an issue that can lead to guest VM’s crashing after a live migration.  This issue only impacted virtual machines that where utilizing virtual SCSI controllers and was only seen under some specific stress conditions however if you have VM’s with SCSI controllers and utilize live migration than I would recommend investigating and installing this hotfix.

http://support.microsoft.com/kb/2636573

Article ID: 2636573 - Last Review: January 10, 2012 - Revision: 1.0

FIX: The guest operating system may crash when you perform a live migration of Hyper-V virtual machines in a Windows Server 2008 R2 environment

 

Symptoms

In a Windows Server 2008 R2 environment, you perform a live migration of Hyper-V virtual machines. In this scenario, the guest operating system may crash. Additionally, you receive a Stop error message that resembles the following:

STOP 0x000000D1 (parameter1, parameter2, parameter3, parameter4)
DRIVER_IRQL_NOT_LESS_OR_EQUAL

Resolution

To resolve this problem, install this update on the host computer where the Hyper-V virtual machines are located.

Update information
To resolve this problem, install this update from Microsoft Windows Update (http://update.microsoft.com) .
Additionally, you can install this update from the Microsoft Download Center.
The following files are available for download from the Microsoft Download Center:

Download the update package now. (http://www.microsoft.com/downloads/details.aspx?FamilyId=06c9e6e0-26de-44dc-a2e7-6a87fe0d5e76)
Release Date: January 10, 2012
For more information about how to download Microsoft support files, click the following article number to view the article in the Microsoft Knowledge Base:

119591 (http://support.microsoft.com/kb/119591/ ) How to obtain Microsoft support files from online services

Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.

Prerequisites
To apply this hotfix, you must be running Windows Server 2008 R2 Service Pack 1 (SP1).
For more information about how to obtain Service Pack 1 for Windows Server 2008 R2, click the following article number to view the article in the Microsoft Knowledge Base:

976932 (http://support.microsoft.com/kb/976932/ ) Information about Service Pack 1 for Windows 7 and for Windows Server 2008 R2

Registry information
To use the hotfix in this package, you do not have to make any changes to the registry.
Restart information

You must restart the computer after you apply this hotfix.

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "Hyper-V - Windows Server 2008 R2"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 02 Aug 2011 16:52

The SQL CAT team has published a new whitepaper regarding dynamic memory best practices with Hyper-V…  If your virtualizing SQL I would highly recommend taking a look!

Summary:
Memory is a critical resource to Microsoft SQL Server workloads, especially in a virtualized environment where resources are shared and contention for shared resources can lead to negative impact on the workload. Windows Server 2008 R2 SP1 introduced Hyper-V Dynamic Memory, which enables virtual machines to make more efficient use of physical memory resources. Hyper-V Dynamic Memory treats memory as a shared resource that can be reallocated automatically among running virtual machines. There are unique considerations that apply to virtual machines that run SQL Server workloads in such environments. This whitepaper provides insight into considerations and best practices for running SQL Server 2008 R2 in Hyper-V Dynamic Memory configurations on Windows Server 2008 R2 SP1.

To continue reading, please download the whitepaper: http://msdn.microsoft.com/en-us/library/hh372970.aspx

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 26 Apr 2011 19:00

If you are running a cluster with Windows Server 2008 R2 SP1 and three or more nodes you should install this KB.

KB Link: http://support.microsoft.com/kb/2531907

Symptoms

Consider the following scenario:

  • You configure a failover cluster that has three or more nodes that are running Windows Server 2008 R2 Service Pack 1 (SP1).
  • You have cluster disks that are configured in groups other than the Available Storage group or that are used for Cluster Shared Volumes (CSV).
  • These disks are online when you run the Validate SCSI Device Vital Product Data (VPD) test or the List Potential Cluster Disks storage validation test.
In this scenario, the Validate SCSI Device Vital Product Data (VPD) test fails. Additionally, you receive an error message that resembles the following:

Failed to get SCSI page 83h VPD descriptors for cluster disk <number> from <node name> status 2

The List Potential Cluster Disks storage validation test may display a warning message that resembles the following:

Disk with identifier <value> has a Persistent Reservation on it. The disk might be part of some other cluster. Removing the disk from validation set.

Resolution

The following hotfix resolves an issue in which the storage test runs on disks that are online and incorrectly not in the Available Storage group.
The error and warning messages that are mentioned in the "Symptoms" section may also occur because of other issues such as storage problems or an incorrect configuration. Therefore, you should investigate other events, check the storage configuration, or contact your storage vendor if this issue still occurs after you install the following hotfix.

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "IT Professional, Hyper-V - Windows Serve..."
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 26 Apr 2011 17:14

The recent Free Online Class - Microsoft Virtualization for VMware Professionals was a hit – I head it had one of the highest attendance levels ever… The content from that course is not available online.

Announcing Microsoft Virtualization Jump Start Training Videos!

Microsoft Learning hosted another new and exclusive Jump Start virtual training event – Microsoft Virtualization for VMware Professionals. We are thrilled to announce availability of the HD-quality video recordings – FREE – on TechNet Edge and soon coming to MS Showcase, the Zune Marketplace, iTunes! Additionally, every module will be made available (with assessment questions) on the Microsoft Virtual Academy (MVA) in the next few weeks.

What’s the high-level overview?

  • The 15-hour course is broken into three sections covering Microsoft Virtualization: Platform, Management, and VDI
  • “Team-teaching” approach led by Microsoft Technical Evangelist, Symon Perriman and Microsoft partner and virtualization architect, Corey Hynes
  • Every module is an engaging discussion, packed with best practices and real-world demonstrations

Who is the target audience for this training?

  • IT Professionals, Virtualization Engineers, Data Center Managers, IT Decision Makers, Network Administrators, Storage/Infrastructure Administrators & Architects
  • Microsoft customers and partners currently using VMware
  • Companies using VMware searching for real-world answers as they consider whether or not Microsoft Virtualization truly fits their needs

Where do I go for this great training?

The HD-quality video recordings of this course are on TechNet Edge. 
Entire course on TechNet Edge: Microsoft Virtualization for VMware Professionals

Where can people learn more?

Virtualization experts worldwide are taking a new look at Microsoft Virtualization. After this Jump Start, we hope you will understand why. Check out the Microsoft Learning “Virtualization Training Portal” to better understand virtualization-specific certifications and where to find instructor-led classes to help you and your team. Additionally there is great training content on the Microsoft Virtual Academy (MVA) where you can learn at your own pace, connect with other IT Pros and earn prizes & rewards.

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "IT Professional, Hyper-V - Windows Serve..."
Comments Send by mail Print  Save  Delicious 
Date: Monday, 28 Mar 2011 17:49

Symon Perriman, formally from the Windows Clustering team and now a technical evangelist is going to be putting on a free tanning class on March 29-31, 2010 from 10:00am-4:00pm PDT.  Below are the full details of the class for any that are interested.

 

Microsoft Virtualization for VMware Professionals
Free Online Classes – March 29 – 31

Just one week after Microsoft Management Summit 2011 (MMS), Microsoft Learning will be hosting an exclusive three-day Jump Start class specially tailored for VMware and Microsoft virtualization technology pros. Registration for Microsoft Virtualization for VMware Professionals is open now and will be delivered as a FREE online class on March 29-31, 2010 from 10:00am-4:00pm PDT
 

What’s the high-level overview?

This cutting edge course will feature expert instruction and real-world demonstrations of Hyper-V and brand new releases from System Center Virtual Machine Manager 2012 Beta (many of which will be announced just one week earlier at MMS). Register Now!
Day 1 will focus on “Platform” (Hyper-V, virtualization architecture, high availability & clustering)
10:00am – 10:30pm PDT: Virtualization 360 Overview
10:30am – 12:00pm: Microsoft Hyper-V Deployment Options & Architecture
1:00pm – 2:00pm: Differentiating Microsoft and VMware (terminology, etc.)
2:00pm – 4:00pm: High Availability & Clustering
Day 2 will focus on “Management” (System Center Suite, SCVMM 2012 Beta, Opalis, Private Cloud solutions)
10:00am – 11:00pm PDT: System Center Suite Overview w/ focus on DPM
11:00am – 12:00pm: Virtual Machine Manager 2012 | Part 1
1:00pm – 1:30pm: Virtual Machine Manager 2012 | Part 2
1:30pm – 2:30pm: Automation with System Center Opalis & PowerShell
2:30pm – 4:00pm: Private Cloud Solutions, Architecture & VMM SSP 2.0
Day 3 will focus on “VDI” (VDI Infrastructure/architecture, v-Alliance, application delivery via VDI)
10:00am – 11:00pm PDT: Virtual Desktop Infrastructure (VDI) Architecture | Part 1
11:00am – 12:00pm: Virtual Desktop Infrastructure (VDI) Architecture | Part 2
1:00pm – 2:30pm: v-Alliance Solution Overview
2:30pm – 4:00pm: Application Delivery for VDI
Every section will be team-taught by two of the most respected authorities on virtualization technologies: Microsoft Technical Evangelist Symon Perriman and leading Hyper-V, VMware, and XEN infrastructure consultant, Corey Hynes

 
Who is the target audience for this training?
Suggested prerequisite skills include real-world experience with Windows Server 2008 R2, virtualization and datacenter management. The course is tailored to these types of roles:
  - IT Professional
  - IT Decision Maker
  - Network Administrators & Architects
  - Storage/Infrastructure Administrators & Architects
 
How do I to register and learn more about this great training opportunity?

Register: Visit the Registration Page and sign up for all three sessions
Blog: Learn more from the Microsoft Learning Blog
Twitter: Here are a few posts you can retweet:

- Mar. 29-31 "Microsoft #Virtualization for VMware Pros" @SymonPerriman Corey Hynes http://bit.ly/JS-Hyper-V @MSLearning #Hyper-V
- @SysCtrOpalis Mar. 29-31 "Microsoft #Virtualization for VMware Pros" @SymonPerriman Corey Hynes http://bit.ly/JS-Hyper-V #Hyper-V
- Learn all the cool new features in Hyper-V & System Center 2012! SCVMM, Self-Service Portal 2.0, http://bit.ly/JS-Hyper-V #Hyper-V #Opalis

 
What is a “Jump Start” course?
A “Jump Start” course is “team-taught” by two expert instructors in an engaging radio talk show style format. The idea is to deliver readiness training on strategic and emerging technologies that drive awareness at scale before Microsoft Learning develops mainstream Microsoft Official Courses (MOC) that map to certifications. All sessions are professionally recorded and distributed through MS Showcase, Channel 9, Zune Marketplace and iTunes for broader reach.

Please join us for this fantastic event!

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "Taylor Brown [Microsoft Hyper-V]"
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 09 Feb 2011 19:34

Service Pack 1 for Windows Server 2008 R2 and Windows 7 has officially shipped today.  For Hyper-V this brings some great new features such as dynamic memory and RemoteFX as well as many other minor feature improvements, bug fixes and performance enhancements. You can read all about it on the server team blogs.  Or just download it and try these great features for your self!

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

 
Author: "Taylor Brown [Microsoft Hyper-V]" Tags: "Hyper-V, Hyper-V Version 2"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 06 Jul 2010 18:28

A new whitepaper detailing high performance SQL workloads running in Hyper-V R2 virtual machines.  The paper can be downloaded here...  Below are a few highlights/examples from the paper.

Dedicated Passthough LUN’s vs VHD’s

image

Figure 3: I/O and disk latency for dedicated pass-through disks versus VHDs

Multi-Instance Throughput: Native versus Virtual (16 core server)

The results of this test are summarized as follows:

  • Slightly higher logical processor utilization is required to achieve the same throughput with virtualization due to minimal additional processor overhead.
  • Native instances and virtual instances achieve the same level of scalability.
  • I/O performance of ~5 percent for pass-through disks is greater than fixed-size VHDs as shown in Figure 3. Note that pass-through disks have an approximately one millisecond lower latency as compared to fixed-size VHDs.
image

Figure 4: Multi-Instance throughput: native instances versus virtual instances (16 cores)

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 01 Jul 2010 17:00

So here’s the scenario you need or want to figure out which LUN is which on your cluster…

On Tuesday I published part 1 where I utilized Get-ClusterParameter and the DiskUniqueIds property to enumerate LUN information for cluster storage, in part 2 I simplified that same approach.   In today’s post I am going to continue utilizing the Get-ClusterParameter again looking at the Physical Disk Private Properties however in this post I’ll be looking at the DiskIdGuid property.  This property contains the GUID for a physical disk formatted with as GPT.  Using this GUID we can match it with VDS and get all of the good information that VDS has about disks.

Method 1

This method is fully supported by Microsoft and is relatively strait forward.

Step 1: Import the FailoverClusters module into your PowerShell Window  
              Import-Module FailoverClusters
Step 2: Get the CSV object your interested in using the Get-ClusterSharedVolume cmdlet
              $csv = Get-ClusterSharedVolume –Name “MyCSV”
Step 3: Get the Cluster Parameters for the CSV object using Get-ClusterParameter
              $CSVParams = Get-ClusterParameter -InputObject $csv
Step 4: Filter to get just the DiskIdGuid 
              ($CSVParams | Where-object -FilterScript {$_.Name -eq "DiskIdGuid"}).Value

Ok now you’ve got the GUID for the LUN it will be something like {32443078-9afc-4c0a-b142-466f582a4051}.

Step 5: Start diskpart.exe
Step 6: Start iterating over disks using select disk <number> and then uniqueid disk until you match the GUID’s. It will look like this:

C:\Users\taylorb>diskpart.exe
Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: 37-4611K2713G

DISKPART> select disk 1
Disk 1 is now the selected disk.

DISKPART> uniqueid disk
Disk ID: {F1B5319E-FF92-40BB-9BC9-D5FFAD0AD66B}

DISKPART> select disk 2
Disk 2 is now the selected disk.

DISKPART> uniqueid disk
Disk ID: {32443078-9AFC-4C0A-B142-466F582A4051}


Step 7: Once you find the disk you want you can use the detail disk command to get more information.  It will look like this:

DISKPART> detail disk

IBM 2810XIV  Multi-Path Disk Device
Disk ID: {32443078-9AFC-4C0A-B142-466F582A4051}
Type   : FIBRE
Status : Reserved
Path   : 0
Target : 1
LUN ID : 2
Location Path : UNAVAILABLE
Current Read-only State : No
Read-only  : No
Boot Disk  : No
Pagefile Disk  : No
Hibernation File Disk  : No
Crashdump Disk  : No
Clustered Disk  : Yes

There are no volumes.

Method 2

This method utilizes an undocumented and unsupported class I first posted about previously in Using The Virtual Disk Service (VDS) From Powershell to Mount and Use VHD's as well as in Virtual Disk Service (VDS) Powershell Script Version 2 - Previously Created Volume Support + Mount Points + Bug Fixes.  Again I must reiterate this is not an officially supported API it has no warrantee – it may break at any time and Microsoft Support can not and will not help you with it.  Now that the disclaimer is over – in this example I am using the VDS api’s to do the mapping for me.

Script

#Load the Microsoft Storage VDS Library
#
This is an undocumented, unsupported library, there is no warrantee nor gaurantees.
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Storage.Vds") | Out-Null
$VdsServiceLoader = New-Object Microsoft.Storage.Vds.ServiceLoader
$VdsService = $VdsServiceLoader.LoadService($null)
$VdsService.WaitForServiceReady()
$VdsService.Reenumerate()

#Build up a collection of all disks presented to the os
$Disks = ($VdsService.Providers |% {$_.Packs}) |% {$_.Disks}

#Import the FailoverClusters module
Import-Module FailoverClusters

#Retreve all of the CSV Lun's
$AllCSVs = Get-ClusterSharedVolume
foreach ($Csv in $AllCSVs)
{
   
$CSVParams = Get-ClusterParameter -InputObject $Csv
    
   
#Retreve the DiskIDGuid Object from the Cluster Parameters
$DiskGUIDString = ($CSVParams | Where-object -FilterScript {$_.Name -eq "DiskIdGuid"}).Value
    
   
#Match up the DiskID's
$Disk = ($Disks | Where-Object -FilterScript {$_.DiskGuid -eq $DiskGUIDString})
       
Write-Host "CSV ClusterResourceName: " $Csv.Name
       
Write-Host "DiskID: " $DiskGUIDString
       
Write-Host "DiskFriendlyName: " $Disk.FriendlyName
       
Write-Host "DiskName: " $Disk.Name
       
Write-Host "DiskAddress: " $Disk.DiskAddress
       
Write-Host
}

Sample Output

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\taylorb>.\GetCSVDevInfo1.ps1

CSV ClusterResourceName:  Cluster_CSV1_IBMXIV
DiskID:  {32443078-9afc-4c0a-b142-466f582a4051}
DiskFriendlyName:  IBM 2810XIV  Multi-Path Disk Device
DiskName:  \\?\PhysicalDrive2
DiskAddress:  Port1Path0Target1Lun2

CSV ClusterResourceName:  Cluster_CSV2_IBMXIV
DiskID:  {ee36e403-75cb-4e23-87b4-e82af7949f4e}
DiskFriendlyName:  IBM 2810XIV  Multi-Path Disk Device
DiskName:  \\?\PhysicalDrive3
DiskAddress:  Port1Path0Target1Lun3

CSV ClusterResourceName:  Cluster_CSV3_IBMXIV
DiskID:  {5db28bcb-6ed3-4b80-b363-861a25cc10e4}
DiskFriendlyName:  IBM 2810XIV  Multi-Path Disk Device
DiskName:  \\?\PhysicalDrive4
DiskAddress:  Port1Path0Target1Lun4

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 30 Jun 2010 17:08

So here’s the scenario you need or want to figure out which LUN is which on your cluster…

Yesterday I posted a script which used Get-ClusterParameter and the Physical Disk Private Properties to gather information on the storage being used by the cluster – as promised here’s a less verbose version of that script…

Script

Import-Module FailoverClusters
$csv1 = Get-ClusterSharedVolume Cluster_CSV1_IBMXIV
$csvParams = Get-ClusterParameter -InputObject $csv1
$DiskUniqueIds = ($csvParams | Where-object -FilterScript {$_.Name -eq "DiskUniqueIds"}).Value

$CountOfIdentifiers = $DiskUniqueIds[8]

$currentArrayIndex = 12
for($a = 0; $a -lt $CountOfIdentifiers; $a++)
{
   
$CodeSet = $DiskUniqueIds[$currentArrayIndex]
   
$Length = $DiskUniqueIds[$currentArrayIndex+8]
   
$NextOffset = $DiskUniqueIds[$currentArrayIndex+10]
    
   
switch ($DiskUniqueIds[$currentArrayIndex+4])
    {
   
0 {Write-Host "StorageIdType: VendorSpecific";break}
   
1 {Write-Host "StorageIdType: VendorId";break}
   
2 {Write-Host "StorageIdType: EUI64";break}
   
3 {Write-Host "StorageIdType: FCPHName";break}
   
4 {Write-Host "StorageIdType: PortRelative";break}
   
5 {Write-Host "StorageIdType: TargetPortGroup";break}
   
6 {Write-Host "StorageIdType: LogicalUnitGroup";break}
   
7 {Write-Host "StorageIdType: MD5LogicalUnitIdentifier";break}
   
8 {Write-Host "StorageIdType: ScsiNameString";break}
    }
    
   
switch ($DiskUniqueIds[$currentArrayIndex+12])
    {
   
0 {Write-Host "StorageIdAssoc: Device";break}
   
1 {Write-Host "StorageIdAssoc: Port";break}
   
2 {Write-Host "StorageIdAssoc: Target";break}
    }
    
   
$Data = $null
   
switch($CodeSet)
    {
   
2 { #StorageIdCodeSetAscii
$DiskUniqueIds_ptr = [System.Runtime.InteropServices.Marshal]::UnsafeAddrOfPinnedArrayElement($DiskUniqueIds, $currentArrayIndex+16)
       
$Data = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($DiskUniqueIds_ptr, $Length)
       
break
        }
    
   
3 { #StorageIdCodeSetUtf8
$DiskUniqueIds_ptr = [System.Runtime.InteropServices.Marshal]::UnsafeAddrOfPinnedArrayElement($DiskUniqueIds, $currentArrayIndex+16)
       
$Data = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($DiskUniqueIds_ptr, $Length)
       
break
        }
    
   
default { #0=StorageIdCodeSetReserved, 1=StorageIdCodeSetBinary
for($x = ($currentArrayIndex+16); $x -lt ($currentArrayIndex + 16 + $Length); $x++)
        {
           
$Data += , $DiskUniqueIds[$x]
        }
       
break
        }
    }
   
Write-Host "Data: " $Data
   
$currentArrayIndex+=$NextOffset

   
Write-Host
}

Sample Output

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\taylorb>.\GetCSVDevInfo1.ps1

StorageIdType:  EUI64
StorageIdAssoc:  Device
Data:  0 23 56 0 1 19 0 28

StorageIdType:  VendorId
StorageIdAssoc:  Device
Data:  IBM     2810XIV          1300113001C

StorageIdType:  VendorSpecific
StorageIdAssoc:  Device
Data:  vol=CSV_1

StorageIdType:  VendorSpecific
StorageIdAssoc:  Device
Data:  host=37-4611K2713K

StorageIdType:  TargetPortGroup
StorageIdAssoc:  Port
Data:  0 0 0 0

StorageIdType:  PortRelative
StorageIdAssoc:  Port
Data:  0 0 7 1

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 29 Jun 2010 22:00

So here’s the scenario you need or want to figure out which LUN is which on your cluster… 

Well if you just use the Get-ClusterSharedVolume cmdlet it won’t get you very far…  However there’s another cmdlet Get-ClusterParameter that will give you enough data that when combined with some other PowerShell/.Net magic will.  This function will return the Cluster Object Private Properties for a given object you can look on MSDN to see all of them – in this case we are interested specifically in the Physical Disk Private Properties.

For this first example I am going to utilize the DiskUniqueIds property to extract information about the specific LUN.  Looking at the documentation for this property it returns a STORAGE_DEVICE_ID_DESCRIPTOR structure which has a set of identifiers – after some more digging around it turns out these identifiers are actually STORAGE_IDENTIFIER structures which have some interesting values.  For most of the storage I have in the lab at the very least the vendor ID (StorageIdTypeEUI64) which is actually a bit mask of the IEEE vendor ID along with some vendor specific data (the bit map is documented here and you can search for vendor ID’s here) as well as a VendorID string and some LUN information although some will tell you what port is being used etc…

In order to format all of this data I’m using some inline C# to define a class with the reprehensive structures and enumerations – just copied from MSDN and made pretty for .Net interop.  I also wrote a function in the C# class named DiskUniqueIdstoStorageId, this function takes the byte array returned from calling the Get-ClusterParameter cmdlet and marshel’s it or formats it into the C# classes thus allowing me to consume the now managed object’s in C#.  All in all it might be overkill so look for a shorter version coming soon.

Script

$StorageDevice= @"
using System;
using System.Runtime.InteropServices;

public static class StorageDevice
{
    public enum StorageIdCodeSet
    {
        Reserved = 0,
        Binary = 1,
        Ascii = 2,
        Utf8 = 3
    }

    public enum StorageIdType
    {
        VendorSpecific = 0,
        VendorId = 1,
        EUI64 = 2,
        FCPHName = 3,
        PortRelative = 4,
        TargetPortGroup = 5,
        LogicalUnitGroup = 6,
        MD5LogicalUnitIdentifier = 7,
        ScsiNameString = 8
    }

    public enum StorageIdAssoc
    {
        Device = 0,
        Port = 1,
        Target = 2
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct STORAGE_IDENTIFIER
    {
        public StorageDevice.StorageIdCodeSet CodeSet;
        public StorageDevice.StorageIdType Type;
        public UInt16 IdentifierSize;
        public UInt16 NextOffset;
        public StorageDevice.StorageIdAssoc Association;
        
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
        public string Identifiers;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct STORAGE_DEVICE_ID_DESCRIPTOR
    {
        public UInt32 Version;
        public UInt32 Size;
        public UInt32 NumberOfIdentifiers;
        
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
        public string Identifiers;
    }


    public static STORAGE_IDENTIFIER[] DiskUniqueIdstoStorageId(byte[] DiskUniqueIds)
    {
        IntPtr ArrayAddress = Marshal.UnsafeAddrOfPinnedArrayElement(DiskUniqueIds, 0);

        STORAGE_DEVICE_ID_DESCRIPTOR devId = 
            (STORAGE_DEVICE_ID_DESCRIPTOR)Marshal.PtrToStructure(
            ArrayAddress, typeof(STORAGE_DEVICE_ID_DESCRIPTOR));

        IntPtr AddressOfIdentifiers = (IntPtr)
            ((long)ArrayAddress + 
            (long)(Marshal.OffsetOf(
            typeof(STORAGE_DEVICE_ID_DESCRIPTOR), "Identifiers")));

        IntPtr OffsetOfIdentifiersStrings = Marshal.OffsetOf(
            typeof(STORAGE_IDENTIFIER), "Identifiers");
            
        STORAGE_IDENTIFIER[] ArrayofSTORAGE_IDENTIFIER = 
            new STORAGE_IDENTIFIER[devId.NumberOfIdentifiers];
            
        IntPtr CurrentAddressOfIdentifiers=AddressOfIdentifiers;
        
        for (int i = 0; i < devId.NumberOfIdentifiers; i++)
        {
            ArrayofSTORAGE_IDENTIFIER[i] = 
                (STORAGE_IDENTIFIER)Marshal.PtrToStructure(
                CurrentAddressOfIdentifiers, typeof(STORAGE_IDENTIFIER));

            IntPtr AddressOfIdentifiersString = 
                (IntPtr)((long)CurrentAddressOfIdentifiers + 
                (long)OffsetOfIdentifiersStrings);
                
            switch (ArrayofSTORAGE_IDENTIFIER[i].CodeSet)
            {
                case StorageIdCodeSet.Ascii:
                    ArrayofSTORAGE_IDENTIFIER[i].Identifiers = 
                        Marshal.PtrToStringAnsi(AddressOfIdentifiersString,
                        (Int32)ArrayofSTORAGE_IDENTIFIER[i].IdentifierSize);
                        
                    break;
                    
                case StorageIdCodeSet.Utf8:
                    ArrayofSTORAGE_IDENTIFIER[i].Identifiers = 
                        Marshal.PtrToStringUni(AddressOfIdentifiersString,
                        (Int32)ArrayofSTORAGE_IDENTIFIER[i].IdentifierSize);
                        
                    break;
                    
                default:
                    for (int x=0; x < ArrayofSTORAGE_IDENTIFIER[i].IdentifierSize; x++)
                    {
                        ArrayofSTORAGE_IDENTIFIER[i].Identifiers = 
                            String.Format("{0} {1:X}", 
                            ArrayofSTORAGE_IDENTIFIER[i].Identifiers,
                            Marshal.ReadByte(AddressOfIdentifiersString, x));
                    }
                    break;
            }
            CurrentAddressOfIdentifiers = (IntPtr)
                ((long)CurrentAddressOfIdentifiers + 
                (long)ArrayofSTORAGE_IDENTIFIER[i].NextOffset);
        }
        return ArrayofSTORAGE_IDENTIFIER;
    }
}
"@
add-type -TypeDefinition $StorageDevice

Import-Module FailoverClusters
$AllCSVLuns = Get-ClusterSharedVolume
foreach ($CSV in $AllCSVLuns)
{
   
$CSVParams = Get-ClusterParameter -InputObject $CSV
   
$DiskUniqueId = ($CSVParams | Where-object -FilterScript {$_.Name -eq "DiskUniqueIds"}).Value
   
$StorageId = [StorageDevice]::DiskUniqueIdstoStorageId($DiskUniqueId)
   
Write-Host "CSV ClusterResourceName: " $CSV.Name
   
Write-Host "Identifiers: "
   
$StorageId
   
Write-Host
   
Write-Host
}

 

Sample Output

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\taylorb>.\GetCSVDevInfo1.ps1

CSV ClusterResourceName:  Cluster_CSV1_IBMXIV
Identifiers:
CodeSet        : Binary
Type           : EUI64
IdentifierSize : 8
NextOffset     : 28
Association    : Device
Identifiers    :  0 17 38 0 1 13 0 1C

CodeSet        : Ascii
Type           : VendorId
IdentifierSize : 36
NextOffset     : 56
Association    : Device
Identifiers    : IBM     2810XIV          1300113001C

CodeSet        : Ascii
Type           : VendorSpecific
IdentifierSize : 13
NextOffset     : 32
Association    : Device
Identifiers    : vol=CSV_1

CodeSet        : Ascii
Type           : VendorSpecific
IdentifierSize : 22
NextOffset     : 40
Association    : Device
Identifiers    : host=37-4611K2713K

CodeSet        : Binary
Type           : TargetPortGroup
IdentifierSize : 4
NextOffset     : 24
Association    : Port
Identifiers    :  0 0 0 0

CodeSet        : Binary
Type           : PortRelative
IdentifierSize : 4
NextOffset     : 24
Association    : Port
Identifiers    :  0 0 7 1

CSV ClusterResourceName:  Cluster_CSV2_IBMXIV
Identifiers:
CodeSet        : Binary
Type           : EUI64
IdentifierSize : 8
NextOffset     : 28
Association    : Device
Identifiers    :  0 17 38 0 1 13 0 1D

CodeSet        : Ascii
Type           : VendorId
IdentifierSize : 36
NextOffset     : 56
Association    : Device
Identifiers    : IBM     2810XIV          1300113001D

CodeSet        : Ascii
Type           : VendorSpecific
IdentifierSize : 13
NextOffset     : 32
Association    : Device
Identifiers    : vol=CSV_2

CodeSet        : Ascii
Type           : VendorSpecific
IdentifierSize : 22
NextOffset     : 40
Association    : Device
Identifiers    : host=37-4611K2713F

CodeSet        : Binary
Type           : TargetPortGroup
IdentifierSize : 4
NextOffset     : 24
Association    : Port
Identifiers    :  0 0 0 0

CodeSet        : Binary
Type           : PortRelative
IdentifierSize : 4
NextOffset     : 24
Association    : Port
Identifiers    :  0 0 7 3

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Monday, 14 Jun 2010 16:49

Last week was TechEd 2010 held in New Orleans, it was a great conference with over 10,000 attendees (speakers, exhibitors, attendees combined).  It was also a very very busy week – between working at our Microsoft Virtualization booth, presenting and attending dinner’s/parties the days where long.  This year all of the sessions from TechEd where recorded and are available for free to anyone.  Below is the session that I presented with Vijay Tewari.  Additionally all of the virtualization sessions can be found at http://www.msteched.com/Tracks/Virtualization, there are a few that are missing currently however expect those to be uploaded over the next few days.

Networking and Windows Server 2008 R2 Hyper-V: Deployment Considerations

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 02 Jun 2010 01:02

 

Ever since Hyper-V’s first beta I’ve had people ask about the ability to write there own custom interface to replace VMConnect.  Some wanted a windows application other’s wanted to write a web application.  The goal’s varied from wanting to just show the console session for monitoring to integrating it VM’s into existing physical machine applications to wanting to develop custom hosting applications allowing users to do some things like start/stop and interact but nothing more.  When we started developing Hyper-V we decided that instead of writing our own transport for sending over screen images, key strokes, mouse etc… that we would instead leverage the existing remote desktop protocol (RDP, Terminal Services, TS, what ever you want to call it).

That means that accomplishing developing such a applications is actually pretty straight forward if you know the magic incantation.  The good news is that the Dynamic Datacenter Tool Kit team has posted a full C# sample for just this.  If you combine this code with some of the other code posted either here on my blog or on MSDN you can pretty easily write your very own Hyper-V UI.

The Dynamic Data Center Toolkit for Hosters is located at http://code.msdn.microsoft.com/ddc and the Hyper-V RDP Active X control sample is a sub project off of that page.

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 18 May 2010 17:23
 Screen Capture - Visual Studio w/Test App

Ever since Hyper-V’s first beta I’ve had people ask about the ability to write there own custom interface to replace VMConnect.  Some wanted a windows application other’s wanted to write a web application.  The goal’s varied from wanting to just show the console session for monitoring to integrating it VM’s into existing physical machine applications to wanting to develop custom hosting applications allowing users to do some things like start/stop and interact but nothing more.  When we started developing Hyper-V we decided that instead of writing our own transport for sending over screen images, key strokes, mouse etc… that we would instead leverage the existing remote desktop protocol (RDP, Terminal Services, TS, what ever you want to call it).

That means that accomplishing developing such a applications is actually pretty straight forward if you know the magic incantation.  The good news is that the Dynamic Datacenter Tool Kit team has posted a full C# sample for just this.  If you combine this code with some of the other code posted either here on my blog or on MSDN you can pretty easily write your very own Hyper-V UI.

 

The Dynamic Data Center Toolkit for Hosters is located at http://code.msdn.microsoft.com/ddc and the Hyper-V RDP Active X control sample is a sub project off of that page.

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb" Tags: "Hyper-V"
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 18 Mar 2010 18:26

I’ve been waiting and waiting to post this and today I can… Today we officially announced Windows Server 2008 R2 service pack 1 – with service pack 1 we will be releasing two great features for Hyper-V.  The first is Dynamic Memory which allows virtual machines to automatically adjust the amount of physical memory they reserve based on the workload running in the virtual machine at runtime ‘dynamically’. The second is RemoteFX which enables virtual machine users to received a full 3D multimedia experience remotely though enhanced remote desktop connections…  All of this was announced at http://www.microsoft.com/presspass/press/2010/mar10/03-18desktopvirtpr.mspx… Take a look and trust me much more to come on this topic!

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb" Tags: "News"
Comments Send by mail Print  Save  Delicious 
Date: Friday, 26 Feb 2010 20:59

It must be white paper week :) – today we posted a great document discussing virtual hard disk (VHD) performance with Windows Server 2008/Microsoft Hyper-V and Windows Server 2008 R2/Microsoft Hyper-V R2.  It’s about 35 pages long and goes into great detail on the test methodology as well as the results and application of the results…

 

Take a look:

 http://download.microsoft.com/download/0/7/7/0778C0BB-5281-4390-92CD-EC138A18F2F9/WS08_R2_VHD_Performance_WhitePaper.docx

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 25 Feb 2010 19:54

Today we released a great new document discussing requirements, recommendations and options for configuring networking when leveraging live migration.

 

http://technet.microsoft.com/en-us/library/ff428137(WS.10).aspx

Hyper-V: Live Migration Network Configuration Guide

Updated: February 24, 2010

Applies To: Windows Server 2008 R2

This guide describes how to configure your network to use the live migration feature of Hyper-V™. It provides a detailed list of the networking configuration requirements for optimal performance and reliability, as well as recommendations for scenarios that do not meet these requirements. …

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb

Author: "taylorb"
Comments Send by mail Print  Save  Delicious 
Date: Friday, 16 Oct 2009 20:06

So you want to use passthough disks with Hyper-V cool – but how do you script attaching them?  Well here’s your answer…  But first you need to decide if you are going to attach them to the virtual IDE controller or the virtual SCSI controller.  The IDE controller is ideal if you plan to boot from the passthough disk or if your guest doesn’t support the virtual SCSI adapter (Linux), the SCSI controller is ideal if you want to add/remove storage from the virtual machine while it’s running (feature of Hyper-V R2) or if you have more than 4 disks you want to add.  Attaching to SCSI or IDE is pretty similar – there are really only 1 difference I bolded it on both scripts below you just have to select the correct controller.  Other than that you can either use the physical disk number for disk manager (not too bad) or if you provide a LUN ID when you create the storage (in the case of a SAN) you can use that which can be a bit more deterministic.  Either way enjoy!

 

Attaching Passthrough Disk To IDE Controller

$HyperVGuest = "Passthough Demo"

$VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization"
$Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'"

$VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState"


$VmIdeController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" |`
                       
where-object {$_.ResourceSubType -eq "Microsoft Emulated IDE Controller" -and $_.Address -eq 0
}) 
 
$DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'"
$DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | `
                       
where-object {$_.InstanceID -like "*Default"})

                       
$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2"
#$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'"

$DefaultHardDisk.Parent = $VmIdeController.__Path
$DefaultHardDisk.Address = 0
$DefaultHardDisk.HostResource = $Disk.__PATH

$VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources"

Attaching Passthrough Disk To SCSI Controller

$HyperVGuest = "Passthough Demo"

$VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization"
$Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'"

$VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState"


$VmScsiController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" | `
                         where-object {$_.ElementName -eq "SCSI Controller"})

$DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'"

$DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | `
                        where-object {$_.InstanceID -like "*Default"})                   

$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2"

#$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'"

$DefaultHardDisk.Parent = $VmScsiController.__Path

$DefaultHardDisk.Address = 0
$DefaultHardDisk.HostResource = $Disk.__PATH

$VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources"

Taylor Brown
Hyper-V Integration Test Lead
http://blogs.msdn.com/taylorb

clip_image001

Author: "taylorb" Tags: "Powershell, WMI, Hyper-V, Hyper-V Versio..."
Comments Send by mail Print  Save  Delicious 
Previous page - Next page
» You can also retrieve older items : Read
» © All content and copyrights belong to their respective authors.«
» © FeedShow - Online RSS Feeds Reader