Гарантия целостности данных с помощью Python Boto и Amazon Glacier concurrent.ConcurrentUploader?

Я использую Python и Boto в сценарии, чтобы скопировать несколько файлов с моих локальных дисков, преобразовать их в файлы .tar и загрузить в AWS Glacier.

Я основывал свой сценарий на: http://www.withoutthesarcasm.com/using-amazon-glacier-for-personal-backups/#highlighter_243847

Который использует concurrent.ConcurrentUploader

Мне просто любопытно, насколько я могу быть уверен, что все данные находятся в Glacier после успешного получения идентификатора? Выполняет ли concurrentUploader какую-либо проверку хэшей, чтобы гарантировать получение всех битов?

Я хочу удалить файлы с моего локального диска, но опасаюсь, что мне следует внедрить какую-то проверку хэша... Я надеюсь, что это происходит под капотом. Я попытался и успешно восстановил пару архивов и смог их распаковать. Просто стараюсь быть очень осторожным.

Кто-нибудь знает, есть ли под капотом проверка того, что все куски передачи были успешно загружены? Если нет, есть ли у кого-нибудь пример кода на Python, как реализовать загрузку с проверкой хэша?

Большое спасибо!

Документация Boto Concurrent Uploader: http://docs.pythonboto.org/en/latest/ref/glacier.html#boto.glacier.concurrent.ConcurrentUploader

ОБНОВЛЕНИЕ: просмотр фактического кода Boto (https://github.com/boto/boto/blob/develop/boto/glacier/concurrent.py) строка 132 показывает, что хэши вычисляются автоматически, но я не понимаю, что

[None] * total_parts

означает. Означает ли это, что хэши действительно вычисляются, или это остается на усмотрение пользователя?


person dcoffey3296    schedule 09.02.2014    source источник


Ответы (2)


Сам Glacier разработан таким образом, чтобы сделать невозможным выполнение многокомпонентной загрузки каким-либо приложением без гарантии целостности данных.

http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-complete-upload.html

Вызов API, который возвращает идентификатор архива, отправляется с «хэшем дерева» — sha256 хэшей sha256 каждого МиБ загруженного контента, рассчитанным как объединение дерева в один хеш — и общим количеством загруженных байтов. Если они не соответствуют тому, что было фактически загружено в каждой части (которые тем временем также проверялись на соответствие хэшам sha256 и хэшам поддеревьев по мере их загрузки), то операция «полное составное» завершится ошибкой.

В соответствии с дизайном Glacier API должно быть практически невозможно, чтобы приложение «успешно» загрузило поврежденный файл и при этом вернуло идентификатор архива.

person Michael - sqlbot    schedule 09.02.2014

Да, параллельный загрузчик вычисляет хеш-дерево каждой части и линейный хэш всей загруженной полезной нагрузки. Линия:

[None] * total_parts

просто создает список, содержащий total_parts количество None значений. Позже значения None заменяются соответствующим хэшем дерева для конкретной части. Затем, наконец, список хеш-значений дерева используется для вычисления окончательного линейного хэша всей загрузки.

Таким образом, в соответствии с требованиями Glacier API выполняется множество проверок целостности.

person garnaat    schedule 09.02.2014