The Error I Started With
I ran into this issue while migrating a VM and moving its storage at the same time. The vSphere Client returned:
A general system error occurred:
PBM error occurred during PreMigrateCheckCallback:
Operation timed outMy first thought was that I might be dealing with a datastore or Storage vMotion problem, but the PBM reference pushed me toward Storage Policy Based Management and the vCenter Storage Policy Service, vmware-sps.
The Hidden Root Cause: My DNS VM Had Gone Offline
The reason VCSA could not resolve my ESXi hosts turned out to be straightforward once I found it: the storage backing my DNS VM had become disconnected. That took the DNS VM offline, so the VCSA suddenly lost DNS resolution for the ESXi hosts.
Because my hosts were registered and referenced by FQDN, SPS depended on DNS to resolve names such as esxi-01.home.local. Once DNS disappeared, SPS could no longer complete several host-provider and certificate-related operations.
Following the PBM Error Into SPS
I checked the SPS log on the VCSA and immediately found the first concrete clue:
Could not get host address for host esxi-02.home.local
Could not get host address for host esxi-01.home.local
java.net.UnknownHostException: esxi-01.home.localSPS was also marking the host-side provider endpoints as offline:
https://esxi-01.home.local:9080/version.xml is offline
https://esxi-02.home.local:9080/version.xml is offline
https://esxi-04.home.local:9080/version.xml is offlineThe timing was useful too. Certificate provisioning operations were taking roughly 30–40 seconds before failing, which matched the timeout behavior I was seeing in the PBM migration pre-check.
Commands I used
service-control --status vmware-sps
grep -iE "error|exception|timeout|fail|pbm|vasa" \
/var/log/vmware/vmware-sps/sps.log | tail -100Restoring Name Resolution on the VCSA
Since the DNS VM itself was unavailable, I needed a fast way to restore hostname resolution while troubleshooting. VCSA uses the standard Linux /etc/hosts file, so I added static mappings for the ESXi management addresses.
vi /etc/hosts
10.20.10.7 esxi-01.home.local esxi-01
10.20.10.71 esxi-02.home.local esxi-02
10.20.10.72 esxi-03.home.local esxi-03
# esxi-04 added with its management IP as wellI validated the system resolver with:
getent hosts esxi-01.home.local
getent hosts esxi-02.home.local
getent hosts esxi-03.home.local
getent hosts esxi-04.home.localFor example, esxi-01.home.local now returned:
10.20.10.7 esxi-01.home.local esxi-01/etc/hosts as a recovery and troubleshooting measure. For a permanent configuration, I want working forward and reverse DNS once the DNS VM and its storage are healthy again.The Error Changed — Which Was Progress
After I restored local hostname resolution, the original UnknownHostException messages disappeared. SPS then progressed to a different error:
Retrieved vasa version is null.
Hostname verification could not be done.
provider: https://esxi-01.home.local:9080/version.xml is offlineI considered that progress because SPS was no longer dying at the DNS lookup stage. It was now getting further into the host provider workflow.
Checking the ESXi IOFilter Provider on TCP 9080
On esxi-01, I confirmed that TCP 9080 was actively listening and was owned by ioFilterVPServer:
0.0.0.0:9080 0.0.0.0:0 LISTEN ioFilterVPServerI checked the ESXi firewall as well. The iofiltervp ruleset was enabled and allowed all source IPs:
Ruleset Allowed IP Addresses
---------- --------------------
iofiltervp AllMost importantly, I could see multiple established TCP/9080 sessions from the VCSA IP, 10.20.10.10, to 10.20.10.7:9080. That allowed me to rule out the ESXi firewall and basic TCP reachability as the remaining cause.
Validating the ESXi Certificate and Hostname
I then inspected the ESXi machine certificate:
openssl x509 -in /etc/vmware/ssl/rui.crt \
-noout -subject -issuer -dates
openssl x509 -in /etc/vmware/ssl/rui.crt \
-noout -text | grep -A2 "Subject Alternative Name"The certificate identity matched the host:
CN = esxi-01.home.local
X509v3 Subject Alternative Name:
DNS:esxi-01.home.localI also confirmed that ESXi itself had the same FQDN configured:
Fully Qualified Domain Name: esxi-01.home.local
Host Name: esxi-01
Domain Name: home.localFinally, from the VCSA I connected to the port 9080 TLS endpoint with OpenSSL and received the expected VMCA-issued certificate:
openssl s_client \
-connect 10.20.10.7:9080 \
-servername esxi-01.home.local \
</dev/nullRestarting SPS After Fixing the Real Problem
Restarting SPS while name resolution was still broken did not solve anything, because the service simply hit the same hostname-resolution failure again. Once I had restored resolution, I restarted SPS:
service-control --restart vmware-spsThis time the log changed completely. SPS successfully requested VMCA-signed client certificates for the ESXi hosts, installed them, and added them to the SMS store:
Requesting VMCA Signed cert for esxi-01.home.local having IP 10.20.10.7
Installed CA signed certificate at VVOLD
Added CA signed client cert to SMS Store
provisionEsxClientCertificates, Time taken: 301 msPreviously, the workflow had spent tens of seconds before failing. After I restored name resolution, the provisioning step completed in only a few hundred milliseconds.
The Storage Providers Came Back Online
I checked vCenter → Configure → Storage Providers. All four ESXi IOFilter providers showed Online, and the VMware vSAN provider was online as well. The IOFilter providers were reporting VASA API version 1.5.
The Migration Started Moving Again
The best confirmation was the migration itself. It had been sitting around 35% for a while. After I restored host resolution and restarted SPS, it started moving again and reached 37% shortly afterward.
My Root-Cause Chain
PreMigrateCheckCallback timeout.The complete chain looked like this:
DNS VM datastore disconnected
↓
DNS VM unavailable
↓
VCSA could not resolve ESXi FQDNs
↓
SPS could not complete IOFilter/VASA provider operations
↓
Provider certificate provisioning failed
↓
PBM pre-migration validation timed out
↓
Storage vMotion stalledHow I Resolved It
UnknownHostException errors for the ESXi hosts./etc/hosts.vmware-sps only after name resolution was working.Commands I Would Keep Handy
Check and restart SPS
service-control --status vmware-sps
service-control --restart vmware-spsSearch SPS for useful failures
grep -iE "error|exception|timeout|fail|pbm|vasa|hostname" \
/var/log/vmware/vmware-sps/sps.log | tail -100Test host resolution from VCSA
getent hosts esxi-01.home.local
getent hosts esxi-02.home.local
getent hosts esxi-03.home.local
getent hosts esxi-04.home.localCheck the IOFilter provider on ESXi
esxcli network ip connection list | grep 9080
esxcli network firewall ruleset rule list | grep -A10 -B2 iofiltervp
esxcli network firewall ruleset allowedip list -r iofiltervpInspect the ESXi certificate
openssl x509 -in /etc/vmware/ssl/rui.crt \
-noout -subject -issuer -dates
openssl x509 -in /etc/vmware/ssl/rui.crt \
-noout -text | grep -A2 "Subject Alternative Name"What I Would Do Differently Next Time
The biggest takeaway for me is that DNS is part of the VMware management plane even when the DNS server itself is just another VM. If that VM depends on storage that can disappear, a storage incident can surface as what looks like an unrelated vCenter or PBM problem.
In a production environment, I would make sure management DNS is resilient, that forward and reverse DNS records are healthy for every ESXi host and vCenter appliance, and that infrastructure services such as DNS are not dependent on a single fragile storage path.
I would still use /etc/hosts as an emergency troubleshooting tool, but not as the long-term substitute for working DNS.
Final Takeaway
If I see this again:
PBM error occurred during PreMigrateCheckCallback:
Operation timed outI will not jump directly to the destination datastore. I will check SPS early, look for hostname and provider errors, and confirm DNS availability before spending time on the Storage vMotion data path.
For this incident, my troubleshooting path was: PBM → SPS → ESXi provider communication → DNS → restore resolution → restart SPS → verify providers online.