Мне нужен надежный метод резервного копирования 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