Як налаштувати резервне копіювання віртуальних машин з використанням LVM snapshots
Резервне копіювання віртуальних машин – критично важливе завдання для будь-якого адміністратора, що забезпечує можливість відновлення даних у разі збоїв, помилок або атак. Існує безліч способів резервного копіювання, і в цій статті ми детально розглянемо налаштування резервного копіювання віртуальних машин (ВМ) з використанням логічного управління томами (LVM) snapshots. Ми пройдемося по всіх кроках, від підготовки LVM, створення snapshots до виконання самих резервних копій і відновлення ВМ. Ви навчитеся використовувати LVM snapshots для створення консистентних резервних копій працюючих віртуальних машин, мінімізуючи час простою і гарантуючи цілісність даних.
У цій статті ми зосередимося на одній, але дуже важливій техніці: LVM snapshots. Ми розберемо, як вони працюють, їх переваги та недоліки, а також надамо докладні інструкції з налаштування резервного копіювання ВМ з їх використанням. Цей метод особливо корисний для віртуальних машин, що зберігаються на томах LVM, оскільки він дозволяє створювати резервні копії практично миттєво, мінімізуючи час блокування ВМ для консистентного копіювання даних.
Зміст
- Налаштування LVM для віртуальних машин
- Створення LVM snapshots для резервного копіювання
- Резервне копіювання LVM snapshots
- Відновлення віртуальної машини з резервної копії
- Рекомендації та оптимізація
Налаштування LVM для віртуальних машин

