Search
Write a publication
Pull to refresh

Резервное копирование виртуальной машины QEMU/KVM с паузой и записью памяти

Level of difficultyMedium

Ранее на habr.com была статья, в которой было описано как сделать копию работающей виртуальной машины (ВМ) с использованием гостевого агента QEMU. Что же делать, если в ВМ нельзя установить этот агент? В таком случае поможет кратковременная пауза виртуальной машины и запись её памяти. Перерыв в доступности ВМ будет только на время записи её памяти на диск и чтения обратно.

Порядок действий опишем, как последовательность команд терминала.

Процесс копирования.

  1. Запрашиваем состояние ВМ

    $ virsh list

    Id Name State

    ----------------------------------------------------

    2 my_vm running

    ВМ работает.

  2. Создаем папку для копии:

    $ mkdir -p ~/backup/my_vm

  3. Запрашиваем список дисков ВМ

    $ virsh domblklist my_vm --details

    Type Device Target Source

    ------------------------------------------------

    file disk hda /var/lib/libvirt/images/my.img

  4. Делаем внешний снимок диска для минимизации времени простоя ВМ :

    $ 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

  5. Записываем память ВМ в директорию копии

    $ virsh save my_vm ~/backup/my_vm/memory.dump

    Domain my_vm saved to /home/piter/backup/my_vm/memory.dump

    ВМ при этом выключается.

  6. Копируем снимок диска :

    $ cp /var/lib/libvirt/images/my.img-bus ~/backup/my_vm/

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

  7. Восстанавливаем ВМ из файла памяти :

    $ virsh restore --running ~/backup/my_vm/memory.dump

    Domain restored from /home/piter/backup/my_vm/memory.dump

  8. ВМ работает, можно копировать основной диск.

    $ cp /var/lib/libvirt/images/my.img ~/backup/my_vm/

  9. После того как диск скопирован - присоединяем снимок к основному диску

    $ virsh blockcommit my_vm hda --active --pivot

    Successfully pivoted

  10. Удаляем файл снимка

    $ rm /var/lib/libvirt/images/my.img-bus

  11. Копируем в папку файл - описатель ВМ libvirt

    $ virsh dumpxml my_vm > ~/backup/my_vm/libvirt.xml

Процесс копирования завершен.

Копия ВМ содержит неконсистентный файл диска, снимок диска и снимок памяти ВМ:

$ ls ~/backup/my_vm/

libvirt.xml memory.dump my.img my.img-bus


Процесс восстановления.

  1. Останавливаем ВМ

    $ virsh shutdown my_vm

  2. Восстанавливаем из копии файлы диска и его снимка

    $ 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

  3. Восстанавливаем ВМ из файла памяти:

    $virsh restore --running ~/backup/my_vm/memory.dump

    Domain restored from /home/piter/backup/my_vm/memory.dump

  4. ВМ работает, присоединяем снимок к основному диску

    $ virsh blockcommit my_vm hda --active --pivot

    Successfully pivoted

  5. Удаляем его

    $ rm /var/lib/libvirt/images/my.img-bus

Процесс восстановления завершен.

Таким образом QEMU предоставляет гибкие возможности по управлению виртуальной машиной — можно выбрать наиболее подходящие.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.