Pull to refresh

Дешевые облачные бекапы с шифрованием для дома

Reading time3 min
Views12K
Приветствую тебя, Хабраюзер! Я собираюсь тебе поведать об облачном хранилище C14 и о маленькой утилитке, облегчающей рутинную работу при работе с особенностями этого хранилища.
image

Забегая вперед скажу, что стоимость хранения 1 Тб составляет 2 евро в месяц. Это хранилище уже упоминалась ранее на Хабре: Ядерный бункер в Париже переоборудуют в дата-центр компании online.net

Хранилище C14


Если вы знакомы с C14, можете эту часть пропустить и перейти к следующей.

В online.net есть множество разнообразных услуг и несколько хранилищ. Нас интересует только C14. Берут деньги за хранение, удаление, открытие архива. Приблизительно оценить свои траты можете у них на сайте Под операциями подразумевается архивирование, удаление и открытие архива с файлами.

Предлагается следующая схема работы с хранилищем:

Мы можем в C14 создавать довольно много хранилищ (здесь, и далее по тексту это safe в их терминологии). У каждого хранилища может быть несколько архивов. Архив (archive) — это ос с ограниченным доступом. Подключиться можно через sshfs, rsync, scp, ftp, webdav. Архив доступен для подключения в течении 2, 5 или 7 дней, после этого он будет автоматически заархивирован и помещен очень глубоко в бункер. Если нужно будет восстановить данные — создастся новая ос и в папке /buffer окажутся все ваши ранее сохраненные файлы. При попытке изменить восстановленный архив — произойдет копирование содержимого и архив будет дополнен.

C14 Backup Tool


Пара слов о BackInTime
Так как BackInTime не работает в таких условиях (из-за того, что копирование жестких ссылок на файлы идет через удаленный сервер путем выполнения rsync через ssh), а автоматизации и сохранности данных в случае пожара хочется, я написал программку.

По началу я хотел поместить весь код в один файл, но реальность оказалась гораздо суровее, поэтому решил поделиться со всеми моим решением.

Что утилитка умеет:

  • Шифровать данные на стороне клиента.
  • Не бекапить указанные папки. Регулярные выражения rsync в этом случае доступны только в режиме без шифрования.
  • Автоматически создавать safe, архивы, помещать туда ключи доступа и удалять устаревшие архивы.
  • А также, создавать инкрементные бекапы в рамках одного архива для уменьшения стоимости хранения.
  • Каждый архив представляет собой полностью рабочий бекап. Поэтому их можно удалять без опасений (если в описании к архиву прописана хотя бы одна строка с датой успешного архивирования).
  • Писать большие и не очень логи по xmpp.
  • Не требует composer, если вам не нужны логи по xmpp.
  • Несколько профилей для копирования разного рода данных.
  • Не использует официальную программу для обращений к API
  • Сохраняет конфиг encfs в каждый архив с данными

Что она не умеет:

  • Досконально проверять конфиг и необходимые зависимости
  • Работать, если у вас больше 100 safe или больше 100 архивов в одном safe.

Установка


Для использования вам потребуется

rsync
encfs
sshfs
ssh


Для логов по xmpp вам потребуется composer (опционально)

Загрузка скрипта для тех у кого нет composer и ему не нужны логи по xmpp:

git clone https://github.com/TheSaturn/C14BackupTool.git
cd C14BackupTool
cp config.example.php config.php


Иначе:

composer create-project thesaturn/c14-backup-tool
cp config.example.php config.php


Настройка:


Зарегистрируйтесь в online.net. Добавьте платежные данные. Сгенерируйте ключи ssh (если у вас их еще нет) через ssh-keygen. Отредактируйте config.php: вам потребуется ввести API ключ, выбрать папки и т.д. Запустите скрипт (php /path/to/main.php profileName) и ждите сообщения об успешном завершении бекапа. Добавьте скрипт в cron по желанию

Шишки:


Запросы к API применяются не всегда мгновенно. Поэтому в коде есть принудительный sleep(). Монтирование по sshfs и подключение rsync тоже не всегда происходит с первого раза. Саппорт разводит руками и утверждает, что все нормально. Поэтому происходит несколько попыток соединиться с хранилищем.

Краткая версия алгоритма для тех кому хочется разобраться получше
  1. Отправка сообщения о начале процесса
  2. Нахождение safe с заданным именем
  3. Поиск архива в safe куда складывать бекапы, если последний открывался 6 дней назад, то создается новый на 7 дней
  4. Создание необходимых папок
  5. Монтирование encfs (зашифрованного представления фс)
  6. Имена файлов включенных и исключенных из бекапа, шифруются (иначе rsync не поймет)
  7. Монтирование хранилища
  8. Копирование конфига encfs
  9. Очистка папки для временного бекапа (в случае неудачного бекапа там могут находиться файлы)
  10. Создание жесткие ссылок из прошлого бекапа
  11. Отправка сообщения о начале настоящего бекапирования
  12. Rsync
  13. Переименование временной папки
  14. Запись информации о дате успешного создания бекапа в описание архива C14
  15. Отправка сообщения что все прошло удачно
  16. Размонтирование sshfs и encfs


Буду рад ответить на ваши вопросы. Ссылка на репозиторий.
Tags:
Hubs:
Total votes 17: ↑17 and ↓0+17
Comments9

Articles