Site Loader

Hi Everyone,

In the next two blogs I will try to give you a guide for Hyper-v in vWorkspace. This setup will give us the advantage of tiered storage and hypercache. In this first part I will tell how to configure you’re hypervisors. In part 2 I will talk about configuring vWorkspace.

For the hypervisor servers we followed the Dell guide for 95%. Dell talks about normal storage, and we will use tiered storage pools in windows.
Our server config: (Dell R720)
– 8x 600Gb 10k (two disks for OS)
– 2x 200Gb SSD 6Gb/s
– 256Gb memory
– 2x 10core (Intel(R) Xeon(R) CPU E5-2690 v2)

After I installed windows 2012 R2 (Raid-1). I configured all disk as a single virtual disk otherwise you cannot create a proper tiered storage pool in Windows.
Offcourse we are not going to click ini the open manage, I will use the commandline tool from open manage.

omconfig storage controller action=createvdisk controller=0 raid=r0 size=max pdisk=0:1:0 diskcachepolicy=enabled
Note: Repeat this line for each disk you want to use in you storage pool. Change the pdisk value!

The result will look like this:

Leave the disks this way. Storage Pools will do the rest!
So after I created 8 virtual disks we can start to create the storage pool.

Configure a Tiered Storage Pool: (in PowerShell of course)

$StoragePool = 'StoragePool'
$size = '300Gb'
$VMDiskName = 'vDisk1'
$ResiliencySetting = 'Mirror'
$subsysname = (Get-StorageSubSystem).FriendlyName

#The line uses the "Get-PhysicalDisk" cmdlet to get a PhysicalDisk object than is not yet in a (concrete) storage pool, 
#and assigns the array of objects to the $PhysicalDisks variable. We must perform this cmdlet before creating a storage pool.

$PhysicalDisks = (Get-PhysicalDisk | ? {$_.CanPool -eq "True"})
New-StoragePool -FriendlyName $StoragePool -StorageSubSystemFriendlyName $subsysname -PhysicalDisks $PhysicalDisks

#To create the teired storage it is nessesary to specify media type!

#Get Mediatype of disks
Get-PhysicalDisk |select friendlyname, mediatype, size

#Set the MediaType SAS
Get-StoragePool $StoragePool | Get-PhysicalDisk | ? {$_.size -gt $size} | Set-PhysicalDisk -MediaType HDD

#Set the MediaType SSD
Get-StoragePool $StoragePool | Get-PhysicalDisk | ? {$_.size -lt $size} | Set-PhysicalDisk -MediaType SSD

#create SSD tier
Get-StoragePool $StoragePool | New-StorageTier –FriendlyName SSDTier –MediaType SSD
#create HDD tier
Get-StoragePool $StoragePool | New-StorageTier –FriendlyName HDDTier –MediaType HDD

# getting the following error, remove existing tiers!
## New-VirtualDisk : Cannot process argument transformation on parameter 'StorageTiers'. Cannot convert 
## the "System.Object[]" value of type "System.Object[]" to type 
## "Microsoft.Management.Infrastructure.CimInstance".
## Remove-StorageTier -FriendlyName *HDD* #And *SSD*

$SSD = Get-StorageTier -FriendlyName *SSD*
$HDD = Get-StorageTier -FriendlyName *HDD*
$SSDTierSizes = (Get-StorageTierSupportedSize -FriendlyName "*SSD*" -ResiliencySettingName $ResiliencySetting).TierSizeMax
$HDDTierSizes = (Get-StorageTierSupportedSize -FriendlyName "*HDD*" -ResiliencySettingName $ResiliencySetting).TierSizeMax

#Get-StoragePool $StoragePool | New-VirtualDisk -FriendlyName $VMDiskName -ResiliencySettingName $ResiliencySetting –StorageTiers $SSD, $HDD -StorageTierSizes 183GB, 1671GB
Get-StoragePool $StoragePool | New-VirtualDisk -FriendlyName $VMDiskName -ResiliencySettingName $ResiliencySetting –StorageTiers $SSD, $HDD -StorageTierSizes $SSDTierSizes, $HDDTierSizes

The result will look like this:

The disk is almost ready! The disk must be configured properly.

#Prepare the new Data disk
#find the DVD player
$DVDDrive = Get-Volume | ? {$_.DriveType -eq 'CD-ROM'}
$DVDDriveletter = $DVDDrive.driveletter + ':'

#change driver letter of DVD player
$drive = gwmi win32_volume -Filter "DriveLetter = '$DVDDriveletter'"
$drive.DriveLetter = "F:"

#create the new disk
$disk = get-disk | ? {$_.operationalstatus -eq 'Offline'}
Initialize-Disk -Number $disk.Number
$disk | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false

Ok the storage is configured!

Now can go to the next step, configuring the network on your server.

We have 4 nic’s in the server. Three of them will be a LACP trunk for the RDS traffic. The last one will be used for backup.

