Резервное копирование на Аmazon S3 для начинающих

Давно хотел организовать дублирование на S3 ключевых личных файлов, и вот наконец собрался. Готового решения с толковой статьей на русском языке навскидку найти не удалось, так что пришлось вспоминать английский, благо — все оказалось не просто, а очень просто.

Этот короткий материал ориентирован на «самых-самых маленьких» пользователей Linux и служит целью показать, насколько легко и просто организовать резервное копирование на сервера Amazon S3.



Подразумевается, что у вас уже есть рабочий аккаунт на S3 (если нет — вам сюда или сюда) и минимальные знания консоли и любого текстового редактора.

От себя кратко скажу, что Amazon S3 — это неограниченное по объему хранилище для ваших данных в Интернете. Сервис платный, но при небольших объемах (порядка нескольких сот мегабайт) обходится в считанные рубли (максимум — десятки рублей) в месяц.

Также считаем, что свежие бэкапы вы делаете (а старые, соответственно, удаляется), и хранятся они в /home/backup.

Наша задача: каждую ночь (день, вечер), после того, как все новые бэкапы будут сделаны, копировать их на S3, а также удалять оттуда старые — те, которых в /home/backup больше нет (мы же чистим совсем старые бэкапы, верно?).

После недолгих поисков в Интернете я наткнулся за замечательную программу s3sync на Ruby, которая оказалась в состоянии сделать все, что требуется.

Первым делом устанавливаем Ruby:

Fedora: yum install ruby

Debian: sudo apt-get install ruby-full
Centos: yum install -y ruby
(Спасибо mikhailov)

Далее скачиваем и распаковываем s3sync:

wget s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
tar vxzf s3sync.tar.gz


Создаем bash скрипт, который и будем запускать по крону:

vim go-s3sync-backup.sh

#/bin/sh
export AWS_ACCESS_KEY_ID=[ваш AWS_ACCESS_KEY_ID]
export AWS_SECRET_ACCESS_KEY=[ваш AWS_SECRET_ACCESS_KEY]
/home/user/s3sync/s3sync.rb --delete -r /home/backup/ [имя корзины на S3]:my-backup


chmod +x go-s3sync-backup.sh

Результатом работы скрипта будет папка my-backup в указанной корзине на S3 с вашими резервными копиями.

Первыми двумя параметрами мы задает данные для авторизации на S3 — можно их также указать в XML файле, но поместить их в переменные окружения — проще.

  • --delete служит для удаления с S3 тех файлов, которые отсутствуют в локальной папке
  • -r включает рекурсивный обход папок


Вот еще несколько полезных ключей:
  • --progress позволяет увидеть ход выполнения операции
  • -n позволяет увидеть, что планирует делать скрипт, не выполняя при этом самих действий (эдакий отладочный режим)


Добавляем наш скрипт в крон (скажем, пусть работает каждый день в 7 утра)

0 7 * * * /home/user/go-s3sync-backup.sh

Для очистки совести можно протестировать скрипт ручками и лишний раз проверить права доступа к используемой корзине (папке) на S3 — и можно спать со спокойной душой — ваши данные в надежном месте.

Спасибо всем прочитавшим, любые замечания и поправки приветствуются!
+43
19 октября 2009, 00:09
58
casey 28,3

комментарии (28)

