Recently, I ran into a catch 22 of sorts with a VM that was running a snapshot in a development environment. The VM had a snapshot created for a quick “rinse and repeat” set of operations where we needed the ability to quickly go back in time to a known good state. After creating the VM snapshot (with memory), the VM was migrated to a similar but different host with slightly different CPUs in the development environment. Upon attempting to restore the snapshot on the VM, the error was received snapshot the features supported by the processors in this machine are different.
Snapshot The features supported by the processors in this machine are different
The error is fairly intuitive in that a snapshot was created while the machine was running, capturing memory and CPU registers. This underscores the thought that needs to go into snapshot creation. While most snapshots I have seen are created when VMs are running for convenience and preserving a certain running state, this can cause issues as in the case above.
Creating a snapshot while a VM is running preserves the CPU registers. So if you move a VM to another host with different CPUs, certain features or capabilities may or may not exist in the target host. However, when the snapshot is restored it is trying to bring that VM back to that exact state with CPU capabilities, etc. Keep in mind you do now have this issue if you create a VM snapshot while the VM is powered off.
There isn’t really a great workaround that I found for this besides changing the method you use to create snapshots if there is a possibility the VM is moved to a different host and you need to use the snapshot. However, to workaround, you need to move it back to the host the snapshot was created on, revert to the snapshot, delete that snapshot, power the VM down and create a new snapshot, then move it. Or you could revert to the snapshot after moving it back, and simply delete the snapshot, move it back to the other host and create a new snapshot there.
EVC or enhanced vMotion is also purposed to deal with this kind of issue. You can set the CPU compatibility to the features and instruction set that you want to present to the VM, that can be achieved by the different hosts, and this will achieve the goal. However, EVC is a cluster option and not a standalone host option as was in play in my case.
If you run into this error with a snapshot the features supported by the processors in this machine are different, hopefully the thoughts presented here will help to workaround the issue and shed light on what is going on.