В интернете есть статьи, где было описано как сделать бэкап работающей виртуальной машины (ВМ) с использованием гостевого агента QEMU (см. например https://bozza.ru/art-337.html ). Что же делать, если в ВМ нельзя установить этот агент? В таком случае поможет кратковременная пауза виртуальной машины и запись её памяти. Перерыв в доступности ВМ будет только на время записи её памяти на диск и чтения обратно.
Опишу последовательность действий, как набор команд терминала.
Процесс копирования.
- Запрашиваем состояние ВМ
virsh list
Id Name State
----------------------------------------------------
2 my_vm running
ВМ работает.
- Создаем папку для бэкапа:
mkdir -p ~/backup/my_vm
- Запрашиваем список дисков ВМ
virsh domblklist my_vm --details
Type Device Target Source
------------------------------------------------
file disk hda /var/lib/libvirt/images/my.img
- Делаем внешний снимок диска для минимизации времени простоя ВМ:
virsh snapshot-create-as --domain my_vm bus \
--disk-only --atomic --no-metadata \
--diskspec hda,snapshot=external,file=/var/lib/libvirt/images/my.img-bus
Domain snapshot bus created
- Записываем память ВМ в директорию бэкапа
virsh save my_vm ~/backup/my_vm/memory.dump
Domain my_vm saved to /home/piter/backup/my_vm/memory.dump
ВМ при этом выключается.
- Копируем снимок диска:
cp /var/lib/libvirt/images/my.img-bus ~/backup/my_vm/
Файл снимка содержит только изменения, прошедшие со времени его создания, т.о. размер его невелик и скопируется он быстро.
- Восстанавливаем ВМ из файла памяти:
virsh restore --running ~/backup/my_vm/memory.dump
Domain restored from /home/piter/backup/my_vm/memory.dump
- ВМ работает, можно без спешки скопировать основной диск.
cp /var/lib/libvirt/images/my.img ~/backup/my_vm/
- После того как диск скопирован — присоединяем файл снимка к диску
virsh blockcommit my_vm hda --active --pivot
Successfully pivoted
- и удаляем его
rm /var/lib/libvirt/images/my.img-bus
- Копируем в папку файл описания ВМ libvirt:
virsh dumpxml my_vm > ~/backup/my_vm/libvirt.xml
Процесс копирования завершен.
Копия ВМ содержит неконсистентный файл диска, снимок диска и снимок памяти ВМ:
ls ~/backup/my_vm/
libvirt.xml memory.dump my.img my.img-bus
Процесс восстановления.
- Останавливаем ВМ
virsh shutdown my_vm
- Восстанавливаем из копии файлы диска и его снимка
cp ~/backup/my_vm/my.img /var/lib/libvirt/images/my.img
cp ~/backup/my_vm/my.img-bus /var/lib/libvirt/images/my.img-bus
- Восстанавливаем ВМ из файла памяти:
virsh restore --running ~/backup/my_vm/memory.dump
Domain restored from /home/piter/backup/my_vm/memory.dump
- ВМ работает, присоединяем файл снимка к диску
virsh blockcommit my_vm hda --active --pivot
Successfully pivoted
- и удаляем его
rm /var/lib/libvirt/images/my.img-bus
Процесс восстановления завершен.