VK Cloud logo

Скачивание копии через OpenStack CLI и API

При использовании этого способа идентификаторы резервных копий определяются через OpenStack CLI или API Karboii, а файлы копий скачиваются напрямую из VK Object Storage через AWS CLI. Используйте этот способ, чтобы автоматизировать скачивание или если личный кабинет недоступен. Также можно скачать копию через личный кабинет.

Перед скачиванием копии

  1. Убедитесь, что включена двухфакторная аутентификация и активирован доступ по API.

  2. Установите клиент OpenStack и пройдите аутентификацию в проекте, в котором хранятся резервные копии. Для аутентификации используйте OpenStack RC-файл или другой способ получения токена.

  3. Узнайте и запишите Project ID проекта: он понадобится при работе через API и при скачивании файлов из VK Object Storage.

    Project ID не совпадает с идентификатором проекта в личном кабинете. Если вы прошли аутентификацию через OpenStack RC-файл, значение хранится в переменной OS_PROJECT_ID:

    echo $OS_PROJECT_ID

    Если переменная пустая, получите Project ID командой:

    openstack token issue -c project_id -f value

    Также Project ID можно узнать в личном кабинете. Сохраните его в переменную:

    export OS_PROJECT_ID=<ID_ПРОЕКТА>

    Здесь <ID_ПРОЕКТА> — Project ID проекта.

  4. Для работы через API установите jq и убедитесь, что установлена утилита curl.

  5. Создайте аккаунт VK Object Storage и получите его ключ доступа (Access Key ID и Secret Key), если это еще не сделано.

  6. Установите AWS CLI и настройте подключение к VK Object Storage.

  7. Узнайте адрес эндпоинта VK Object Storage для региона вашего проекта. Подробнее в разделе Подключение к VK Object Storage через CLI.

  8. Проверьте на тестовом диске, что все доступы работают.

1. Определите копии для скачивания

  1. Получите список резервных копий проекта:

    openstack volume backup list

    В столбце ID указан ID каждой копии. Чтобы получить копии только одного диска:

    1. Узнайте ID диска ВМ с помощью команды:

      openstack volume list

      ID диска также доступен в личном кабинете в разделе Облачные вычисления → Диски.

    2. Выполните команду:

      openstack volume backup list --volume <ID_ДИСКА>
  2. Узнайте статус, размер и тип копии, выполнив команду:

    openstack volume backup show <ID_КОПИИ>

    Здесь <ID_КОПИИ> — ID резервной копии из столбца ID в списке, полученном на предыдущем шаге.

    В выводе команды будет информация о резервной копии. Определите ее тип:

    • Полная копия: в поле name есть суффикс _full. Достаточно скачать только эту копию диска.
    • Инкрементальная копия: отображается параметр is_incremental. Скачайте всю цепочку: базовую полную копию и все инкрементальные копии после нее до нужной.
  3. Запишите ID всех копий цепочки по порядку, от полной к выбранной (для полной копии — один ID). Именно эти ID нужно будет подставить вместо <ID_КОПИИ> при скачивании.

  4. Узнайте и запишите точный размер диска в ГБ, так как он понадобится при сборке диска. Это можно сделать одним из способов:

    • По ID копии:

      openstack volume backup show <ID_КОПИИ> -c size -f value
    • По ID диска:

      openstack volume show <ID_ДИСКА> -c size -f value

2. Подготовьте машину для файлов копии

  1. Выберите рабочую машину с ОС Linux, на которую будут скачиваться файлы.
  2. Убедитесь, что на этой машине достаточно свободного места: под сжатый файл content каждой копии и под итоговый RAW-файл, размер которого равен размеру диска.

Сразу после сборки RAW-файл может занимать меньше места, но при копировании и конвертации он займет весь размер диска.

3. Скачайте файлы копий из VK Object Storage

Файлы копий хранятся в системном бакете volumebackups-<ID_ПРОЕКТА>. Имя папки совпадает с ID копии.

Для каждой копии выполните команду:

aws --endpoint-url <АДРЕС_S3> s3 cp s3://volumebackups-<ID_ПРОЕКТА>/<ID_КОПИИ>/ ./<ID_КОПИИ>/ --recursive

Здесь:

  • <АДРЕС_S3> — адрес эндпоинта VK Object Storage, например https://hb.ru-msk.vkcloud-storage.ru.

  • <ID_ПРОЕКТА> — Project ID проекта, который вы узнали ранее.

  • <ID_КОПИИ> — ID резервной копии:

    • для OpenStack CLI — значение из столбца ID;
    • для API — значение external_id.

Файлы сохранятся в структуре ./<ID_КОПИИ>/<файл>. Для каждой копии будет скачано пять файлов:

  • content,
  • object_segments,
  • volume_segments,
  • sha_list
  • volume_metadata.

Подробнее в разделе Перенос резервных копий дисков ВМ вне VK Cloud.

Если вы скачиваете цепочку копий, выполните команду для каждой копии цепочки.

4. Проверьте скачанные файлы

  1. Убедитесь, что в папке каждой копии находятся все пять файлов (content, object_segments, volume_segments, sha_list и volume_metadata), выполнив команду:

    ls -l ./<ПАПКА_КОПИИ>/

    Здесь <ПАПКА_КОПИИ> — папка, в которой находятся файлы копии.

  2. Если файл content скачан частями (content1, content2 и так далее), склейте их с натуральной сортировкой:

    cat $(ls ./<ПАПКА_КОПИИ>/content[0-9]* | sort -V) > ./<ПАПКА_КОПИИ>/content

    Здесь <ПАПКА_КОПИИ> — папка, в которой находятся файлы копии.

  3. Убедитесь, что файл content скачан полностью. Для этого в файле object_segments возьмите последний элемент и сравните сумму object_offset и object_length с размером файла content:

    python3 -I - <<'EOF'import json, osd = "./<ПАПКА_КОПИИ>"seg = json.load(open(os.path.join(d, "object_segments")))last = seg[-1]print("по карте:", last["object_offset"] + last["object_length"],      "файл:", os.path.getsize(os.path.join(d, "content")))EOF

    Здесь <ПАПКА_КОПИИ> — папка, в которой находятся файлы копии.

    Если числа не совпадают, файл скачан не полностью — скачайте копию заново.

Была ли статья полезна?