sudo dd if=/dev/vm_vg/vm1_snap of=/backup/vm1_backup.img bs=4M conv=sync,noerror
This command copies the contents of `/dev/vm_vg/vm1_snap` to the file `/backup/vm1_backup.img`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros.
Advantages: Easy to copy the entire volume, the ability to create an exact copy.
Disadvantages: Full backup every time, slow operation, large size of the resulting file. Not recommended for large logical volumes.
Comparison of backup methods
Method | Advantages | Disadvantages |
---|---|---|
tar | Easy to use, widely available | Full backup, slow |
rsync | Incremental backup, efficient | Requires installation, harder to configure |
dd | Simple copying of the entire volume, exact copy | Full backup, slow, large size |
- Automate the backup process using cron.
- Check the integrity of backups after creation.
- Store backups in multiple locations, including remote storage.
- Regularly test the recovery process from backups.
Restoring a Virtual Machine from a Backup
After creating backups, you need to be able to restore virtual machines from these backups. The recovery process depends on the method used for backup.Restoring from a tar backup
If you used `tar` to create the backup, restore it using the `tar` command.sudo tar -xzvf /backup/vm1_backup.tar.gz -C /new_location/
This command unpacks the archive `/backup/vm1_backup.tar.gz` into the directory `/new_location/`. The `-x` option indicates unpacking, `-z` enables gzip unpacking, `-v` displays a list of unpacked files, and `-f` specifies the archive file name. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After unpacking the archive, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from an rsync backup
If you used `rsync` to create the backup, restore it using the `rsync` command.sudo rsync -avz /backup/vm1_backup/ /new_location/
This command synchronizes the contents of `/backup/vm1_backup/` with the directory `/new_location/`. The `-a` (archive) option preserves all file attributes, `-v` (verbose) displays a list of transferred files, and `-z` enables compression. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After synchronizing the files, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from a dd backup
If you used `dd` to create the backup, restore it using the `dd` command.sudo dd if=/backup/vm1_backup.img of=/dev/vm_vg/vm1_lv bs=4M conv=sync,noerror
This command copies the contents of the file `/backup/vm1_backup.img` to the logical volume `/dev/vm_vg/vm1_lv`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros. Warning: This command will overwrite the contents of the logical volume `/dev/vm_vg/vm1_lv`. Make sure you specify the correct logical volume. Stop the virtual machine before restoring.
After restoring the data, start the virtual machine.
Testing Recovery
After restoring the virtual machine, be sure to test its functionality. Check that all applications are working correctly and that data is available. This is critical to ensure the reliability of the recovery process. Example script for restoring from a tar backup:#!/bin/bash
VM_NAME="vm1"
LV_NAME="/dev/vm_vg/vm1_lv"
BACKUP_FILE="/backup/${VM_NAME}_backup.tar.gz"
NEW_LOCATION="/new_location"
# Stop the VM
sudo virsh shutdown $VM_NAME
# Unpack the archive
sudo mkdir -p $NEW_LOCATION
sudo tar -xzvf $BACKUP_FILE -C $NEW_LOCATION
# Change the VM configuration file (example)
sudo sed -i "s/\/old_path\/${VM_NAME}.qcow2/\/new_location\/${VM_NAME}.qcow2/g" /etc/libvirt/qemu/${VM_NAME}.xml
# Start the VM
sudo virsh start $VM_NAME
echo "Restoration of $VM_NAME completed."
This script stops the virtual machine, unpacks the archive into a new directory, changes the VM configuration file (replaces the old path to the disk image with the new one), and starts the virtual machine. Edit the variables at the beginning of the script to match your configuration. Make the script executable using `chmod +x script.sh`.
Important: Always test backups and the recovery process. Don’t rely on backups that have never been tested.
Best Practices and Optimization
To ensure a reliable virtual machine backup system using LVM snapshots, it is necessary to follow a number of recommendations and optimize the process.Monitoring
Regular monitoring of the LVM state, snapshots, and disk space is an important part of the backup process. It is necessary to monitor disk space usage, snapshot status, and system performance. Examples of commands for monitoring:sudo lvs # Displays information about logical volumes and snapshots
sudo vgs # Displays information about volume groups
sudo pvs # Displays information about physical volumes
df -h # Displays disk space usage
iostat -x 1 # Displays disk I/O statistics
Configure alerts if disk space usage approaches a critical level or if a snapshot is filling up.
Automation
Automate the process of creating backups, deleting snapshots, and rotating backups using cron. This will avoid human errors and ensure regular backup execution. Example cron job:0 2 * * * /path/to/backup_script.sh
This entry in cron executes the `backup_script.sh` script every day at 2 AM. Make sure the script has the necessary access rights and works correctly.
Backup Rotation
Configure backup rotation to avoid disk space overflow. Define a backup retention policy (for example, store daily backups for the last week, weekly backups for the last month, and monthly backups for the last year). Example script for backup rotation:#!/bin/bash
BACKUP_DIR="/backup"
DAYS_TO_KEEP=7
find $BACKUP_DIR -type f -mtime +$DAYS_TO_KEEP -delete
This script deletes all files in the `/backup` directory that are older than
`dd` is a utility for copying and converting data. It allows you to copy the entire logical volume.
sudo dd if=/dev/vm_vg/vm1_snap of=/backup/vm1_backup.img bs=4M conv=sync,noerror
This command copies the contents of `/dev/vm_vg/vm1_snap` to the file `/backup/vm1_backup.img`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros.
Advantages: Easy to copy the entire volume, the ability to create an exact copy.
Disadvantages: Full backup every time, slow operation, large size of the resulting file. Not recommended for large logical volumes.
Comparison of backup methods
Method | Advantages | Disadvantages |
---|---|---|
tar | Easy to use, widely available | Full backup, slow |
rsync | Incremental backup, efficient | Requires installation, harder to configure |
dd | Simple copying of the entire volume, exact copy | Full backup, slow, large size |
- Automate the backup process using cron.
- Check the integrity of backups after creation.
- Store backups in multiple locations, including remote storage.
- Regularly test the recovery process from backups.
Restoring a Virtual Machine from a Backup
After creating backups, you need to be able to restore virtual machines from these backups. The recovery process depends on the method used for backup.Restoring from a tar backup
If you used `tar` to create the backup, restore it using the `tar` command.sudo tar -xzvf /backup/vm1_backup.tar.gz -C /new_location/
This command unpacks the archive `/backup/vm1_backup.tar.gz` into the directory `/new_location/`. The `-x` option indicates unpacking, `-z` enables gzip unpacking, `-v` displays a list of unpacked files, and `-f` specifies the archive file name. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After unpacking the archive, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from an rsync backup
If you used `rsync` to create the backup, restore it using the `rsync` command.sudo rsync -avz /backup/vm1_backup/ /new_location/
This command synchronizes the contents of `/backup/vm1_backup/` with the directory `/new_location/`. The `-a` (archive) option preserves all file attributes, `-v` (verbose) displays a list of transferred files, and `-z` enables compression. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After synchronizing the files, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from a dd backup
If you used `dd` to create the backup, restore it using the `dd` command.sudo dd if=/backup/vm1_backup.img of=/dev/vm_vg/vm1_lv bs=4M conv=sync,noerror
This command copies the contents of the file `/backup/vm1_backup.img` to the logical volume `/dev/vm_vg/vm1_lv`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros. Warning: This command will overwrite the contents of the logical volume `/dev/vm_vg/vm1_lv`. Make sure you specify the correct logical volume. Stop the virtual machine before restoring.
After restoring the data, start the virtual machine.
Testing Recovery
After restoring the virtual machine, be sure to test its functionality. Check that all applications are working correctly and that data is available. This is critical to ensure the reliability of the recovery process. Example script for restoring from a tar backup:#!/bin/bash
VM_NAME="vm1"
LV_NAME="/dev/vm_vg/vm1_lv"
BACKUP_FILE="/backup/${VM_NAME}_backup.tar.gz"
NEW_LOCATION="/new_location"
# Stop the VM
sudo virsh shutdown $VM_NAME
# Unpack the archive
sudo mkdir -p $NEW_LOCATION
sudo tar -xzvf $BACKUP_FILE -C $NEW_LOCATION
# Change the VM configuration file (example)
sudo sed -i "s/\/old_path\/${VM_NAME}.qcow2/\/new_location\/${VM_NAME}.qcow2/g" /etc/libvirt/qemu/${VM_NAME}.xml
# Start the VM
sudo virsh start $VM_NAME
echo "Restoration of $VM_NAME completed."
This script stops the virtual machine, unpacks the archive into a new directory, changes the VM configuration file (replaces the old path to the disk image with the new one), and starts the virtual machine. Edit the variables at the beginning of the script to match your configuration. Make the script executable using `chmod +x script.sh`.
Important: Always test backups and the recovery process. Don’t rely on backups that have never been tested.
Best Practices and Optimization
To ensure a reliable virtual machine backup system using LVM snapshots, it is necessary to follow a number of recommendations and optimize the process.Monitoring
Regular monitoring of the LVM state, snapshots, and disk space is an important part of the backup process. It is necessary to monitor disk space usage, snapshot status, and system performance. Examples of commands for monitoring:sudo lvs # Displays information about logical volumes and snapshots
sudo vgs # Displays information about volume groups
sudo pvs # Displays information about physical volumes
df -h # Displays disk space usage
iostat -x 1 # Displays disk I/O statistics
Configure alerts if disk space usage approaches a critical level or if a snapshot is filling up.
Automation
Automate the process of creating backups, deleting snapshots, and rotating backups using cron. This will avoid human errors and ensure regular backup execution. Example cron job:0 2 * * * /path/to/backup_script.sh
This entry in cron executes the `backup_script.sh` script every day at 2 AM. Make sure the script has the necessary access rights and works correctly.
Backup Rotation
Configure backup rotation to avoid disk space overflow. Define a backup retention policy (for example, store daily backups for the last week, weekly backups for the last month, and monthly backups for the last year). Example script for backup rotation:#!/bin/bash
BACKUP_DIR="/backup"
DAYS_TO_KEEP=7
find $BACKUP_DIR -type f -mtime +$DAYS_TO_KEEP -delete
This script deletes all files in the `/backup` directory that are older thanHow to set up virtual machine backups using LVM snapshots
Backing up virtual machines is a critical task for any administrator, ensuring the ability to restore data in case of failures, errors, or attacks. There are many ways to perform backups, and in this article, we will take a detailed look at setting up virtual machine (VM) backups using Logical Volume Management (LVM) snapshots. We’ll walk through all the steps, from preparing LVM, creating snapshots, to performing the backups themselves and restoring VMs. You will learn how to use LVM snapshots to create consistent backups of running virtual machines, minimizing downtime and ensuring data integrity.
In this article, we’ll focus on one very important technique: LVM snapshots. We will analyze how they work, their advantages and disadvantages, and provide detailed instructions on setting up VM backups using them. This method is especially useful for virtual machines stored on LVM volumes, as it allows you to create backups almost instantly, minimizing the VM lock time for consistent data copying.
Table of Contents
- Setting up LVM for Virtual Machines
- Creating LVM Snapshots for Backups
- Backing up LVM Snapshots
- Restoring a Virtual Machine from a Backup
- Best Practices and Optimization
Setting up LVM for Virtual Machines