The LACP trunk is needed because each customer will get his own vlan.

Here is the code to create the team:

$ip = ""
$gw = ""
$dns1 = ""
$dns2 = ""
$prefix = "25"
$team = "NicTeam" 
$vlan = "104"
$backupnic = "NIC4" 

# the first nic is configured for initial setup of windows.
# So we have to remove the config from the first nic
# RDP will be disconnected until all nic’s are configured properly on your switch, remember that!

$nic = Get-NetAdapter NIC1
$nic | Set-NetIPInterface -DHCP Enabled

# creates the team
$nics = @(); Get-NetAdapter | ? {$_.status -eq "Up"} | % {$nics += $_.Name}
New-NetLbfoTeam -name $team -TeamMembers $nics[0] -TeamingMode LACP -Confirm:$false
Set-NetLbfoTeamNic -name $team -VlanID $vlan

#$teamnic = Get-NetLbfoTeam $team
#Remove-NetLbfoTeam $team

# Adds the other nic’s to the team
$teamname = (Get-NetLbfoTeam).name
$Adapters = Get-NetAdapter
foreach ($Adapter in $Adapters){
Add-NetLbfoTeamMember –Name $Adapter.Name -Team $teamname -Confirm:$false 

$buadapater = Get-NetAdapter | ? {$_.Name -eq $backupnic}
Remove-NetLbfoTeamMember -Name $buadapater.Name -Team $teamname -Confirm:$false

Get-NetAdapter "$team - VLAN $vlan"| Set-NetIPInterface -DHCP Disabled

New-NetIPAddress -InterfaceAlias $team -IPAddress $ip -AddressFamily IPv4 -DefaultGateway $gw -PrefixLength $prefix -PolicyStore activestore
Set-DnsClientServerAddress -InterfaceAlias "$team - VLAN $vlan" -ServerAddresses ($dns1,$dns2)

Now we can start installing and configuring Hyper-v.


Install-WindowsFeature -Name Hyper-v -IncludeAllSubFeature -IncludeManagementTools –Restart

Or you can follow the screenshots



Select the correct server

Enable Hyper-v checkbox

Enable management tools checkbox, add features

This is the result of the last enabled checkbox


We configure this later!


Choose your own file location

Yes, install

Ok, after the server is rebooted and Hyper-v install is completed we can create a virtual switch.

$team = "NicTeam" 
$vlan = "104"
$NetAdapterName = $team + ' - vlan ' + $vlan

#New switch including a vlan tag. If you do not do that your RDP will be disconnected
New-VMSwitch -Name External -AllowManagementOS $true -NetAdapterName $NetAdapterName
Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName External -Access -VlanId 104

Ok, Hyper-v is ready for use. Now we can start with VM’s on hyper-v

Create the first VM:

$VMlocation = "D:\vWorkpace Images\Office2010"
$VMName = "Office2010"
$VMDisk = "Office2010.vhdx"
$Disksize = 200Gb
$Network = "External"
$Mem = 32GB
$Memstartup = 16GB

#Create the fist VM
New-VM -Name $VMName -Path $VMlocation -MemoryStartupBytes $Memstartup
# vWorkspace recommended disk configuration
New-VHD -Path $VMlocation\$VMDisk -Dynamic -SizeBytes $Disksize -LogicalSectorSizeBytes 512 -PhysicalSectorSizeBytes 4096 -BlockSizeBytes 2MB
Add-VMHardDiskDrive -VMname $VMName -Path $VMlocation\$VMdisk
get-vm $VMName | set-vmmemory -MaximumBytes $mem -MinimumBytes $Memstartup -DynamicMemoryEnabled $true
get-vm $VMName | Add-VMNetworkAdapter -SwitchName $Network
get-vm $VMName | Set-VMNetworkAdapterVlan -Access -VlanId 104
get-vm $VMName | Set-VM -ProcessorCount 10

Dell vWorkspace recommends a specific disk configuration for your vhd/vhdx.

#ensure that the blocksize is 2mb or 2097152 bytes
get-vhd "C:\VirtualMachines\MyTemplate\MyTemplateOS.vhdx"

# change the VHD of the VM
New-VHD -Path C:\VirtualMachines\MyTemplate\MyTemplateOS.vhdx -Dynamic -SizeBytes 50GB -LogicalSectorSizeBytes 512 -PhysicalSectorSizeBytes 4096 -BlockSizeBytes 2MB

# If the disk is already created
Convert-VHD -Path "C:\VirtualMachines\W2012\Virtual Hard Disks\W2012.vhdx" -DestinationPath "C:\VirtualMachines\W2012\Virtual Hard Disks\W2012-2.vhdx" -BlockSizeBytes 2MB

Alright then, Part 1 is done. If I’m correct you will have a functioning Hyper-v environment on tiered storage!

See you at part 2!

Sander click to find out more