Hyper-V: The destination is not valid because it’s compressed

Live migration (LM) between Hyper-V hosts may fails with

“The virtual machine cannot be moved to the destination computer. The hardware on the destination computer is not compatible with the hardware requirements on this virtual machine. Virtual machine operation failed at migration destination. The destination ‘PathToVM’ is not valid because it’s compressed”

dd

Reason:

We know that there are no special requirements for live migration in 2012/2012 R2:

http://technet.microsoft.com/en-us/library/hh831435.aspx

But if you have enabled “Compress this drive to save disk space” on the disk level and compression on the folder level, live migration fails.  Hyper-V doesn’t support compressed destination folder. I’ve never seen any official notes about it. If you have, please comment this post or contact me. IMO, it must be in the requirements for LM.

Disk:

live migration_hyperv_compression_1

Folder:

live migration_hyperv_compression_2

Based on the Russian TechNet thread:

http://social.technet.microsoft.com/Forums/ru-RU/cda694c2-2053-45ef-b360-7d25dded0e83/-hyperv-the-virtual-machine-cannot-be-moved-to-the-destination-computer?forum=WS8ru#55b1d6cf-3bc3-4b56-8c98-5fceb2f29a6b

Simple SMB share and multichannel for Hyper-V

SMB 3.0 file shares can be used as shared storage for Hyper-V in Windows Server 2012 R2 and Windows Server 2012. With this capability, Hyper-V can store virtual machine files, which includes configuration, virtual hard disk (VHD) files, and snapshots, on SMB file shares. There a lot of configurations for SMB and Hyper-V (cluster Hyper-V + stand-alone SMB share, or cluster Hyper-V <> scale-out and etc.). This article covers basic steps for configuration SMB share for Hyper-V through powershell.

My demo: 2 hyper-v hosts (HV01.democorp.ru, HV02.democorp.ru), 1 file server (dc01.democorp.ru . !! it’s not recommended to make a SMB share on domain controller. it’s just a lab!!).  2 network adapters per server. File Server roles are installed by default.

#Create new SMB share on your file server (dc01 - my file server)
PS C:\Users\Administrator&gt; New-SmbShare -Name Hyperv -Path S:\Shares\VM -FullAccess democorp\administrator,democorp\hv01$,democorp\hv02$,democorp\hvcl$

Name                          ScopeName                     Path                          Description
----                          ---------                     ----                          -----------
Hyperv                        *                             S:\Shares\VM

#Check permissions
PS C:\Users\Administrator&gt; Get-SmbShareAccess hyperv

Name                    ScopeName               AccountName             AccessControlType       AccessRight
----                    ---------               -----------             -----------------       -----------
Hyperv                  *                       DEMOCORP\Administrator  Allow                   Full
Hyperv                  *                       DEMOCORP\HV01$          Allow                   Full
Hyperv                  *                       DEMOCORP\HV02$          Allow                   Full
Hyperv                  *                       DEMOCORP\hvcl$          Allow                   Full

#Set NTFS permissions from SMB share
PS C:\Users\Administrator&gt; Set-SmbPathAcl -ShareName hyperv

#Create new vhd on smb share
PS C:\Users\administrator.DEMOCORP&gt; New-VHD -Path \\dc01\Hyperv\VMs\test\testsmb.vhdx -Dynamic -SizeBytes 15Gb -Verbose
VERBOSE: Performing the operation &quot;New-VHD&quot; on target &quot;\\dc01\Hyperv\VMs\test\testsmb.vhdx&quot;

ComputerName            : HV01
Path                    : \\dc01\Hyperv\VMs\test\testsmb.vhdx
VhdFormat               : VHDX
VhdType                 : Dynamic
FileSize                : 4194304
Size                    : 16106127360
MinimumSize             :
LogicalSectorSize       : 512
PhysicalSectorSize      : 4096
BlockSize               : 33554432
ParentPath              :
DiskIdentifier          : 82453f86-1d5a-421f-890b-0a76366f4cbb
FragmentationPercentage : 0
Alignment               : 1
Attached                : False
DiskNumber              :
Key                     :
IsDeleted               : False
Number                  :

#Create new VM on share
PS C:\Users\administrator.DEMOCORP&gt; New-VM -Name VMtest -SwitchName VM -VHDPath \\dc01\Hyperv\VMs\test\testsmb.vhdx -Path \\dc01\hyperv\vms -MemoryStartupBytes 1Gb -Generation 2 -Verbose

VERBOSE: New-VM will create a new virtual machine &quot;VMtest&quot;.

Name   State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----   ----- ----------- ----------------- ------   ------
VMtest Off   0           0                 00:00:00 Operating normally