Checking for LVM
First, make sure the LVM package is installed. In most Linux distributions, this can be done using the package manager. For example, in Debian/Ubuntu:sudo apt update
sudo apt install lvm2
In CentOS/RHEL:
sudo yum update
sudo yum install lvm2
After installation, check that LVM is running using the command:
sudo systemctl status lvm2-lvmetad.service
Expected result: active (running).
Creating Physical Volumes, Volume Groups, and Logical Volumes
If you have free disks, you can use them to create Physical Volumes (PV), then combine them into a Volume Group (VG), and finally create Logical Volumes (LV) to store virtual machine data. 1. Creating Physical Volumes:sudo pvcreate /dev/sdb /dev/sdc
Here, `/dev/sdb` and `/dev/sdc` are your free disks. Make sure to use the correct disk names.
2. Creating a Volume Group:
sudo vgcreate vm_vg /dev/sdb /dev/sdc
`vm_vg` is the name of your Volume Group. You can choose any other name.
3. Creating Logical Volumes:
sudo lvcreate -L 100G -n vm1_lv vm_vg
sudo lvcreate -L 50G -n vm2_lv vm_vg
Here we create two Logical Volumes: `vm1_lv` with a size of 100 GB and `vm2_lv` with a size of 50 GB in the Volume Group `vm_vg`. Sizes and names should be changed according to the needs of your VMs.
4. Formatting Logical Volumes:
sudo mkfs.ext4 /dev/vm_vg/vm1_lv
sudo mkfs.ext4 /dev/vm_vg/vm2_lv
5. Mounting Logical Volumes:
sudo mkdir /vm1
sudo mkdir /vm2
sudo mount /dev/vm_vg/vm1_lv /vm1
sudo mount /dev/vm_vg/vm2_lv /vm2
Now you can use `/vm1` and `/vm2` to store disk images of your virtual machines. It is important to configure permanent mounting of these volumes by adding them to `/etc/fstab`.
Example contents of /etc/fstab:
/dev/vm_vg/vm1_lv /vm1 ext4 defaults 0 0
/dev/vm_vg/vm2_lv /vm2 ext4 defaults 0 0
After editing `/etc/fstab`, run `sudo mount -a` to apply the changes.
Moving Existing VMs to LVM (if necessary)
If your virtual machines already exist and are not stored on LVM, you will need to move them. This can be done by copying the disk images to the new Logical Volumes. Suppose the disk images are located in `/var/lib/libvirt/images/`:sudo virsh shutdown vm1
sudo cp /var/lib/libvirt/images/vm1.qcow2 /vm1/
sudo virsh define /etc/libvirt/qemu/vm1.xml
sudo virsh start vm1
You may also need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image. Find the line containing the path to the disk image and change it.
For example, change:
<source file='/var/lib/libvirt/images/vm1.qcow2' .../>
To:
<source file='/vm1/vm1.qcow2' .../>
Important: Before performing any disk operations, back up important data. Errors can lead to data loss.
Expert Tip: When planning LVM, allocate enough free space in the Volume Group for future snapshots. The snapshot size should be sufficient to store the changes made to the original volume during the backup.
Creating LVM snapshots for backups