Перевірка наявності LVM
Спочатку переконайтеся, що пакет LVM встановлено. У більшості дистрибутивів Linux це можна зробити за допомогою менеджера пакетів. Наприклад, в Debian/Ubuntu:sudo apt update
sudo apt install lvm2
В CentOS/RHEL:
sudo yum update
sudo yum install lvm2
Після установки перевірте, що LVM працює, за допомогою команди:
sudo systemctl status lvm2-lvmetad.service
Очікуваний результат: active (running).
Створення Physical Volumes, Volume Groups і Logical Volumes
Якщо у вас є вільні диски, ви можете використовувати їх для створення Physical Volumes (PV), потім об'єднати їх в Volume Group (VG), і, нарешті, створити Logical Volumes (LV) для зберігання даних віртуальних машин. 1. Створення Physical Volumes:sudo pvcreate /dev/sdb /dev/sdc
Тут `/dev/sdb` і `/dev/sdc` – це ваші вільні диски. Обов'язково використовуйте правильні імена дисків.
2. Створення Volume Group:
sudo vgcreate vm_vg /dev/sdb /dev/sdc
`vm_vg` – це ім'я вашої Volume Group. Можете вибрати будь-яке інше ім'я.
3. Створення Logical Volumes:
sudo lvcreate -L 100G -n vm1_lv vm_vg
sudo lvcreate -L 50G -n vm2_lv vm_vg
Тут ми створюємо два Logical Volumes: `vm1_lv` розміром 100 ГБ і `vm2_lv` розміром 50 ГБ в Volume Group `vm_vg`. Розміри та імена слід змінити відповідно до потреб ваших ВМ.
4. Форматування Logical Volumes:
sudo mkfs.ext4 /dev/vm_vg/vm1_lv
sudo mkfs.ext4 /dev/vm_vg/vm2_lv
5. Монтування Logical Volumes:
sudo mkdir /vm1
sudo mkdir /vm2
sudo mount /dev/vm_vg/vm1_lv /vm1
sudo mount /dev/vm_vg/vm2_lv /vm2
Тепер ви можете використовувати `/vm1` і `/vm2` для зберігання образів дисків ваших віртуальних машин. Важливо налаштувати постійне монтування цих томів, додавши їх в `/etc/fstab`.
Приклад вмісту /etc/fstab:
/dev/vm_vg/vm1_lv /vm1 ext4 defaults 0 0
/dev/vm_vg/vm2_lv /vm2 ext4 defaults 0 0
Після редагування `/etc/fstab`, виконайте `sudo mount -a` для застосування змін.
Перенесення існуючих ВМ на LVM (якщо необхідно)
Якщо ваші віртуальні машини вже існують і зберігаються не на LVM, вам потрібно їх перенести. Це можна зробити, скопіювавши образи дисків на нові Logical Volumes. Припустимо, що образи дисків знаходяться в `/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
Вам також може знадобитися змінити файл конфігурації ВМ (`/etc/libvirt/qemu/vm1.xml`) для вказівки нового шляху до образу диска. Знайдіть рядок, що містить шлях до образу диска, і змініть його.
Наприклад, змініть:
<source file='/var/lib/libvirt/images/vm1.qcow2' .../>
На:
<source file='/vm1/vm1.qcow2' .../>
Важливо: Перед виконанням будь-яких операцій з дисками, зробіть резервну копію важливих даних. Помилки можуть призвести до втрати даних.
Порада експерта: При плануванні LVM, виділіть достатньо вільного місця в Volume Group для майбутніх snapshots. Розмір snapshot повинен бути достатнім для зберігання змін, внесених у вихідний том під час резервного копіювання.
Потрібен надійний хостинг для ваших віртуальних машин?
Забезпечте безперебійну роботу ваших VM з нашими високопродуктивними VPS-планами. Отримайте стабільність і контроль, необхідні для вашого бізнесу. — from €4.49/mo.
Вибрати VPS-план →
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Створення LVM snapshots для резервного копіювання

Створення Snapshot
Для створення snapshot використовується команда `lvcreate` з опцією `-s` (snapshot). Необхідно вказати ім'я snapshot, вихідний логічний том і розмір, виділений для зберігання змін.sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
Тут ми створюємо snapshot з іменем `vm1_snap` для логічного тому `vm1_lv`. Розмір snapshot становить 20 ГБ. Цей розмір повинен бути достатнім для зберігання змін, внесених в `vm1_lv` під час резервного копіювання. Розмір snapshot залежить від інтенсивності запису на диск віртуальної машини. Якщо ви не впевнені, краще виділити більше місця, ніж менше.
Консистентність даних
Для забезпечення консистентності даних, перед створенням snapshot рекомендується призупинити роботу віртуальної машини або хоча б виконати операцію "fsync" для скидання даних з кешу на диск. Це мінімізує ризик втрати даних або пошкодження файлів. Приклад з використанням virsh:sudo virsh snapshot-create vm1
Ця команда створить внутрішній snapshot ВМ. Потім:
sudo virsh shutdown vm1
sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
sudo virsh start vm1
Потім видаліть внутрішній snapshot ВМ:
sudo virsh snapshot-delete vm1 1
Альтернативний підхід (fsync):
Якщо призупинення ВМ небажане, можна використовувати команду `fsync` для скидання даних на диск. Однак це не гарантує повну консистентність, особливо якщо ВМ активно виконує транзакції.
sudo virsh domfsfreeze vm1
sudo lvcreate -s -L 20G -n vm1_snap /dev/vm_vg/vm1_lv
sudo virsh domfsthaw vm1
`domfsfreeze` заморожує файлову систему всередині ВМ, а `domfsthaw` розморожує її. Ці команди вимагають, щоб гостьовий агент був встановлений і працював всередині ВМ.
Монтування Snapshot
Після створення snapshot його можна змонтувати як звичайний логічний том для резервного копіювання даних.sudo mkdir /mnt/vm1_snap
sudo mount /dev/vm_vg/vm1_snap /mnt/vm1_snap
Тепер ви можете отримати доступ до даних snapshot, як якщо б це був вихідний логічний том на момент створення snapshot. Важливо: Snapshot монтується в режимі read-only (тільки для читання), щоб уникнути пошкодження даних.
Видалення Snapshot
Після завершення резервного копіювання snapshot необхідно видалити, щоб звільнити дисковий простір.sudo umount /mnt/vm1_snap
sudo lvremove /dev/vm_vg/vm1_snap
Перед видаленням snapshot переконайтеся, що він розмонтований. Якщо на snapshot виділено недостатньо місця, він може заповнитися, і це призведе до його пошкодження і, можливо, до пошкодження вихідного логічного тому. Слідкуйте за використанням дискового простору snapshot за допомогою команди `lvs`.
Приклад:
sudo lvs
У виводі команди зверніть увагу на стовпець "Data%". Він показує відсоток використання простору snapshot. Якщо він наближається до 100%, слід або збільшити розмір snapshot, або виконати резервне копіювання і видалити snapshot.
Приклад скрипта для створення snapshot і резервного копіювання:
#!/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"
# Останавливаем VM
sudo virsh shutdown $VM_NAME
# Создаем snapshot
sudo lvcreate -s -L $SNAP_SIZE -n ${VM_NAME}_snap $LV_NAME
# Запускаем VM
sudo virsh start $VM_NAME
# Монтируем snapshot
sudo mkdir -p $MOUNT_POINT
sudo mount $SNAP_NAME $MOUNT_POINT -o ro
# Выполняем резервное копирование
sudo tar -czvf $BACKUP_DIR/${VM_NAME}_$(date +%Y%m%d).tar.gz -C $MOUNT_POINT .
# Размонтируем snapshot
sudo umount $MOUNT_POINT
# Удаляем snapshot
sudo lvremove -f $SNAP_NAME
echo "Резервное копирование $VM_NAME завершено."
Цей скрипт зупиняє віртуальну машину, створює snapshot, запускає віртуальну машину, монтує snapshot, виконує резервне копіювання з використанням `tar`, розмонтовує snapshot і видаляє його. Відредагуйте змінні на початку скрипта відповідно до вашої конфігурації. Зробіть скрипт виконуваним за допомогою `chmod +x script.sh`. Не забудьте протестувати скрипт перед використанням в production.
Резервне копіювання LVM snapshots
Після створення і монтування LVM snapshot, необхідно виконати резервне копіювання даних. Існує кілька способів резервного копіювання, кожен з яких має свої переваги і недоліки. Вибір методу залежить від ваших вимог до швидкості, ефективності і доступних ресурсів.Резервне копіювання з використанням tar
`tar` – це стандартна утиліта для архівування файлів. Вона проста у використанні і дозволяє створювати стислі архіви.sudo tar -czvf /backup/vm1_backup.tar.gz -C /mnt/vm1_snap .
Ця команда створює архів `vm1_backup.tar.gz` в директорії `/backup`, що містить всі файли зі змонтованого snapshot (`/mnt/vm1_snap`). Опція `-c` вказує на створення архіву, `-z` включає стиснення gzip, `-v` (verbose) відображає список архівованих файлів, а `-f` вказує ім'я файлу архіву. Опція `-C` дозволяє змінити директорію перед додаванням файлів в архів.
Переваги: Простота використання, широка доступність.
Недоліки: Повне резервне копіювання кожен раз, повільна робота з великими обсягами даних.
Резервне копіювання з використанням rsync
`rsync` – це утиліта для синхронізації файлів і директорій. Вона дозволяє виконувати інкрементальні резервні копії, копіюючи тільки змінені файли.sudo rsync -avz /mnt/vm1_snap/ /backup/vm1_backup/
Ця команда синхронізує вміст `/mnt/vm1_snap` з директорією `/backup/vm1_backup/`. Опція `-a` (archive) зберігає всі атрибути файлів, `-v` (verbose) відображає список переданих файлів, а `-z` включає стиснення. При повторному запуску `rsync` скопіює тільки змінені файли, що значно прискорює процес резервного копіювання.
Переваги: Інкрементальне резервне копіювання, ефективна передача даних.
Недоліки: Вимагає установки `rsync`, трохи складніше в налаштуванні, ніж `tar`.
Резервне копіювання з використанням dd
`dd` – це утиліта для копіювання і перетворення даних. Вона дозволяє копіювати весь логічний том цілком.sudo dd if=/dev/vm_vg/vm1_snap of=/backup/vm1_backup.img bs=4M conv=sync,noerror
Ця команда копіює вміст `/dev/vm_vg/vm1_snap` у файл `/backup/vm1_backup.img`. `if` вказує на вхідний файл, `of` – на вихідний файл, `bs` встановлює розмір блоку (4 МБ для прискорення процесу), а `conv=sync,noerror` обробляє помилки читання, заповнюючи їх нулями.
Переваги: Простота копіювання всього тому, можливість створення точної копії.
Недоліки: Повне резервне копіювання кожен раз, повільна робота, великий розмір результуючого файлу. Не рекомендується для великих логічних томів.
Порівняння методів резервного копіювання
| Метод | Переваги | Недоліки |
|---|---|---|
tar | Простий у використанні, широко доступний | Повне резервне копіювання, повільний |
rsync | Інкрементне резервне копіювання, ефективний | Потребує встановлення, складніше в налаштуванні |
dd | Просте копіювання всього тому, точна копія | Повне резервне копіювання, повільний, великий розмір |
- Автоматизуйте процес резервного копіювання за допомогою cron.
- Перевіряйте цілісність резервних копій після створення.
- Зберігайте резервні копії в кількох місцях, включаючи віддалене сховище.
- Регулярно тестуйте процес відновлення з резервних копій.
Відновлення віртуальної машини з резервної копії
Після створення резервних копій, необхідно вміти відновлювати віртуальні машини з цих резервних копій. Процес відновлення залежить від методу, використаного для резервного копіювання.Відновлення з резервної копії tar
Якщо ви використовували `tar` для створення резервної копії, відновлення виконується за допомогою команди `tar`.sudo tar -xzvf /backup/vm1_backup.tar.gz -C /new_location/
Ця команда розпаковує архів `/backup/vm1_backup.tar.gz` в директорію `/new_location/`. Опція `-x` вказує на розпакування, `-z` включає розпакування gzip, `-v` відображає список файлів, що розпаковуються, а `-f` вказує ім'я файлу архіву. Перед відновленням, переконайтеся, що директорія `/new_location/` існує і має достатньо місця. Зупиніть віртуальну машину перед відновленням.
Після розпакування архіву, вам може знадобитися змінити файл конфігурації ВМ (`/etc/libvirt/qemu/vm1.xml`) для вказівки нового шляху до образу диска.
Відновлення з резервної копії rsync
Якщо ви використовували `rsync` для створення резервної копії, відновлення виконується за допомогою команди `rsync`.sudo rsync -avz /backup/vm1_backup/ /new_location/
Ця команда синхронізує вміст `/backup/vm1_backup/` з директорією `/new_location/`. Опція `-a` (archive) зберігає всі атрибути файлів, `-v` (verbose) відображає список файлів, що передаються, а `-z` включає стиснення. Перед відновленням, переконайтеся, що директорія `/new_location/` існує і має достатньо місця. Зупиніть віртуальну машину перед відновленням.
Після синхронізації файлів, вам може знадобитися змінити файл конфігурації ВМ (`/etc/libvirt/qemu/vm1.xml`) для вказівки нового шляху до образу диска.
Відновлення з резервної копії dd
Якщо ви використовували `dd` для створення резервної копії, відновлення виконується за допомогою команди `dd`.sudo dd if=/backup/vm1_backup.img of=/dev/vm_vg/vm1_lv bs=4M conv=sync,noerror
Ця команда копіює вміст файлу `/backup/vm1_backup.img` на логічний том `/dev/vm_vg/vm1_lv`. `if` вказує на вхідний файл, `of` – на вихідний файл, `bs` встановлює розмір блоку (4 МБ для прискорення процесу), а `conv=sync,noerror` обробляє помилки читання, заповнюючи їх нулями. Увага: Ця команда перезапише вміст логічного тому `/dev/vm_vg/vm1_lv`. Переконайтеся, що ви вказуєте правильний логічний том. Зупиніть віртуальну машину перед відновленням.
Після відновлення даних, запустіть віртуальну машину.
Тестування відновлення
Після відновлення віртуальної машини, обов'язково протестуйте її працездатність. Перевірте, що всі додатки працюють коректно, і дані доступні. Це критично важливо для забезпечення надійності процесу відновлення. Приклад скрипта для відновлення з резервної копії tar:#!/bin/bash
VM_NAME="vm1"
LV_NAME="/dev/vm_vg/vm1_lv"
BACKUP_FILE="/backup/${VM_NAME}_backup.tar.gz"
NEW_LOCATION="/new_location"
# Зупиняємо VM
sudo virsh shutdown $VM_NAME
# Розпаковуємо архів
sudo mkdir -p $NEW_LOCATION
sudo tar -xzvf $BACKUP_FILE -C $NEW_LOCATION
# Змінюємо файл конфігурації VM (приклад)
sudo sed -i "s/\/old_path\/${VM_NAME}.qcow2/\/new_location\/${VM_NAME}.qcow2/g" /etc/libvirt/qemu/${VM_NAME}.xml
# Запускаємо VM
sudo virsh start $VM_NAME
echo "Відновлення $VM_NAME завершено."
Цей скрипт зупиняє віртуальну машину, розпаковує архів в нову директорію, змінює файл конфігурації ВМ (замінює старий шлях до образу диска на новий) і запускає віртуальну машину. Відредагуйте змінні на початку скрипта відповідно до вашої конфігурації. Зробіть скрипт виконуваним за допомогою `chmod +x script.sh`.
Важливо: Завжди перевіряйте резервні копії і процес відновлення. Не покладайтеся на резервні копії, які ніколи не перевірялися.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Рекомендації та оптимізація
Для забезпечення надійної системи резервного копіювання віртуальних машин з використанням LVM snapshots, необхідно дотримуватися ряду рекомендацій і оптимізувати процес.Моніторинг
Регулярний моніторинг стану LVM, snapshots і дискового простору – важлива частина процесу резервного копіювання. Необхідно стежити за використанням дискового простору, станом snapshots і продуктивністю системи. Приклади команд для моніторингу:sudo lvs # Відображає інформацію про логічні томи і snapshots
sudo vgs # Відображає інформацію про volume groups
sudo pvs # Відображає інформацію про physical volumes
df -h # Відображає використання дискового простору
iostat -x 1 # Відображає статистику введення-виведення диска
Налаштуйте оповіщення, якщо використання дискового простору наближається до критичного рівня або якщо snapshot заповнюється.
Автоматизація
Автоматизуйте процес створення резервних копій, видалення snapshots і ротації резервних копій за допомогою cron. Це дозволить уникнути людських помилок і забезпечити регулярне виконання резервного копіювання. Приклад cron job:0 2 * * * /path/to/backup_script.sh
Цей запис в cron виконує скрипт `backup_script.sh` кожен день о 2 годині ночі. Переконайтеся, що скрипт має необхідні права доступу і працює коректно.
Ротація резервних копій
Налаштуйте ротацію резервних копій, щоб уникнути переповнення дискового простору. Визначте політику зберігання резервних копій (наприклад, зберігати щоденні резервні копії за останній тиждень, щотижневі за останній місяць і щомісячні за останній рік). Приклад скрипта для ротації резервних копій:#!/bin/bash
BACKUP_DIR="/backup"
DAYS_TO_KEEP=7
find $BACKUP_DIR -type f -mtime +$DAYS_TO_KEEP -delete
Цей скрипт видаляє всі файли в директорії `/backup`, які старші
Масштабуйте свої проекти з гнучкими хмарними інстансами
Перенесіть свої віртуальні машини в хмару для максимальної гнучкості та продуктивності. Ідеально для потреб, що зростають.
Вивчити хмарні інстанси →