bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward

Як налаштувати резервне копіювання віртуальних машин в 2...

calendar_month October 12, 2025 schedule 12 хв. читання visibility 482 переглядів
person
Valebyte Team
Як налаштувати резервне копіювання віртуальних машин в 2...
summarize

TL;DR

  • LVM snapshots позволяют создавать мгновенные копии работающих ВМ с минимальным временем простоя.
  • Для настройки метода необходимо размещать диски виртуальных машин на логических томах (LV) LVM.
  • Используйте пакет lvm2 и команду lvcreate для создания снимков, гарантирующих целостность данных.
  • Технология обеспечивает консистентность бэкапа без необходимости полной остановки гостевой системы.

Як налаштувати резервне копіювання віртуальних машин з використанням LVM snapshots

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

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

Зміст

Налаштування LVM для віртуальних машин

Як налаштувати резервне копіювання віртуальних машин? - Встановлення та налаштування LVM на сервері. Показати приклад створення volume group і logical volume для віртуальних машин.
Перш ніж приступати до резервного копіювання з використанням LVM snapshots, необхідно переконатися, що ваші віртуальні машини зберігаються на логічних томах (logical volumes). Якщо ви ще не використовуєте LVM, необхідно налаштувати його. LVM надає гнучкий спосіб управління дисковим простором, дозволяючи легко змінювати розміри томів, створювати snapshots і виконувати інші операції.

Перевірка наявності 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-план →
rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Створення LVM snapshots для резервного копіювання

Як налаштувати резервне копіювання віртуальних машин? - Показати приклад створення snapshot з використанням lvcreate, і пояснити, як snapshot відстежує зміни.
Після того, як LVM налаштовано, можна переходити до створення LVM snapshots. Snapshots – це "моментальні знімки" стану логічного тому на певний момент часу. Вони створюються дуже швидко і використовують мінімальну кількість дискового простору, оскільки зберігають тільки зміни, внесені після створення snapshot.

Створення 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Просте копіювання всього тому, точна копіяПовне резервне копіювання, повільний, великий розмір
Рекомендація: Для більшості випадків рекомендується використовувати `rsync` через його ефективність і можливість інкрементного резервного копіювання. `tar` підходить для невеликих ВМ або для створення повних резервних копій раз на тиждень/місяць. `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`.

Важливо: Завжди перевіряйте резервні копії і процес відновлення. Не покладайтеся на резервні копії, які ніколи не перевірялися.

rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Рекомендації та оптимізація

Для забезпечення надійної системи резервного копіювання віртуальних машин з використанням 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`, які старші

Масштабуйте свої проекти з гнучкими хмарними інстансами

Перенесіть свої віртуальні машини в хмару для максимальної гнучкості та продуктивності. Ідеально для потреб, що зростають.

Вивчити хмарні інстанси →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.