#Add VM to cluster
PS C:\Users\administrator.DEMOCORP&gt; Add-ClusterVirtualMachineRole -VirtualMachine VMTest -Name &quot;SMB TEST&quot; -Verbose
VERBOSE: Connecting to cluster on local computer HV01.

Name                                    OwnerNode                               State
----                                    ---------                               -----
SMB TEST                                HV01                                    Offline

#Check that VM was become HA
PS C:\Users\administrator.DEMOCORP&gt; (Get-ClusterResource).Name
Cluster IP Address
Cluster Name
Virtual Machine Configuration New Virtual Machine
Virtual Machine Configuration VMtest
Virtual Machine New Virtual Machine
Virtual Machine VMtest

#Move VM storage from local storage to the SMB share
PS C:\Users\administrator.DEMOCORP&gt; Move-VMStorage &quot;new virtual machine&quot; -DestinationStoragePath \\dc01\hyperv\VMs -ComputerName hv02 -Verbose
VERBOSE: Move-VMStorage will migrate the storage for virtual machine &quot;New Virtual Machine&quot;.

#Check smb connections on hv02
PS C:\Users\administrator.DEMOCORP&gt; Get-SmbConnection

ServerName          ShareName           UserName            Credential          Dialect             NumOpens
----------          ---------           --------            ----------          -------             --------
dc01                hyperv              DEMOCORP\Adminis... DEMOCORP.RU\Admi... 3.02                2
dc01                hyperv              DEMOCORP\HV02$      DEMOCORP.RU\HV02$   3.02                4
dc01                hyperv              NT VIRTUAL MACHI... DEMOCORP.RU\HV02$   3.02                2

#Checks that smb multichannel works
PS C:\Users\administrator.DEMOCORP&gt; Get-SmbMultichannelConnection

Server Name    Selected       Client IP      Server IP      Client         Server         Client RSS     Client RDMA
                                                            Interface      Interface      Capable        Capable
                                                            Index          Index
-----------    --------       ---------      ---------      -------------- -------------- -------------- --------------
dc01           True           192.168.1.96   192.168.1.201  23             13             False          False
dc01           True           10.10.25.22    10.10.25.1     22             12             False          False

#Get information about client networks interfaces
Get-SmbClientNetworkInterface

SMB Multichannel:

Virtual adapter vEthernet (CSV):

speed

+ Virtual adapter vEthernet (Management):

speed_1

~ 200 Mbps using 2×100 Mb adapters

smb-multi-channel

Troubleshooting

If you receive” “General Access denied error” during VM creation or migration, you have to check permissions on SMB share (my share is “Hyperv” + HV01 and HV02 are smb clients) and constrained delegation (notice that you must have installed Active Directory powershell module):

Get-SmbShareAccess Hyperv

Grant-SmbShareAccess -Name Hyperv -AccountName domain\comp$ -AccessRight Full

Enable-SMBDelegation -SmbServer dc01 -SMBClient HV01

Enable-SMBDelegation -SmbServer dc01 -SMBClient HV02

Enable-SMBDelegation -SmbServer dc01 -SMBClient HVCL

smb_hyperv_error

SMB Multichannel:

Multichannel should be enabled (see client and server configuration)

2 or more network adapters

OR

1 or more NICs capable with RSS

OR

1 or more NICs capable with RDMA

OR

NIC Teaming (at least 2 NICs)

PS C:\Users\Administrator&gt; Get-SmbClientConfiguration

.........
EnableMultiChannel                    : True
DormantFileLimit                      : 1023
EnableSecuritySignature               : True
ExtendedSessionTimeout                : 1000
FileInfoCacheEntriesMax               : 64

PS C:\Users\Administrator&gt; Get-SmbServerConfiguration

----
...................................

EnableLeasing                   : True
EnableMultiChannel              : True
EnableStrictNameChecking        : True
OplockBreakWait                 : 35
PendingClientTimeoutInSeconds   : 120
RequireSecuritySignature        : True
EnableSMB1Protocol              : True
EnableSMB2Protocol              : True
Smb2CreditsMax                  : 2048
Smb2CreditsMin                  : 128

PS C:\Users\Administrator&gt; Get-SmbServerNetworkInterface

Scope Name          Interface Index     RSS Capable         RDMA Capable        Speed               IpAddress
----------          ---------------     -----------         ------------        -----               ---------
*                   13                  True                False               100 Mbps            192.168.1.201
*                   13                  True                False               100 Mbps            fe80::590e:87d7:...
*                   12                  True                False               100 Mbps            10.10.25.1
*                   12                  True                False               100 Mbps            fe80::34ce:f145:...