Назад | Перейти на главную страницу

Бэкап запущенного KVM qcow2 VPS

Мне нужен надежный метод резервного копирования KVM VPS файла qcow2 во время работы. После долгих поисков я обнаружил, что мы можем использовать rsync для резервного копирования в реальном времени. Я использовал следующую команду для rsync:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Он работал нормально. Но я боюсь, что это может привести к повреждению резервного образа qcow2, если резервное копирование выполняется во время изменения VPS из-за операций записи и удаления (например, установки нового программного обеспечения или обновления).

Поэтому создание резервной копии из снимка реального VPS кажется более интересным вариантом.

Я использовал следующие команды для резервного копирования запущенного VPS:

1.Создайте снимок:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2. Преобразуйте снимок в необработанный формат изображения (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Чтобы восстановить VPS:

3. Преобразуйте необработанное изображение в изображение qcow2:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Тогда мы можем запустить VPS virsh create base.xml команда.

Несмотря на то, что этот метод также отлично работает, я все еще не уверен, что это правильный метод для резервного копирования работающего VPS. Я нашел хорошую документацию по командам qemu-img Вот и Вот. Но они ничего не упомянули о преобразовании снимка живого VPS в необработанный образ.

Какой метод больше подходит для резервного копирования VPS в реальном времени? Безопасно ли конвертировать снимок в необработанное изображение?

Если бы я мог получить хорошую подробную документацию о том, как файлы снимков и базовые файлы ведут себя в определенных условиях, это было бы очень полезно.

Возможно, мы также можем преобразовать базовый образ qcow2 в необработанный файл резервной копии вместо преобразования снимка. Итак, поток команд будет:
1. Создать снимок
2. Преобразуйте базовый qcow2 в резервную копию необработанного образа
3. Зафиксируйте изменения снимка в базовом образе.
4. Удалить снимок.

Я попробовал это, и он отлично работал на небольшом VPS 5 ГБ. Но есть ли вероятность ошибки или повреждения VPS, когда размер VPS огромен?

Заранее спасибо...

Единственное, чего вам не хватает, - это приостановить работу гостевой файловой системы перед созданием моментального снимка, чтобы обеспечить его согласованность. Это можно сделать с помощью virsh domfsfreeze если вы используете libvirtd.

Например, порядок операций:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Обратите внимание, что для этого требуется qemu-guest-agent быть установлен и запущен на виртуальной машине. В зависимости от выбора дистрибутива и установки это может быть, а может и нет.

В qemu-guest-agent также расширяемый; вы можете добавлять в него сценарии для поддержки определенного программного обеспечения. Например, он включает образец сценария для перевода MySQL в согласованное состояние.

Существует еще один подход, который включает создание временных снимков во время резервного копирования и их повторную фиксацию впоследствии.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Для получения дополнительной информации см .: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit