Инкрементное резервное копирование сервера на AWS Glacier

Я ищу для резервного копирования различных каталогов и файлов с сервера Linux на AWS Glacier. Я пытаюсь проработать детали того, как это сделать.

Инкрементные резервные копии

Я хочу загружать файлы постепенно. По сути, если файл не изменился, я не хочу загружать его снова в Glacier, если он там уже существует. Я думаю, что я понял эту часть. Поскольку вы не можете получить мгновенные списки архивов в хранилище Glacier, я буду хранить локальную базу данных загруженных файлов, чтобы иметь возможность определить, что существует в хранилище, а что нет. Это позволит мне делать инкрементные резервные копии (загружать только отсутствующие или измененные файлы).

Не можете перезаписать файлы?

Согласно ( http://aws.amazon.com/glacier/faqs/):

Архивы, хранящиеся в Amazon Glacier, являются неизменяемыми, то есть архивы можно загружать и удалять, но нельзя редактировать или перезаписывать.

Так что же произойдет, если я загружу файл / архив, а затем файл будет изменен локально, и в следующий раз, когда я сделаю резервную копию, как Glacier справится с этим, поскольку не может перезаписать файл новой версией?

Удаление старых данных

AWS взимает плату в размере 0,03 долл. США за ГБ за удаление архивов, срок хранения которых менее 3 месяцев. Поскольку я делаю резервную копию локального сервера, я хочу удалить архивы, которые больше не существуют локально. Каков наилучший способ организовать это. Используйте локально сохраненные архивные данные, чтобы определить, какие данные больше не существуют, и, если им> 3 месяца, удалить их из Glacier? Это кажется простым, но есть ли лучший подход к этому?

Отдельные файлы против файлов TAR/ZIP

Вы можете загружать либо отдельные файлы в виде архивов, либо повысить эффективность, сгруппировав файлы в файлы TAR или ZIP перед загрузкой. Идея файлов TAR/ZIP привлекательна, потому что она делает ее более простой, и вы несете меньшую плату за хранение, но мне интересно, как бы я справился с добавочной загрузкой. Если загружен файл ZIP размером 20 МБ, содержащий 10000 файлов, и один из этих файлов изменяется локально, нужно ли загружать еще один файл ZIP размером 20 МБ? Теперь мне нужно съесть стоимость хранения 2 копий почти всего в этих zip-файлах... Кроме того, как бы я справился с удалением вещей в ZIP-файле, которые больше не существуют локально? Поскольку я не хочу удалять весь zip-файл, теперь я несу плату за хранение файлов, которые больше не существуют.

Может быть, я все это обдумываю. Каковы наиболее простые способы решения этих вопросов?

Я не знаю, имеет ли это значение или нет, но я использую PHP SDK для этого скрипта резервного копирования. Кроме того, я не хочу сначала загружать данные в корзину S3, а затем делать резервные копии корзины в Glacier, поскольку теперь мне придется также платить за хранение и передачу S3.

3 ответа

Так что же произойдет, если я загружу файл / архив, а затем файл будет изменен локально, и в следующий раз, когда я сделаю резервную копию, как Glacier справится с этим, поскольку не может перезаписать файл новой версией?

Согласно Glacier FAQ:

Вы храните данные в Amazon Glacier в виде архива. Каждому архиву присваивается уникальный идентификатор архива, который впоследствии можно использовать для извлечения данных. Архив может представлять собой один файл, или вы можете объединить несколько файлов для загрузки в один архив. Вы загружаете архивы в хранилища. Хранилища - это коллекции архивов, которые вы используете для организации ваших данных.

Так что это означает, что каждому загружаемому файлу присваивается уникальный идентификатор. Загрузите один и тот же файл дважды, и каждая копия файла получит свой собственный идентификатор. Это дает вам возможность восстановить предыдущие версии файла при желании.

Используйте локально сохраненные архивные данные, чтобы определить, какие данные больше не существуют, и, если им> 3 месяца, удалить их из Glacier? Это кажется простым, но есть ли лучший подход к этому?

Чтобы избежать дополнительной платы за удаление данных менее 3 месяцев, это, вероятно, лучший подход. Но вам нужно будет отслеживать и удалять не только те данные, которых больше не существует. Как упоминалось выше, каждый раз, когда файл изменяется и вы повторно загружаете его в Glacier, вы получаете новый идентификатор для файла. В конечном итоге вы также захотите удалить более старые версии файла, при условии, что не хотите восстанавливать эти более старые версии.

Если загружен файл ZIP размером 20 МБ, содержащий 10 000 файлов, и один из этих файлов изменяется локально, нужно ли загружать еще один файл ZIP размером 20 МБ? Теперь мне нужно съесть стоимость хранения 2 копий почти всего в этих zip-файлах... Кроме того, как бы я справился с удалением вещей в ZIP-файле, которые больше не существуют локально? Поскольку я не хочу удалять весь zip-файл, теперь я несу плату за хранение файлов, которые больше не существуют.

Это компромисс, который вы действительно должны решить для себя. Делайте ли вы tar/zip все, а затем будете вынуждены отслеживать эти файлы и все в них, или это стоит того, чтобы вы загружали файлы по отдельности, чтобы вы могли очистить их по отдельности, так как они больше не нужны.

Пара других подходов, которые вы могли бы рассмотреть:

  • Иметь два или более архива tar/zip, один из которых содержит файлы, которые вряд ли будут изменены (например, системные файлы), а другой (и) содержит файлы конфигурации и другие вещи, которые с большей вероятностью изменятся со временем.
  • Не беспокойтесь о отслеживании отдельных файлов и сохраняйте все в одном архиве tar/zip, который загружается в Glacier. Когда каждый архив достигает 3-месячной точки (или, возможно, даже позже), просто удалите его. Это дает вам очень простой способ отслеживать и восстанавливать данные в определенный момент времени.

Сказав все это, однако, Glacier просто не может быть лучшим подходом для ваших нужд. Glacier действительно предназначен для архивирования данных, который отличается от простого резервного копирования серверов. Если вы просто хотите делать инкрементное резервное копирование сервера, лучше использовать S3 вместо Glacier. Использование таких инструментов, как Duplicity или rdiff-backup (в сочетании с чем-то вроде s3fs), даст вам возможность делать инкрементные резервные копии в корзину S3 и очень легко управлять ими. За эти годы я использовал rdiff-backup на нескольких системах linux и обнаружил, что он работает довольно хорошо.

Вот инструмент командной строки для *nix, который поддерживает загрузку только измененных файлов, замену локально измененных файлов и удаление локально удаленных файлов из Glacier https://github.com/vsespb/mt-aws-glacier

В качестве альтернативы вы можете использовать что-то вроде Duplicity, а затем загрузить архивы, которые он создает.

Это имеет несколько преимуществ:

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

Самый простой способ использовать Duplicity с Glacier:

  • Сделайте резервную копию в локальном каталоге где-нибудь (и сохраните эту резервную копию). Duplicity нуждается в доступе к своему "манифестному" файлу при каждом запуске резервного копирования, чтобы он мог сказать, какие файлы были изменены.
  • Загрузите любые новые архивы, созданные Duplicity в Glacier, из локальной резервной копии. Используйте что-то вроде glacier-cmd для этого.
Другие вопросы по тегам