If you ever pulled an Azure VM back to onprem ESXi, don’t neglect the clock!!
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.
- Open the config: sudo vi /etc/chrony.conf
- Find the line: refclock PHC /dev/ptp_hyperv …
- Delete it.
- 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:
- Uninstall Hyper-V tools: sudo yum remove hyperv-daemons (or apt purge depending on the OS).
- Install Open VM Tools: sudo yum install open-vm-tools (or apt install).
- 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.”