Облачный бэкап за $2 или “5 терабайт должно хватить всем”

Давно размышлял о реализации бэкапа семейного цифрового наследия куда-нибудь в облако за символические деньги и вот увидел на Ибее предложение, от которого не смог отказаться: за пригоршню центов товарищи из развивающихся или даже вполне себе развитых стран предлагают “пожизненную” лицензию Microsoft OneDrive для бизнеса с объёмом доступного пространства аж в 5 терабайт.

Лирическое отступление о пользе бэкапов

Как известно, люди делятся на две группы: те, кто ещё не делает бэкапы и те, кто их уже делает. Если у вас есть RAID и по ночам вы спите спокойно - это ошибка. В сети полно историй, когда вовремя перестройки массива, потерявшего один из дисков, из строя следом за ним выходил и второй. Возможно из-за повышенной нагрузки, связанной с перераспределением всего объёма данных, а может просто у владельца хранилища была плохая карма.

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

Также наивно полагать, что единственный бэкап в Google Drive или Google Photos достаточно надёжен (и вам не нужно хранить цифровые негативы в формате RAW) - почитайте леденящие душу истории, когда люди в одночасье теряли всё из-за того, что автоматические системы Гугла решали забанить их аккаунт. Доказывать после наложения бана что ты не верблюд придётся тоже роботам, у которых терпения в отстаивании своей позиции по определению больше.

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

Как это работает

Технически это выглядит так: сразу после оплаты вам на электропочту присылают данные учётной записи аккаунта Office 365. Этот же аккаунт является почтовым адресом на странном домене который могла бы сгенерировать кошка, облюбовавшая клавиатуру хозяина. Домен также совпадает с именем организации, членом которой вы теперь являетесь. Можно пользоваться облачными приложениями офиса и загружать файлы. Можно поменять пароль от своей учётки и добавить телефон для связи, но другие свойства аккаунта заблокированы вашей “организацией”. Письма, приходящие на вашу новую почту, соответственно, падают в ваш облачный почтовый ящик Outlook.

Сразу скажу, что если мы хотим это использовать, нужно смириться с двумя моментами:

  • вы можете в любой момент потерять это место без объявления войны со стороны компании Microsoft по множеству не зависящих от вас причин
  • в любой момент времени заботливый продавец лицензии из Вьетнама, он же по совместительству руководитель и админ вашей “организации”, может наведаться в ваш аккаунт, чтобы хозяйским взглядом обозреть свои владения

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

Установка RClone

Утилита RClone существует практически под все платформы, мы выберем вариант с установочным скриптом, хотя есть даже Docker контейнер. Я пробовал установку с помощью скрипта из официальная инструкции, но мне ни разу не удалось заставить её работать.

curl https://rclone.org/install.sh | sudo bash

Поэтому установку я выполняю с помощью двух последовательных команд:

curl https://rclone.org/install.sh --output install.sh
sudo bash install.sh

Можно также скачать готовые исполняемый файлы с официального сайта.

Настройка RClone для OneDrive

Настройка RClone под OneDrive проста как железная дорога, за исключением одного момента: если вы устанавливаете её на удалённую машину, вам нужно будет найти машину с терминалом и монитором, чтобы авторизоваться в OneDrive и получить токен. Это несложно и можно сделать в том числе в Windows. Запускаем процесс создания конфигурации командой:

rclone config
  1. Выбираем New remote
  2. Name: вписываем имя для нашего remote, например, onedrive.
  3. Type of storage to configure: выбираем порядковый номер, соответствующий Microsoft OneDrive, или просто впечатываем onedrive
  4. client_id/client_sectret пропускаем нажатием кнопки Enter.
  5. Edit advanced config: пропускаем командой “Нет”
  6. Use auto config: если работаем на удалённой машине, отвечаем - нет. RClone предложит выполнить на любой локальной машине с монитором команду rclone authorize “onedrive”. Подойдёт даже машина с Windows, на которую можно распаковать архив с RClone, скачанный с официального сайта. Рекомендую запускать команду с перенаправлением вывода в файл, так как копировать из терминала многострочный токен развлечение так себе.

    rclone authorize “onedrive” > token.txt

    После того, как вы пройдёте авторизацию OneDrive (в браузере должно появиться сообщение Success!), полученный токен нужно скопировать из файла token.txt в окно терминала на удалённой машине.

  7. Choose a number from below, or type in an existing value: выбираем “OneDrive Personal or Business” в качестве типа хранилища

  8. Choose drive to use: завершаем конфигурацию выбором единственного хранилища из списка доступных.

