Резервная копия — это образ диска виртуальной машины (ВМ), который используется для её восстановления. В отличие от пользовательских образов, резервные копии содержат все настройки ВМ. Например, сетевые настройки, пароли и т.д.

Вы можете создать резервную копию:

  • на узле кластера, где находится исходная ВМ — резервные копии создаются в директории хранения образов. При миграции ВМ резервные копии перемещаются вместе с ней на другой узел кластера. 

    При удалении ВМ её резервные копии удаляются. Чтобы получить копию ВМ, которая будет сохранена после удаления оригинальной ВМ, создайте пользовательский образ.

  • на внешнем хранилище — резервная копия сначала создаётся на узле кластера, а затем копируется в хранилище. По завершении копирования резервная копия удаляется с узла кластера. Подробнее о настройке хранилища см. Хранилища резервных копий

    Не монтируйте папку, которая используется для хранения резервных копий на сетевом хранилище, в качестве папки для хранения локальных резервных копий на узле кластера (по умолчанию —  /image). В этом случае резервные копии будут удаляться сразу после перемещения в удалённое хранилище.

Резервные копии можно создавать автоматически по заданному расписанию. Подробнее см. в статье Автоматическое создание резервных копий.

Ограничения резервных копий


При создании резервной копии запущенной ВМ целостность данных ПО не гарантируется. Это происходит из-за того, что резервная копия сохраняет образ файловой системы. Если при создании копии какие-либо процессы операционной системы выполняют операции чтения или записи, последнее состояние невозможно будет восстановить из резервной копии. Например, если создать копию ВМ с работающей базой данных, восстановление базы данных будет невозможно. В таких случаях рекомендуется остановить ВМ перед созданием резервной копии.

Алгоритм создания резервной копии


KVM-кластер

Чтобы выполнить резервное копирование, VMmanager:

  1. Если включена опция Остановить VM на время создания резервной копии, останавливает ВМ.
  2. Cоздаёт снимок виртуального диска:
    • файловое хранилище — файл снимка создаётся в директории хранения ВМ (по умолчанию — /vm);
    • LVM — LV снимка создаётся в VG, где хранится LV виртуального диска;
    • Ceph — снимок создаётся на узле кластера Ceph.
  3. Перемещает информацию из снимка в директорию хранения образов на узле кластера (по умолчанию — /image). Для создания архива платформа использует утилиту zstd. Уровень сжатия определяется алгоритмами утилиты и не гарантируется платформой.
  4. Если включена опция Остановить VM на время создания резервной копии, запускает ВМ.
  5. Удаляет исходный файл снимка.
  6. Если копия должна быть создана на внешнем хранилище:
    1. Оптимизирует архив снимка с помощью утилиты virt-sparsify
    2. Перемещает архив снимка на внешнее хранилище.

Если вы используете файловое хранилище, для создания резервной копии на узле кластера должно быть свободное место, в два раза превышающее объём диска ВМ. Например, для создания копии ВМ с диском 20 ГБ на узле кластера должно быть свободно не менее 40 ГБ. 

LXD-кластер

Чтобы выполнить резервное копирование, VMmanager:

  1. Создаёт резервную копию ВМ в директории /var/snap/lxd/common/lxd/backups/ на узле кластера.
  2. Создаёт архив резервной копии в директории /var/snap/lxd/common/lxd/backups/instances/ на узле кластера. Для создания архива платформа использует утилиту zstd. Уровень сжатия определяется алгоритмами утилиты и не гарантируется платформой.
  3. Переносит архив резервной копии в директорию хранения образов на узле кластера (по умолчанию — /image).
  4. Удаляет резервную копию ВМ.
  5. Если копия должна быть создана на внешнем хранилище, перемещает архив на внешнее хранилище.

Для создания резервной копии на узле кластера должно быть свободное место, примерно в 1,5 раза превышающее объём диска ВМ. Например, для создания копии ВМ с диском 20 ГБ на узле кластера должно быть свободно не менее 30 ГБ.

Ограничения

Одновременно на узле кластера может выполняться не более одной операции создания резервной копии.

Создание резервных копий в LVM-хранилище

Чтобы создать резервную копию в LVM-хранилище, платформа:

  1. Создаёт снапшот ВМ командой:

    lvcreate --size {self.size_mib} --snapshot --name '{self.snapshot_name}' '{self.disk}'
    BASH
  2. Проверяет свободное место на узле и сжимает диск утилитой zstd с помощью команды: 

    set -o pipefail; nice -n 5 dd bs=4M if=/vm/{vm_name} | zstd --no-progress --rm -1 -T1 -c | dd bs=4M of=/image/1_{vm_name}_backup.qcow2.zst
    BASH
  3. Перемещает архив снапшота на внешнее хранилище.

Особенности создания резервных копий по расписанию


При работе по расписанию перед копированием ВМ на внешнее хранилище VMmanager проверяет возможность этой операции. Для этого платформа последовательно рассчитывает хватит ли места на внешнем хранилище для каждой ВМ. Если места для ВМ в хранилище достаточно, VMmanager создаст задачу на резервное копирование.

Например, нужно создать копии для виртуальных машин VM1 (объём диска 40 ГБ), VM2 (объём диска 20 ГБ) и VM3 (объём диска 10 ГБ). На внешнем хранилище свободно 55 ГБ. Для этого VMmanager:

  1. Проверяет хватит ли в хранилище места для VM1.
  2. Так как места достаточно, создаёт задачу на копирование VM1.
  3. Вычисляет сколько останется места после копирования VM1: 55 ГБ - 40 ГБ = 15 ГБ
  4. Проверяет хватит ли в хранилище места для VM2.
  5. Так как места недостаточно, не создаёт задачу на копирование.
  6. Проверяет хватит ли в хранилище места для VM3.
  7. Так как места достаточно, создаёт задачу на копирование VM3.
  8. Копирует VM1 и VM3 во внешнее хранилище.