How to Convert a Volume Snapshot to an Image
Updated August 28, 2026 by Sean Perryman
5 Minutes to Read
Introduction
This guide explains how to convert a volume snapshot into a Glance image, then launch a new instance that boots from that image with local ephemeral storage instead of persistent block storage. The use-case for this is to move an instance that was deployed with Block Storage (volume) to one that is deployed with Local Storage (e.g. Flavor allocation).
This workflow is useful when you need to migrate an instance from block storage to local storage, or when you want to create a reusable image from an existing volume snapshot.
When to Use This Method
This approach is appropriate when:
- Your instance currently boots from a Cinder volume (block storage)
- You want to switch to local ephemeral storage on the compute node
- You need the performance characteristics of local storage
- You want to simplify your storage architecture
- You need to create a reusable image from a volume snapshot
Prerequisites
- An existing volume snapshot of your instance's boot volume
- Access to the InMotion Cloud Horizon dashboard or OpenStack CLI
- Sufficient quota for volumes, images, and instances
- A current backup of your data (the snapshot serves as your source)
Understand the Conversion Process
This workflow involves three main steps:
- Create a volume from your existing snapshot
- Upload that volume to Glance as a bootable image
- Launch a new instance from the image (which uses local storage)
When you launch an instance with "Boot from Image" (not "Boot from Volume"), OpenStack copies the image data to the compute node's local storage, creating an ephemeral disk rather than using persistent block storage.
Step 1: Create a Volume from the Snapshot (Horizon)
- Navigate to Project > Volumes > Volumes
- Click Create Volume
- Configure the volume:
- Volume Name: Enter a descriptive name (e.g.,
migration-volume-from-snapshot) - Volume Source: Select Snapshot - Use snapshot as a source: Choose your volume snapshot from the dropdown - Size: Leave as-is or increase if needed (cannot be smaller than snapshot) - Click Create Volume
Wait for the volume status to change from "creating" to "available."
Step 1 (Alternative): Create a Volume from the Snapshot (CLI)
1openstack volume create --snapshot SNAPSHOT_ID --size SIZE_GB VOLUME_NAME
Example:
1openstack volume create --snapshot my-boot-snapshot --size 50 migration-volume
Verify the volume is available:
1openstack volume show migration-volume -f value -c status
Step 2: Upload the Volume to Images (Horizon)
- Navigate to Project > Volumes > Volumes
- Locate the volume you just created
- Click the dropdown arrow next to the volume
- Select Upload to Image (may also be labeled "Create Image")
- Configure the image:
- Image Name: Enter a descriptive name (e.g.,
migrated-server-image) - Disk Format: Select QCOW2 (recommended) or Raw - Click Upload
This process copies the volume data to the Glance image service. Depending on volume size, this may take several minutes. The volume status shows "uploading" during the transfer.
Step 2 (Alternative): Upload the Volume to Images (CLI)
1openstack image create --volume VOLUME_NAME --disk-format qcow2 IMAGE_NAME
Example:
1openstack image create --volume migration-volume --disk-format qcow2 migrated-server-image
Monitor the image creation:
1openstack image show migrated-server-image -f value -c status
Wait for the status to change to "active."
Step 3: Launch Instance from the New Image (Horizon)
- Navigate to Project > Compute > Instances
- Click Launch Instance
- Configure the instance: - Details: Enter instance name - Source: - Select Boot Source: Choose Image - Create New Volume: Select No (this ensures local storage) - Available Images: Select the image you just created - Flavor: Choose an appropriate flavor with sufficient local disk - Networks: Select your network(s) - Security Groups: Select appropriate security groups - Key Pair: Select your SSH key pair
- Click Launch Instance
The instance boots from a local ephemeral copy of the image on the compute node.
Step 3 (Alternative): Launch Instance from the New Image (CLI)
1openstack server create \2 --image IMAGE_NAME \3 --flavor FLAVOR_NAME \4 --network NETWORK_NAME \5 --security-group SECURITY_GROUP \6 --key-name KEY_PAIR_NAME \7 INSTANCE_NAME
Example:
1openstack server create \2 --image migrated-server-image \3 --flavor m1.medium \4 --network private-network \5 --security-group default \6 --key-name my-keypair \7 my-local-storage-server
Step 4: Verify the New Instance
- Connect to the new instance via SSH
- Verify the data and applications are intact
- Check the storage configuration:
1lsblk2df -h
The root disk should show as /dev/vda without any attached Cinder volumes for the boot disk.
Step 5: Clean Up (Optional)
After verifying the new instance works correctly:
- Delete the temporary migration volume (if no longer needed)
- Keep the image for future deployments or delete if one-time use
- Terminate the old block-storage-backed instance (after confirming the migration)
Delete the migration volume:
1openstack volume delete migration-volume
Delete the image (if no longer needed):
1openstack image delete migrated-server-image
Important Considerations
- Data persistence: Local ephemeral storage is tied to the instance. If the instance is deleted, the local storage is also deleted. Consider your backup strategy.
- Live migration: Instances with local storage may have limited live migration options compared to block-storage-backed instances.
- Snapshots: You can still create snapshots of instances with local storage, but the process differs from volume snapshots.
Troubleshooting
"Upload to Image is not available for my volume"
The volume must be in "available" status (not attached to an instance) to upload to an image. If the volume is attached:
- Create a snapshot of the attached volume
- Create a new volume from that snapshot
- Upload the new volume to an image
"The image creation from volume is taking a long time"
Image creation time depends on volume size and system load. For large volumes (100GB+), expect 10-30 minutes. Monitor progress with:
1openstack image show IMAGE_NAME -f value -c status
"The new instance won't boot"
Verify the image was created successfully:
1openstack image show IMAGE_NAME
Check that the image status is "active" and the disk format is correct. If the image is corrupted, recreate it from the volume.
"I want to keep using block storage but from this image"
When launching the instance, select Create New Volume: Yes instead of No. This creates a new bootable volume from the image while preserving the block storage architecture.
Related Resources
- [OpenStack Image Service Documentation](https://docs.openstack.org/glance/latest/)
- [OpenStack Volume Management Documentation](https://docs.openstack.org/cinder/latest/admin/blockstorage-manage-volumes.html)
- [How to Expand Storage on a Cloud Server](https://inmotioncloud.com/support/how-to-expand-storage-on-cloud-server)
Sean Perryman
Technical Account Engineer
Sean Perryman is a Product Engineer at InMotion Cloud, where he helps organizations design, deploy, migrate, and support mission-critical workloads in the cloud. Working closely with customers throughout the entire lifecycle of their environments, he specializes in solving complex infrastructure challenges while ensuring platforms remain secure, reliable, and scalable.