Скачивание копии через OpenStack CLI и API
При использовании этого способа идентификаторы резервных копий определяются через OpenStack CLI или API Karboii, а файлы копий скачиваются напрямую из VK Object Storage через AWS CLI. Используйте этот способ, чтобы автоматизировать скачивание или если личный кабинет недоступен. Также можно скачать копию через личный кабинет.
-
Убедитесь, что включена двухфакторная аутентификация и активирован доступ по API.
-
Установите клиент OpenStack и пройдите аутентификацию в проекте, в котором хранятся резервные копии. Для аутентификации используйте OpenStack RC-файл или другой способ получения токена.
-
Узнайте и запишите 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 проекта. -
Для работы через API установите
jqи убедитесь, что установлена утилитаcurl. -
Создайте аккаунт VK Object Storage и получите его ключ доступа (
Access Key IDиSecret Key), если это еще не сделано. -
Установите AWS CLI и настройте подключение к VK Object Storage.
-
Узнайте адрес эндпоинта VK Object Storage для региона вашего проекта. Подробнее в разделе Подключение к VK Object Storage через CLI.
-
Проверьте на тестовом диске, что все доступы работают.
-
Получите список резервных копий проекта:
openstack volume backup listВ столбце
IDуказан ID каждой копии. Чтобы получить копии только одного диска:-
Узнайте ID диска ВМ с помощью команды:
openstack volume listID диска также доступен в личном кабинете в разделе Облачные вычисления → Диски.
-
Выполните команду:
openstack volume backup list --volume <ID_ДИСКА>
-
-
Узнайте статус, размер и тип копии, выполнив команду:
openstack volume backup show <ID_КОПИИ>Здесь
<ID_КОПИИ>— ID резервной копии из столбцаIDв списке, полученном на предыдущем шаге.В выводе команды будет информация о резервной копии. Определите ее тип:
- Полная копия: в поле
nameесть суффикс_full. Достаточно скачать только эту копию диска. - Инкрементальная копия: отображается параметр
is_incremental. Скачайте всю цепочку: базовую полную копию и все инкрементальные копии после нее до нужной.
- Полная копия: в поле
-
Запишите ID всех копий цепочки по порядку, от полной к выбранной (для полной копии — один ID). Именно эти ID нужно будет подставить вместо
<ID_КОПИИ>при скачивании. -
Узнайте и запишите точный размер диска в ГБ, так как он понадобится при сборке диска. Это можно сделать одним из способов:
-
По ID копии:
openstack volume backup show <ID_КОПИИ> -c size -f value -
По ID диска:
openstack volume show <ID_ДИСКА> -c size -f value
-
- Выберите рабочую машину с ОС Linux, на которую будут скачиваться файлы.
- Убедитесь, что на этой машине достаточно свободного места: под сжатый файл
contentкаждой копии и под итоговый RAW-файл, размер которого равен размеру диска.
Сразу после сборки RAW-файл может занимать меньше места, но при копировании и конвертации он займет весь размер диска.
Файлы копий хранятся в системном бакете 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.
- для OpenStack CLI — значение из столбца
Файлы сохранятся в структуре ./<ID_КОПИИ>/<файл>. Для каждой копии будет скачано пять файлов:
content,object_segments,volume_segments,sha_listvolume_metadata.
Подробнее в разделе Перенос резервных копий дисков ВМ вне VK Cloud.
Если вы скачиваете цепочку копий, выполните команду для каждой копии цепочки.
-
Убедитесь, что в папке каждой копии находятся все пять файлов (
content,object_segments,volume_segments,sha_listиvolume_metadata), выполнив команду:ls -l ./<ПАПКА_КОПИИ>/Здесь
<ПАПКА_КОПИИ>— папка, в которой находятся файлы копии. -
Если файл
contentскачан частями (content1,content2и так далее), склейте их с натуральной сортировкой:cat $(ls ./<ПАПКА_КОПИИ>/content[0-9]* | sort -V) > ./<ПАПКА_КОПИИ>/contentЗдесь
<ПАПКА_КОПИИ>— папка, в которой находятся файлы копии. -
Убедитесь, что файл
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Здесь
<ПАПКА_КОПИИ>— папка, в которой находятся файлы копии.Если числа не совпадают, файл скачан не полностью — скачайте копию заново.