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 OpenStack API access - 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
These is a list of common configurations of VMs and volumes in the cloud and the recommened procedure to restoring them
Single VM
To restore a single VM, one can simply restore the image of the VM, either in-place or as a new VM, following the instructions here.
Single VM and attached volume(s)
To restore a single VM and it's attached volumes, one restore the instance and the volumes separately. To restore the instance from an image follow the instructions above. If restoring the image in place, it is recommended to detach all volumes from it beforehand. Each of the volumes attached can be restored differently, depending on whether they were backed up as a volume snapshot or volume backup. As before, if restoring the volume in-place, remember to detach it from the instance before, and reattach it later.
Single VM and multiple networks and/or security groups
The network configuration and security groups of VMs are not recorded when backing up the instance. If one is interested in restoring this information, and stored these values somehwere, e.g. by following the instructions in EWC - How to create backups from VMs, these can be restored simply by adding them to the VM as
openstack server add network <instance> <network> openstack server add security group <instance> <security_group>
for each <network> and <security_group> that one wants to restore to the <instance> .
Single VM and SFS
Shared File Services (SFS) cannot be backed up as they are distributed storage solutions that do not live in the same cloud. Thefore one can restore the VM as normal, and then mount the SFS into the new VM. Remember that if restoring the VM in-place, the SFS device must be unmounted before restoring it.
Multiple VMs, volumes, etc
In order to restore multiple VMs at once, with any configuration, one can repeat the steps laid out above multiple times in succession. In case of in-place restorations, make sure to detach all the volumes and stop all the instances that are to be restored.
An alternative to repeating all the steps here multiple times is to use the automation script below, where one can set up a configuration file detailing all the instances, volumes, etc, to be restored, and run the script a single time.
Restore automation
The multi-step procedure for restoring instances and volumes can been performed in a single step using the script found in the repository
under the items/openstack_backups directory. A simple configuration YAML file detailing the instances and volumes to restore, as well as whether to restore in-place or as a new resource, can be used to run the script. Instructions on how to run the script can be found in the README file in the repository itself.