For the complete documentation index, see llms.txt. This page is also available as Markdown.

VM Fails to Start Due to Boot Volume Format Mismatch in Block Device Mapping

Problem

A virtual machine is active in the Private Cloud Director platform but fails to start or reboot. Every start and hard reboot attempt fails consistently. The VM console may display an "Instance not found" error.

The Compute Service logs on the hypervisor (/var/log/pf9/ostackhost.log) record the following error for every start attempt:

libvirt.libvirtError: internal error: process exited while connecting to monitor:
qemu-system-x86_64: -blockdev {"node-name":"libvirt-1-format","driver":"qcow2",
"file":"libvirt-1-storage","backing":null}: Image is not in qcow2 format

The VM reports as ACTIVE in the platform, but no corresponding libvirt domain exists on the hypervisor.

Environment

  • Private Cloud Director Virtualization - v2026.1 and Higher

  • Self-Hosted Private Cloud Director Virtualization - v2026.1 and Higher

  • Component: Compute Service

  • NFS-backed boot volume (Tintri NFS or equivalent)

Cause

The VM's boot volume is hosted on NFS storage. Under certain conditions — most commonly during a live migration — the on-disk format of the volume file can change from qcow2 to raw. The format field inside the connection_info JSON column of the block_device_mapping table in the Compute Service database is not automatically updated when this format change occurs.

When the Compute Service subsequently attempts to start the VM, it reads the stale "format": "qcow2" metadata from the database and instructs QEMU to open the disk as qcow2 via libvirt. QEMU rejects the file because the actual on-disk format is raw, causing every start and reboot attempt to fail with Image is not in qcow2 format.

Diagnostics

The following checks confirm the VM is affected by this specific issue. Complete all steps before proceeding to Workaround.

1

Step 1 — Identify the Boot Volume and Hypervisor

Run the following command to retrieve the hypervisor hostname and boot volume UUID for the stuck VM.

Note the [HYPERVISOR_HOSTNAME] and the volume id ([VOLUME_UUID]) — both are required in subsequent steps.

2

Step 2 — Confirm the Libvirt Domain Is Absent

SSH to the hypervisor identified in Step 1 and verify no libvirt domain exists for the VM.

If no output is returned, the libvirt domain is absent. The VM has no running or stopped guest on the hypervisor, even though the platform reports it as ACTIVE.

3

Step 3 — Confirm the Actual On-Disk Volume Format

On the same hypervisor, locate the boot volume file and inspect its format using qemu-img.

First, locate the full path to the volume file:

Then run qemu-img info on the full path returned above:

file format: raw confirms the on-disk format does not match the qcow2 value stored in the database.

4

Step 4 — Confirm the Stale Format Metadata in the Database

Self-Hosted only: This step requires direct access to the control plane. SaaS customers cannot perform this step independently — contact Platform9 Support to have this completed on your behalf.

Query the block_device_mapping table in the Nova database to confirm the stale format entry.

A result of "qcow2" when the actual on-disk format is raw (confirmed in Step 3) confirms the database metadata mismatch causing the boot failure.

If all checks above match — domain absent in Step 2, file format: raw in Step 3, and "qcow2" in Step 4 — proceed to Workaround.

Resolution

No permanent code fix exists for this issue. Applying the Workaround below permanently corrects the stale format metadata in the Compute Service database and restores normal VM operation.

Workaround

The following procedure corrects the stale format value in the block_device_mapping table and restores the ability to start the VM.

Self-Hosted only (Steps 1–4): Steps 1–4 require direct access to the Compute Service database on the control plane. SaaS customers cannot perform these steps independently — contact Platform9 Support to have the database correction applied on your behalf. Steps 5–7 use the OpenStack CLI and can be run from any machine with the OpenStack RC file sourced.

1

Step 1 — Back Up the Current connection_info Row

Before making any changes, record the existing connection_info value so the original row can be restored if needed.

Save the full output to a safe location before proceeding.

2

Step 2 — Verify a Single Boot Device Mapping Exists

Confirm there is only one block device mapping with boot_index = 0 for the VM before modifying any records.

The output must show exactly one row with boot_index = 0. If multiple rows exist or the volume UUID does not match the boot volume identified in Diagnostics, stop and contact Platform9 Support before proceeding.

3

Step 3 — Correct the Volume Format in the Database

Update the format field in connection_info from qcow2 to raw.

Rows matched: 1 Changed: 1 confirms the update was applied to exactly one row.

4

Step 4 — Verify the Format Was Updated

Confirm the format field now reads "raw".

The result must be "raw" before proceeding.

5

Step 5 — Check VM Status and Reset State if Needed

Check the current server status using the OpenStack CLI.

If the status returns ACTIVE, proceed directly to Step 6. If the status returns ERROR, run the following command to reset the VM state before rebooting:

6

Step 6 — Hard Reboot the VM

Issue a hard reboot to restart the VM using the corrected volume format metadata.

Allow up to 60 seconds for the reboot to complete before verifying.

7

Step 7 — Verify the VM Is Running

Confirm the VM is ACTIVE with power state Running.

Power state 1 indicates the VM is running. Optionally, confirm the libvirt domain is now present on the hypervisor:

The VM is successfully restored when the status is ACTIVE, power state is 1, and the libvirt domain appears as running on the hypervisor.

Additional Information

For issues where a volume creation operation fails due to an image format mismatch on NFS or Tintri storage, see Volume Creation Failure Due to Image Format Mismatch.

Last updated