0
casey #
За что минусуете, товарищи? Не поленитесь написать, будьте добры :-)
+1
Andrey_Rogovsky #
А в какую сумму будет примерно 2G для бекапа?
+3
TMC #
aws.amazon.com/s3/#pricing там копейки вообще…
0
mikhailov #
я плачу не более, чем 50 центов за гиг в месяц
0
PsySonic #
Из любопытства: а какие пользовательские преимущества у S3 перед dropbox и ubuntuOne, которые 2гб так дают?
+1
Dexter_Holland #
Dropbox, к слову, на S3 и держит файлики. Есть мнение что ubuntuOne тоже.
НЛО прилетело и опубликовало эту надпись здесь
0
theproof #
Вот тут дядя Федор расписал бесплатный вариант, + комменты очень полезные
habrahabr.ru/blogs/sysadm/63617/
0
DenisO #
А на php ничего такого нету? На сервере ruby только под это дело поднимать смысла нет. А использовать для серверных резервных копий хотелось бы.
0
david_mz #
Там протоколы элементарнейшие. Ну и конечно, есть библиотеки на всех языках. Только надо чуть-чуть поискать:)
0
xReaper #
backuppc
0
casey #
Так ruby установил — и забыл про него, он в памяти не висит, кушать не просит. Почему бы и нет :-)
0
mikhailov #
на руби есть достаточное количество скриптов, например, amazon aws rightscale многие скрипты написаны на руби. все, что нужно сделать, это выполнить следующее:
Debian: sudo apt-get install ruby-full
Centos: yum install -y ruby
–1
dei34 #
опять велосипедисты понаехали.
для «резервного копирования на AmazonS3» и где угодно ещё есть duplicity, а для «начинающих» ещё и графическая морда к нему deja-dup.
–1
Gorthauer87 #
Имея вполне неиллюзорное место на сервере и доступ туда по FTP могу сделать куда больше, чем может мне предоставить Amazon, так что мимо
0
mikhailov #
к хранилищу amazon s3 можно обратиться по http, используя wget, либо любой браузер
amazon s3 является вебсервисом, со всеми вытекающими вкусностями
–1
differentlocal #
Dropbox выглядит интереснее.

Чисто теоретически можно использовать бесплатный пакет Google AppEngine, но это извращение. :)
0
crash #
плюс он хранит данные там же
+1
z_z #
пруф?
+1
crash #
developer.amazonwebservices.com/connect/entry!default.jspa?categoryID=89&externalID=1955&fromSearchPage=true
+1
z_z #
Ааа, я думал ты про аппенжин :))
+1
mikhailov #
я предпочитаю глобальный файл настроек /etc/s3config/s3config.yml вместо импорта ключей при каждом запуске ключа. кстати, приведу пример моего скрипта www.railsgeek.com/2009/8/11/backup-shell-script-for-my-rails-applications
0
Busla #
Т.е. чтобы в удалённом хранилище были актуальные резервные копии, я должен обеспечить локальную целостность архивов… Какой смысл тогда вообще в удалённом хранилище? — Подобная реализация создаёт лишь видимость полноценного резервирования.
0
DMakeev #
Смысл в удаленном хранилище возникает когда:
— проблемы с местом на своем сервере/хостинге.
— свой сервер/хостинг не оборудован Raid1/Raid5 и смерть жесткого диска приведет к смерти и бэкапов в том числе.

Частично это можно решить копированием бэкапа на свою локальную машину, но это не всегда возможно/удобно (например когда размер бэкапа переваливает за второй десятко гигов).
0
casey #
Удаленное хранилище полезно для домашних бэкапов — мало ли, вдруг ноутбук утащат или винт сгорит :-)
0
DMakeev #
Для домашних бэкапов нужнее web-интерфейс внятный + софтинка кроссплатформенная с GUI — немного найдется самураев которые будут ставить Ruby на свою машину чтобы автоматизировать домашний бэкап ))
0
casey #
У меня основная ОС — Vista, разрабатываю на виртуальной машине с Linux. Все важные виндовые файлы бэкапаю на виртуалку, там бекапятся рабочие проекты, а оттуда уже запускается синхронизация с S3.

Такая схема нужна, т.к. много времени прогаю в автобусах/поездах и нужно чтобы все было «всегда с собой» :-)
0
mikhailov #
я предпочитаю делать бэкапы с текущей датой и складывать на amazon s3. попутно бэкаплю либо на внешний винт, либо на болванки. В конце концов все сразу ни потеряется, ни сломается, ни нароется.
все эти накладные расходы меня ни в коей мере не пугают, а, наоборот, экономят мои нервы, когда я работаю над коммерческими проектами и потеря любой части данных равноценно пожару в квартире

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.