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

9

Я хочу надежный метод создания резервной копии 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?

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

Bosco D'mello
источник
2
Это одна из причин, по которой мне нравится, когда мои виртуальные машины находятся на логических томах. Им присуща поддержка моментальных снимков.
Halfgaar

Ответы:

12

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

Майкл Хэмптон
источник
Единственное, чего не хватает в этом ответе - это снятие снимка после бэкапа :)
dyasny
2
@ BoscoD'mello Если у вас нет очень плохих жестких дисков, это должно быть меньше доли секунды. Об этом не стоит беспокоиться.
Майкл Хэмптон
1
Увы, снимок у меня не сработал. При попытке virsh domfsfreeze $VM_NAMEполучить разрешение на доступ к моей гостевой файловой системе. Мои гостевые файловые системы зашифрованы, но я не уверен, что это важно.
кодер
2
@ Edward_178118 Это зависит от того, может ли ваша рабочая нагрузка быть приостановлена ​​на долю секунды.
Майкл Хэмптон
2
@ Edward_178118 Возможно, сетевые операции с чрезвычайно низкой задержкой? Я никогда не сталкивался с чем-то, что было проблемой.
Майкл Хэмптон
1

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

# 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

Thuffir
источник
1
Если вам понадобится резервный диск позже, который запускается с работающего vm, как бы вы восстановили? Разве вам не нужно содержимое оперативной памяти для восстановления?
Адриан