Резервное копирование запущенного 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?

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

2 ответа

Единственное, чего вам не хватает, - это отключить гостевую файловую систему перед тем, как сделать снимок, чтобы убедиться в его согласованности. Это может быть сделано с 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

Другие вопросы по тегам