Структура хранилища резервных копий

Резервные копии всех машин хранятся в директории, указанной в конфигурации (см. п. Настройка конфигурационного файла, параметр storage_dir).

Примерный вид структуры резервных копий (одна ВМ с одним чек-пойнтом и двумя дисками):

backups/
└── vm_a8a53919-c5ea-4199-846c-1f532d73e6a0
├── .meta
├── options.json
├── checkpoint.map
└── cp_e618229f-2096-47eb-a371-be8581fceb90
├── config.ovf
├── db_59189b1a-7c11-4725-8c4e-8fda35339a47.qcow2
└── dn_16b20599-b0ef-471b-b108-f3c567ac7e53.qcow2
2 directories, 7 files
```
Каждая ВМ имеет свою директорию, которая хранит карту чек-пойнтов checkpoint.map, чек-пойнты, индивидуальные настройки для резервной копии ВМ options.json и временный файл .meta. Каждый чек-пойнт представляет собой директорию содержащую:
  • сохраненные состояния дисков;
  • конфигурацию ВМ config.ovf в формате Open Virtualization Format.

Форматы названий файлов

vm_<UUID> ‒ директория ВМ, где <UUID> ‒ уникальный идентификатор ВМ. vm_<UUID>_backup ‒ копия директории ВМ (существует в процессе ротации), где <UUID> ‒ уникальный идентификатор ВМ. cp_<UUID> ‒ директория чек-пойнта, где <UUID> ‒ уникальный идентификатор чек-пойнта ВМ. db_<UUID>.qcow2 ‒ сохраненное состояние загрузочного диска в формате qcow2, где:

  • <UUID> ‒ уникальный идентификатор диска ВМ;
  • db_ ‒ disk bootable (загрузочный диск).

dn_<UUID>.qcow2 ‒ сохраненное состояние незагрузочного диска в формате qcow2, где:

  • <UUID> ‒ уникальный идентификатор диска ВМ;
  • dn_ ‒ disk nonbootable (не загрузочный диск).

.meta ‒ файл, содержащий метаданные о текущем резервном копировании; создается при старте резервного копирования; удаляется при успешном завершении. options.json ‒ файл, содержащий индивидуальные настройки для резервной копии ВМ, например настройки ротации.

Примечание:

  • checkpoint.map ‒ файл формата JSON.
  • config.ovf ‒ файл формата .xml с пространствами имен.

Карта чек-пойнтов

checkpoint.map ‒ файл JSON-формата, который содержит карту чек-пойнтов.

Примерное содержимое:

{
    "id": "cb0207c6-765b-4eb4-82b8-16610340b7de",
    "type": "full",
    "datetime": "29.08.2022 14:55:25 +0300",
    "comment": "init checkpoint",
    "vm_id": "a8a53919-c5ea-4199-846c-1f532d73e6a0",
    "nodes": [
        {
            "id": "ec47068c-98e1-462b-afa3-e4fd0844615a",
            "type": "incremental",
            "datetime": "29.08.2022 15:09:50 +0300",
            "comment": "necessary soft installed",
            "parent": "cb0207c6-765b-4eb4-82b8-16610340b7de",
            "nodes": [],
            "disks": [
                {
                    "id": "59189b1a-7c11-4725-8c4e-8fda35339a47",
                    "type": "bootable",
                    "sha256": "5c5f841406e1bc947900fddc969e0ae32bd20d70ebe6769d0a2f04f2cd73fb60",
                    "path": "backups/vm_a8a53919-c5ea-4199-846c-1f532d73e6a0/cp_ec47068c-98e1-462b-afa3-e4fd0844615a/db_59189b1a-7c11-4725-8c4e-8fda35339a47.qcow2"
                },
                {
                    "id": "16b20599-b0ef-471b-b108-f3c567ac7e53",
                    "type": "nonbootable",
                    "sha256": "a1c469967edda2370581d8cd71b45bcbdf75ec2516802284b68973315ca7e234",
                    "path": "backups/vm_a8a53919-c5ea-4199-846c-1f532d73e6a0/cp_ec47068c-98e1-462b-afa3-e4fd0844615a/dn_16b20599-b0ef-471b-b108-f3c567ac7e53.qcow2"
                }
            ]
        }
    ],
    "disks": [
        {
            "id": "59189b1a-7c11-4725-8c4e-8fda35339a47",
            "type": "bootable",
            "sha256": "32167d7feb747ae1e112bce489d7fd5be76c9c689d5370f731146d2cba9f5b43",
            "path": "backups/vm_a8a53919-c5ea-4199-846c-1f532d73e6a0/cp_cb0207c6-765b-4eb4-82b8-16610340b7de/db_59189b1a-7c11-4725-8c4e-8fda35339a47.qcow2"
        },
        {
            "id": "16b20599-b0ef-471b-b108-f3c567ac7e53",
            "type": "nonbootable",
            "sha256": "5b273b75009f82b7bb2085061e6060374d8dea35decd5103952e9bcabd9dba2b",
            "path": "backups/vm_a8a53919-c5ea-4199-846c-1f532d73e6a0/cp_cb0207c6-765b-4eb4-82b8-16610340b7de/dn_16b20599-b0ef-471b-b108-f3c567ac7e53.qcow2"
        }
    ]
}

В примере карта чек-пойнтов содержит два чек-пойнта. Чек-пойнт имеет следующие поля:

  • id ‒ UUID чек-пойнта;
  • type ‒ тип резервной копии: инкрементальная (incremental) или полная (full);
  • datetime ‒ время создания чек-пойнта в формате %d.%m.%Y %H:%M:%S %z;
  • comment ‒ комментарий к чек-пойнту;
  • vm_id ‒ UUID ВМ. Это поле существует только для корневого чек-пойнта;
  • parent ‒ UUID родительского(предыдущего) чек-пойнта. Это поле существует только для некорневого чек-пойнта;
  • nodes ‒ список последующих чек-пойнтов, зависимых от текущего;
  • disks ‒ список дисков, которые содержит чек-пойнт.

Диск в карте чек-пойнтов имеет следующие поля:

  • id ‒ UUID диска;
  • type ‒ тип диска. Возможные значения:
  • bootable ‒ загрузочный диск;
  • nonbootable ‒ незагрузочный диск;
  • hibermemory ‒ состояние ВМ перед гибернацией;
  • hibermeta ‒ метаинформация о диске c типом hibermemory.
  • sha256 ‒ контрольная сумма, рассчитанная с использованием алгоритма SHA256;
  • path ‒ путь к диску в директории, где хранятся резервные копии.

Примечание ‒ Карта чек-пойнтов проходит проверку при сохранении. Приложение выдаст ошибку, если:

  • чек-пойнт-родитель младше (по времени создания) чек-пойнта-потомка;
  • чек-пойнт-родитель содержит потомка, чье поле parent отлично от родительского поля UUID.

Опции резервного копирования ВМ

options.json ‒ файл JSON-формата, содержащий индивидуальные настройки резервных копий для ВМ. Этот файл должен находиться в директории ВМ хранилища резервных копий.

Важно – Настройки, содержащиеся в этом файле, имеют более высокий приоритет, чем настройки, содержащиеся в конфигурации rv-backup, но менее приоритетные, чем заданные в качестве параметров командной строки.

Примечание ‒ Этот файл может отсутствовать. В таком случае будут использованы настройки из других источников, например, из командной строки или конфигурации rv-backup.

Примечание‒ Также отсутствовать могут конкретные параметры внутри options.json, в таком случае они будут взяты из других доступных источников.

Примерное содержимое:

{
"rotation_threshold_checkpoints_count": 5,
"rotation_threshold_backup_size": "5GB"
}
```

где:
  • rotation_threshold_checkpoints_count ‒ см. одноименный параметр в конфигурации;
  • rotation_threshold_backup_size ‒ см. одноименный параметр в конфигурации.