Creating a Snapshot
To create a snapshot, use the `lvcreate` command with the `-s` (snapshot) option. You must specify the name of the snapshot, the source logical volume, and the size allocated to store the changes.sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
Here we create a snapshot named `vm1_snap` for the logical volume `vm1_lv`. The snapshot size is 20 GB. This size should be sufficient to store the changes made to `vm1_lv` during the backup. The snapshot size depends on the write intensity to the virtual machine’s disk. If you are not sure, it is better to allocate more space than less.
Data Consistency
To ensure data consistency, it is recommended to pause the virtual machine or at least perform an «fsync» operation to flush data from the cache to disk before creating a snapshot. This minimizes the risk of data loss or file corruption. Example using virsh:sudo virsh snapshot-create vm1
This command will create an internal VM snapshot. Then:
sudo virsh shutdown vm1
sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
sudo virsh start vm1
Then delete the internal VM snapshot:
sudo virsh snapshot-delete vm1 1
Alternative Approach (fsync):
If pausing the VM is undesirable, you can use the `fsync` command to flush data to disk. However, this does not guarantee complete consistency, especially if the VM is actively performing transactions.
sudo virsh domfsfreeze vm1
sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
sudo virsh domfsthaw vm1
`domfsfreeze` freezes the file system inside the VM, and `domfsthaw` thaws it. These commands require that the guest agent be installed and running inside the VM.
Mounting the Snapshot
After creating a snapshot, you can mount it as a regular logical volume for backing up data.sudo mkdir /mnt/vm1_snap
sudo mount /dev/vm_vg/vm1_snap /mnt/vm1_snap
Now you can access the snapshot data as if it were the original logical volume at the time the snapshot was created. Important: The snapshot is mounted in read-only mode to avoid data corruption.
Deleting the Snapshot
After completing the backup, the snapshot must be deleted to free up disk space.sudo umount /mnt/vm1_snap
sudo lvremove /dev/vm_vg/vm1_snap
Before deleting the snapshot, make sure it is unmounted. If the snapshot is allocated insufficient space, it may fill up, which will lead to its corruption and possibly to the corruption of the original logical volume. Monitor the disk space usage of the snapshot using the `lvs` command.
Example:
sudo lvs
In the command output, pay attention to the «Data%» column. It shows the percentage of snapshot space usage. If it is approaching 100%, you should either increase the size of the snapshot, or perform a backup and delete the snapshot.
Example script for creating a snapshot and backup:
#!/bin/bash
VM_NAME="vm1"
LV_NAME="/dev/vm_vg/vm1_lv"
SNAP_NAME="/dev/vm_vg/${VM_NAME}_snap"
SNAP_SIZE="20G"
MOUNT_POINT="/mnt/${VM_NAME}_snap"
BACKUP_DIR="/backup"
# Stop the VM
sudo virsh shutdown $VM_NAME
# Create a snapshot
sudo lvcreate -s -L $SNAP_SIZE -n ${VM_NAME}_snap $LV_NAME
# Start the VM
sudo virsh start $VM_NAME
# Mount the snapshot
sudo mkdir -p $MOUNT_POINT
sudo mount $SNAP_NAME $MOUNT_POINT -o ro
# Perform the backup
sudo tar -czvf $BACKUP_DIR/${VM_NAME}_$(date +%Y%m%d).tar.gz -C $MOUNT_POINT .
# Unmount the snapshot
sudo umount $MOUNT_POINT
# Delete the snapshot
sudo lvremove -f $SNAP_NAME
echo "Backup of $VM_NAME completed."
This script stops the virtual machine, creates a snapshot, starts the virtual machine, mounts the snapshot, performs a backup using `tar`, unmounts the snapshot, and deletes it. Edit the variables at the beginning of the script to match your configuration. Make the script executable using `chmod +x script.sh`. Be sure to test the script before using it in production.
Backing up LVM snapshots
After creating and mounting an LVM snapshot, you need to back up the data. There are several ways to back up, each with its own advantages and disadvantages. The choice of method depends on your requirements for speed, efficiency, and available resources.Backing up using tar
`tar` is a standard utility for archiving files. It is easy to use and allows you to create compressed archives.sudo tar -czvf /backup/vm1_backup.tar.gz -C /mnt/vm1_snap .
This command creates an archive `vm1_backup.tar.gz` in the `/backup` directory, containing all files from the mounted snapshot (`/mnt/vm1_snap`). The `-c` option indicates archive creation, `-z` enables gzip compression, `-v` (verbose) displays a list of files being archived, and `-f` specifies the archive file name. The `-C` option allows you to change the directory before adding files to the archive.
Advantages: Ease of use, wide availability.
Disadvantages: Full backup every time, slow operation with large amounts of data.
Backing up using rsync
`rsync` is a utility for synchronizing files and directories. It allows you to perform incremental backups, copying only the changed files.sudo rsync -avz /mnt/vm1_snap/ /backup/vm1_backup/
This command synchronizes the contents of `/mnt/vm1_snap` with the directory `/backup/vm1_backup/`. The `-a` (archive) option preserves all file attributes, `-v` (verbose) displays a list of transferred files, and `-z` enables compression. When `rsync` is run again, it will only copy the changed files, which greatly speeds up the backup process.
Advantages: Incremental backup, efficient data transfer.
Disadvantages: Requires `rsync` installation, slightly more difficult to configure than `tar`.
Backing up using dd
`dd` is a utility for copying and converting data. It allows you to copy the entire logical volume.sudo dd if=/dev/vm_vg/vm1_snap of=/backup/vm1_backup.img bs=4M conv=sync,noerror
This command copies the contents of `/dev/vm_vg/vm1_snap` to the file `/backup/vm1_backup.img`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros.
Advantages: Easy to copy the entire volume, the ability to create an exact copy.
Disadvantages: Full backup every time, slow operation, large size of the resulting file. Not recommended for large logical volumes.
Comparison of backup methods
Method | Advantages | Disadvantages |
---|---|---|
tar | Easy to use, widely available | Full backup, slow |
rsync | Incremental backup, efficient | Requires installation, harder to configure |
dd | Simple copying of the entire volume, exact copy | Full backup, slow, large size |
- Automate the backup process using cron.
- Check the integrity of backups after creation.
- Store backups in multiple locations, including remote storage.
- Regularly test the recovery process from backups.
Restoring a Virtual Machine from a Backup
After creating backups, you need to be able to restore virtual machines from these backups. The recovery process depends on the method used for backup.Restoring from a tar backup
If you used `tar` to create the backup, restore it using the `tar` command.sudo tar -xzvf /backup/vm1_backup.tar.gz -C /new_location/
This command unpacks the archive `/backup/vm1_backup.tar.gz` into the directory `/new_location/`. The `-x` option indicates unpacking, `-z` enables gzip unpacking, `-v` displays a list of unpacked files, and `-f` specifies the archive file name. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After unpacking the archive, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from an rsync backup
If you used `rsync` to create the backup, restore it using the `rsync` command.sudo rsync -avz /backup/vm1_backup/ /new_location/
This command synchronizes the contents of `/backup/vm1_backup/` with the directory `/new_location/`. The `-a` (archive) option preserves all file attributes, `-v` (verbose) displays a list of transferred files, and `-z` enables compression. Before restoring, make sure that the directory `/new_location/` exists and has enough space. Stop the virtual machine before restoring.
After synchronizing the files, you may need to change the VM configuration file (`/etc/libvirt/qemu/vm1.xml`) to specify the new path to the disk image.
Restoring from a dd backup
If you used `dd` to create the backup, restore it using the `dd` command.sudo dd if=/backup/vm1_backup.img of=/dev/vm_vg/vm1_lv bs=4M conv=sync,noerror
This command copies the contents of the file `/backup/vm1_backup.img` to the logical volume `/dev/vm_vg/vm1_lv`. `if` specifies the input file, `of` specifies the output file, `bs` sets the block size (4 MB to speed up the process), and `conv=sync,noerror` handles read errors by filling them with zeros. Warning: This command will overwrite the contents of the logical volume `/dev/vm_vg/vm1_lv`. Make sure you specify the correct logical volume. Stop the virtual machine before restoring.
After restoring the data, start the virtual machine.
Testing Recovery
After restoring the virtual machine, be sure to test its functionality. Check that all applications are working correctly and that data is available. This is critical to ensure the reliability of the recovery process. Example script for restoring from a tar backup:#!/bin/bash
VM_NAME="vm1"
LV_NAME="/dev/vm_vg/vm1_lv"
BACKUP_FILE="/backup/${VM_NAME}_backup.tar.gz"
NEW_LOCATION="/new_location"
# Stop the VM
sudo virsh shutdown $VM_NAME
# Unpack the archive
sudo mkdir -p $NEW_LOCATION
sudo tar -xzvf $BACKUP_FILE -C $NEW_LOCATION
# Change the VM configuration file (example)
sudo sed -i "s/\/old_path\/${VM_NAME}.qcow2/\/new_location\/${VM_NAME}.qcow2/g" /etc/libvirt/qemu/${VM_NAME}.xml
# Start the VM
sudo virsh start $VM_NAME
echo "Restoration of $VM_NAME completed."
This script stops the virtual machine, unpacks the archive into a new directory, changes the VM configuration file (replaces the old path to the disk image with the new one), and starts the virtual machine. Edit the variables at the beginning of the script to match your configuration. Make the script executable using `chmod +x script.sh`.
Important: Always test backups and the recovery process. Don’t rely on backups that have never been tested.
Best Practices and Optimization
To ensure a reliable virtual machine backup system using LVM snapshots, it is necessary to follow a number of recommendations and optimize the process.Monitoring
Regular monitoring of the LVM state, snapshots, and disk space is an important part of the backup process. It is necessary to monitor disk space usage, snapshot status, and system performance. Examples of commands for monitoring:sudo lvs # Displays information about logical volumes and snapshots
sudo vgs # Displays information about volume groups
sudo pvs # Displays information about physical volumes
df -h # Displays disk space usage
iostat -x 1 # Displays disk I/O statistics
Configure alerts if disk space usage approaches a critical level or if a snapshot is filling up.
Automation
Automate the process of creating backups, deleting snapshots, and rotating backups using cron. This will avoid human errors and ensure regular backup execution. Example cron job:0 2 * * * /path/to/backup_script.sh
This entry in cron executes the `backup_script.sh` script every day at 2 AM. Make sure the script has the necessary access rights and works correctly.
Backup Rotation
Configure backup rotation to avoid disk space overflow. Define a backup retention policy (for example, store daily backups for the last week, weekly backups for the last month, and monthly backups for the last year). Example script for backup rotation:#!/bin/bash
BACKUP_DIR="/backup"
DAYS_TO_KEEP=7
find $BACKUP_DIR -type f -mtime +$DAYS_TO_KEEP -delete
This script deletes all files in the `/backup` directory that are older than