Дальше утилита ещё пару раз спросит подтверждения правильности настроек, соглашаемся и заканчиваем эту нудную процедуру. Всё готово для того, чтобы начинать пользоваться OneDrive.

Базовые понятия RClone (очень кратко)

RClone оперирует понятием remote - это одно или несколько сконфигурированных вами хранилищ, в которые можно складировать драгоценные последовательности нулей и единиц командами copy и sync. Глобальная разница между этими командами в том, что copy добавляет новые файлы в приёмник (destination) и не удаляет исчезнувшие из источника (source), а команда sync старается сделать точную копию источника в приёмнике. Запускать sync и clone можно как в направлении с вашего компьютера в облако, так и из облака на локальный компьютер, автоматическая двухсторонняя синхронизация пока не поддерживается.

Добавление шифрования к ранее созданному remote делается путём создания специального типа remote с типом crypt, который в качестве носителя будет использовать уже имеющийся источник (например, наш onedrive). Больше информации можно подчеркнуть из официальной документации RClone, а ниже мы рассмотрим работу этой утилиты на примерах.

Загружаем файлы в облако и выгружаем их обратно

Создадим простое дерево папок для экспериментов.

> tree test_od/
test_od/
|-- file1
|-- folder1
|   -- file1.1
|-- folder2
    -- file2.2

Важно: команды copy и sync всегда копируют содержимое папки, которая указана в аргументе, сама папка автоматически не создаётся. Чтобы создать папку, нужно указать её имя в конце целевого пути, как в примере ниже:

> rclone sync test_od onedrive:test_od

Теперь попробуем прочитать содержимое облака:

> rclone ls onedrive:
        0 file1
        0 test_od/file1
        0 test_od/folder2/file2.2
        0 test_od/folder1/file1.1

Как видим, все файлы успешно скопировались в облако и уже упали на стол нашему вьетнамскому боссу. Удалим локальную папку и попробуем восстановить файлы обратно:

> rm test_od -r
> rclone sync onedrive:test_od ./test_od

Больше команд можно найти в официальной документации RClone.

Шифруемся

Чтобы добавить шифрование к нашему хранилищу, нужно создать ещё одно хранилище с типом crypt поверх существующего (onedrive):

rclone config
  1. Name: назовём наше хранилище secret
  2. Type of storage to configure: выберем тип хранилища crypt
  3. Remote to encrypt/decrypt: укажем, в какой папке папке хранилища onedrive будут лежать защищённые файлы: onedrive:secret
  4. How to encrypt the filenames: выберем стандартное шифрование имён файлов. Нужно учитывать, что оно увеличивает длину имени файла и может вызвать проблемы в тех хранилищах, где длина ограничена. Можно не шифровать имена файлов вообще или выбрать обфускацию, которая не добавляет секретности, но поможет сбить с толку кальмаров автоматические сканеры контента, которые работают на стороне облачного провайдера
  5. Option to either encrypt directory names or leave them intact: выберем “не шифровать имена папок”
  6. Password or passphrase for encryption: введём пароль для шифрования, его надо сохранить в надёжном месте на случай, если придётся переустанавливать RClone или устанавливать на другую машину
  7. Password or pass phrase for salt: дополнительная кодовая фраза, увеличивающая стойкость паролей к перебору. Рекомендуется ввести и сохранить в надёжном месте
  8. Password strength in bits: ставим рекомендуемые 128, параноики могут поставить 1024.

Конфигурация закончена, работа с зашифрованным хранилищем в общем случае не отличается от незашифрованного, детали и отличия можно посмотреть тут: https://rclone.org/crypt/

Пробуем сохранить зашифрованные файлы

Для тестовой загрузки файлов в облако попробуем команду:

> rclone sync test_od secret:test_od

Соответственно, чтобы восстановить:

> rm test_od -r
> rclone sync secret:test_od ./test_od

Остаётся только добавить команду запуска синхронизации в crontab, monit или другой шедулер вашей ОС и наслаждаться жизнью. Не забудьте только правильно обрабатывать ошибки программы и отправлять себе нотификации в случае проблем. Если будет интерес, можно попробовать настроить автоматический бэкап данных hassio с помощью контейнера RClone.

backup