If you ever pulled an Azure VM back to onprem ESXi, don’t neglect the clock!! or your devs will remind you.#

:RHEL, Oracle Linux.

I use Veeam IR for this because it does the “conversion” for you..sort of.

When Veeam Instant Recovery (IR) performs a V2V (Virtual-to-Virtual) conversion from Azure, it essentially takes a “snapshot” of the OS as it lived in the cloud. Azure virtual machines are pre-configured to use the Hyper-V hardware clock because Azure runs on a modified Hyper-V hypervisor. Now that the guest is sitting on ESXi, chronyd is still trying to talk to hardware that no longer exists. Here is the “clean-up” checklist to finish the migration and stop those errors:

1. Strip the Azure-specific Refclock#

The most direct fix is removing the hardcoded reference to the Hyper-V device.

  1. Open the config: sudo vi /etc/chrony.conf
  2. Find the line: refclock PHC /dev/ptp_hyperv …
  3. Delete it.
  4. Restart the daemon: sudo systemctl restart chronyd

2. Check for “Drop-in” Configs#

Azure images often use “drop-in” files that override the main chrony.conf. If you deleted the line and the error persists, check this directory: ls /etc/chrony.d/ If you see a file like azure.conf or 10-azure-hwclock.conf, delete it or move it to a backup folder.

3. Load the VMware Driver#

To get the best performance on vSphere, you want the VM to recognize it’s on VMware hardware. Check if the VMware PTP driver is loaded: lsmod | grep ptp_vmw If it’s not there, you can load it: sudo modprobe ptp_vmw (To make it permanent, add ptp_vmw to a new file in /etc/modules-load.d/vmware.conf.)

4. Install/Update VMware Tools#

Since this was an Azure VM, it likely has hv-kvp-daemon-guest or other Hyper-V tools installed. You should:

  1. Uninstall Hyper-V tools: sudo yum remove hyperv-daemons (or apt purge depending on the OS).
  2. Install Open VM Tools: sudo yum install open-vm-tools (or apt install).
  3. Enable the service: sudo systemctl enable –now vmtoolsd.

5. Final Source Check#

Run chronyc sources -v. You should now see it reaching out to standard NTP pools (like 2.pool.ntp.org) or your local domain controllers, rather than failing to open a local device.

Quick Tip for the vSphere side: Make sure “Synchronize guest time with host” is disabled in the VM settings (Edit Settings > VM Options > VMware Tools) if you plan on letting Chrony handle NTP over the network. Having both active can occasionally cause “time jumps.”