Pre-requisite: EWC - OpenStack Command-Line client
Foreword
Before restoring resources in OpenStack, it's important to understand the difference between three primary methods:
- Intance Snapshots (Glance): These capture the entire virtual machine, including the operating system, applications, and configuration. Instance snapshots are useful for cloning VMs, creating templates, or disaster recovery scenarios. They're managed through the Glance service.
- Volume Snapshots (Cinder): These are delta copies of the block storage volumes. Volume snapshots are not full copies and rely on the original volume for restoration, so they are mostly useful for accident recovery. They're managed through the Cinder service.
- Volume Backups (Cinder): These are point-in-time copies of block storage volumes. Volume backups preserve the data within a volume and can be used to restore the volume to the exact state it was in when backed up. They're ideal for data recovery and are managed through the Cinder service.
Choose the appropriate method based on your recovery needs: instance snapshots for full system recovery or replication, volume snapshots for accident prevention and recovery or volume backups for full data security and recovery.
Furthermore, there are two different restoration methods, according to whether the restoration replaces an existing resource or not:
- In place restoration: the snapshot or backup replaces an existing instance or volume. This is typically useful when data in the original resource has been corrupted and it is necessary to perform a reset to a past state, as stored in the snapshot or backup.
- New copy restoration: a new resource of the type, instance or volume, is created with the snapshot or backup as its base. This method is useful to copy or migrate resources as well as to recover from catastrophic failures.
Restoring VMs and Volumes
Restoration of VM snapshots
In-place restoration of VM snapshots can be performed with OpenStack by replacing the underlying disk of an existing VM with an image. In this way it is not necessary to create a new VM instance, but rather replace an existing one. This can be achieve by running:
openstack server rebuild <instance> --image <image_snapshot>
where
<instance>: The name or id of the existing VM<image_snapshot>: Name or id of the snapshot image of the VM previously created
Instead of performing an in-place restoration, it is possible to create a new VM using the image snapshot. This is done in the same manner as for creating a new instance, see EWC - How to create a VM using the Openstack CLI, using the command
openstack server create --flavor <flavor_name> --image <image_snapshot> --key-name <keyname> --network <network_name> --security-group <security_group_name> <vm_name>
where here the <image_name> is the name or id of the image snapshot. It is worth noting that the image snapshot does not contain information about the flavor, networks or security groups, and therefore these need to be manually provided. Restoring a snapshot onto a flavor of smaller size than the original will result in a failure.
Restoration of Volume Snapshots
The restoration of a volume snapshot can also be done in-place, or by creating a new volume. To restore an existing volume from a snapshot, one needs to use the command
openstack volume revert <snapshot>
where: <snapshot> : name or id of the snapshot to restore. Since in-place restoration replaces an existing volume, it is necessary to detach the volume from the instance first and reattach it after the restoration. One can detach a volume from an instance with
openstack server remove volume <server> <volume>
with <server> and <volume> the name or id of the instance or volume, respectively. And it can be reattached after restoration with
openstack server add volume <server> <volume>
To restore a volume snapshot to a new volume, a new volume must be created, with the snapshot as the source. This can be done with the command
openstack volume create --snapshot <snapshot> <name>
with <snapshot> the name or id of the snapshot to restore, and <name> the name of the new volume.
Restoration of Volume Backups
The restoration of a volume backup can also be done in-place, or by creating a new volume. Irrespective of the method, one can restore a volume backup with the command
openstack volume backup restore [--force] <backup> <volume>
where:
--force: optional argument to force a restoration of an existing volume.<snapshot>: name or id of the backup to restore<volume>: name or id of the existing volume to replace, or the name of a new volume to create
In the case of an in-place restoration, it is necessary to detach the volume first and reattach it after the restoration. Detaching and reattaching the volume to an instance can be done in the same way as for Volume Snapshots.
Common use cases
WIP
Backup automation
WIP