Сегодня я покажу вам, как запустить полноценный резервный сервер на рутованном телефоне Android с помощью UrBackup и Linux Deploy. Пластиковый мусор уже заполонил все вокруг, а в добавок к нему очередной глобальной эко-проблемой становятся еще и электронные отходы. Так зачем выбрасывать прекрасный, пусть даже потрескавшийся и поношенный, телефон?
К тому же этот старый телефон:
- Вероятно, даже не настолько стар (покупаете ли вы новый ПК каждые 1-2 года?).
- Возможно, снабжен 4-8 ядрами и ~4Гб ОЗУ, а также определенно имеет встроенный ИБП.
Подключите к нему внешний винчестер, и он станет отличным кандидатом на резервную систему для всей домашней сети!
Предупреждение: это проект из разряда «потому что могу». И поскольку здесь мы все-еще работаем с Android, то, помимо ряда ограничений, нам также потребуется обойти несколько препятствий. Это решение станет не самым простым способом создания бэкапа для домашней сети, как и не лучшим вариантом использования UrBackup. И все же! Как только настройка будет завершена, вы получите очень простой способ управления резервными копиями для нескольких машин, а также добавления хранилища.
Список ограничений этой конфигурации
pkill
. Кроме этого, мы добавим cronjob@reboot
для ее запуска при загрузке.
.deb
). Вы без проблем можете пробовать и другие доступные дистрибутивы, но тогда вам придется компилировать пакет установки из их исходного кода. (инструкции можно найти на странице скачивания).
Надежность и безопасность
chroot
. По сути, это песочница, но когда вы даете Linux Deploy root-доступ, то расширяете размер песочницы, охватывая большинство закоулков системы телефона. Самая серьезная уязвимость будет исходить из рутованной ОС Android в связи с недостатком обновляемых патчей безопасности. Некоторые телефоны можно обновлять после получения root-доступа, но тогда после обновления придется делать рутинг повторно.
При условии, что вы отключаете все возможные разрешения и службы, а также избегаете использования интернета из ОС Android, поверхность атаки остается очень узкой (по сути, ограниченной любой оставшейся фоновой службой, не допускающей отключение). Чтобы сохранить устройство в безопасности, следует поддерживать актуальность экземпляра Debian с помощью apt update && apt upgrade
и рассмотреть вариант установки антивируса, как и на любой другой сервер. И все же, эта конфигурация не отличается высокой безопасностью. Если вам нужна глубокая защита на каждом уровне домашней сети, то она вам не подойдет.
Для избежания перегрева устройства следует разместить его в хорошо вентилируемом месте, отслеживать загрузку сервера, а также использовать качественную зарядку. Если телефон вдруг нагреется до горяча, отключите его и подумайте об увеличении интервалов между бэкапами, чтобы снизить нагрузку. Если телефон горячий постоянно, то лучше будет подыскать для сервера другое устройство. Как и с любым обычным сервером, добавьте в список его периодического обслуживания аппаратные проверки.
План
Если вы все еще здесь, то вот наш план действий:
- Получить root-права на телефоне. Я не стану вдаваться в подробности по этому пункту, а просто направлю вас к инструкции Magisk (англ.), где все это подробно расписано.
- Установка Linux Deploy и развертывание Debian Buster.
- Установка UrBackup Server.
- Подключение клиентов.
Учтите, что в этом руководстве я буду принимать очень специфичные решения в отношении конфигурации, большинство из которых нацелены на наладку работы с Debian и Android в среде chroot
.
Требования
Опять же направлю вас к Magisk для рутинга телефона. Вот некоторые советы:
— Убедитесь, что используете файл boot.img
, связанный с текущей версией загрузчика вашего телефона.
— Если устройство работает на Android 11, и процедура Magisk не сработала, понизьте версию ОС до Android 10 и повторите попытку. Я убил целый день, воюя с Android 11 на своем Pixel 4a.
— Если вы не хотите использовать именно Magisk, будьте ОЧЕНЬ осторожны с другими аналогичными инструментами. Как показывает практика, многие приложения на рынке оказываются шпионскими или вирусными. Могу посоветовать еще CF-Auto-Root, но скачивать этот инструмент нужно только с проверенного ресурса.
chroot
.Скачайте последнюю версию с GitHub. Версия в Play store больше не обслуживается.
Скачайте ее с GitHub. Версия в Play store больше не обслуживается.
Дополнительное оборудование (рекомендуется)
Несмотря на то, что, в принципе, бэкапы можно сохранять на SD-карте, делать это НЕ желательно. SD-карты медленнее, менее надежны и не могут обрабатывать процедуру записи в течение длительного времени. Если вы планируете сделать резервную копию на SD-карту, то сразу имейте в виду, что в течение года она даст сбой (а при большом объеме данных даже в течение месяца).
Шаг 1. Установка Linux Deploy и развертывание Debian Buster
A. С рутованного телефона перейдите на GitHub и скачайте .apk
пакеты для Linux Deploy и BusyBox. Установите эти приложения.
B. После установки откройте BusyBox. Выберите Install
. По завершению обратите внимание, куда установилась BusyBox. В данном случае мы видим, что установка произведена в /system/xbin
. Этот путь вам потребуется позже.
C. Откройте Linux Deploy и перейдите в настройки через иконку в нижнем правом углу.
c. Настройте следующее:
${EXTERNAL_STORAGE}/linux.img
. Это ваша SD-карта, и вы можете оставить все так, если хотите (работает для Raspberry Pi). Однако, если SD-карты в телефоне нет, или она неверно отформатирована, то установка провалится. Я рекомендую устанавливать во внутреннее хранилище, как сам делаю в этом примере. Полагаю, что вы не станете использовать телефон для чего-то еще, поскольку он должен будет оставаться подключенным постоянно.
sysv
, то cronjobs
не будут запускаться при загрузке.
Все, что вы смонтируете здесь, будет непосредственно доступно при загрузке, но не будет доступно для разбиения по разделам и форматирования. Тем не менее учитывайте, что имя вашего блочного устройства (/dev/block/sdX
) при перезагрузке телефона может измениться, в случае чего вам понадобится проверить/изменить конфигурацию. Если же вы смонтируете логический том, то его имя уже не изменится, и о проверке вам беспокоиться не придется.
/dev/block/sdX
(в противоположность /dev/sdX
). Чтобы выяснить, какое из sdX
устройств является внешним блочным устройством, подключите его и выполните на сервере команду lsblk
. Затем просмотрите все устройства и обратите внимание, какое из них совпадает с вашим (в плане объема/существующих разделов). Если вы подключили устройство после загрузки, то оно скорее всего окажется последним.
Примечание: после того, как блочное устройство будет смонтировано, перед последующим физическим отключением его необходимо будет сначала размонтировать или отключить сервер. Отсоединение без размонтирования скорее всего приведет к утрате содержащихся на нем данных.
D. Вернитесь обратно на экран приветствия и выберите верхнее левое меню. Далее выберите Settings
и промотайте вниз до PATH variable
. Именно здесь нужно установить путь установки BusyBox из шага 1.B. После установки PATH variable
выберите Update ENV
.
E. Вернитесь на экран приветствия и выберите верхнее правое меню. Жмите Install
. Перед вами отобразится живой лог установки. По завершению в конце лога будет прописано deploy
. Выберите START
в нижнем левом углу экрана. Теперь у вас на телефоне запущен сервер Debian!
Шаг 2. Установка сервера UrBackup
A. Подключитесь к только что развернутому серверу по SSH.
IP-адрес будет тот же, что и у телефона, порт будет 22, а авторизоваться вы сможете с помощью учетных данных, установленных в шаге 1.с. Оставшаяся часть руководства предполагает, что вы авторизованы как корневой пользователь. Свой IP можете увидеть, открыв Linux Deploy:
B. Обновите систему:
apt update && apt upgrade -y && apt install wget
C. Скачайте пакет .deb
для UrBackup:
wget https://hndl.urbackup.org/Server/2.4.13/urbackup-server_2.4.13_arm64.deb
Это последняя стабильная версия на момент написания. Возможные обновления можете посмотреть на странице скачивания.
D. Установите пакет:
apt install -f ./urbackup-server_2.4.13_arm64.deb
В ходе установки система спросит, где должна размещаться резервная директория.
Запомните ее путь для следующего шага. Если вы уже смонтировали хранилище в шаге 1.c, установите в качестве этого пути точку монтирования.
E. Создание директории для бэкапа.
В этом примере я установлю директорию как /mnt/backup
. Если вы смонтировали хранилище ранее, то директория уже будет существовать. Если же нет, создайте ее:
mkdir -p /mnt/backup
Обновите разрешения:
chown urbackup /mnt/backup
chgrp urbackup /mnt/backup
(Так UrBackup сможет производить запись в эту директорию.)
F. Установка скрипта запуска.
В среде chroot
мы не сможем вызывать systemd
, поэтому потребуется запускать эту службу вручную:
/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
Но вместо того, чтобы вводить это постоянно, мы просто создадим скрипт:
nano /usr/bin/urbackupsrv-start
Скопируйте его в файл:
#!/bin/sh
/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
Сохраняемся и выходим.
Определите разрешения:
chmod 755 /usr/bin/urbackupsrv-start
G. Запустите службу:
urbackupsrv-start
Это приведет к появлению лога запуска сервера. Нажатие CTRL-C остановит службу, поэтому откройте еще одну сессию SSH.
Для остановки службы нужно будет просто ее завершить:
pkill urbackup
H. Добавление cronjobs
.
Поскольку мы не можем «активировать» службу UrBackup стандартным способом, то установим задачу cron
для запуска при загрузке. В добавок к этому, если вы в дальнейшем отключите внешнее хранилище или перезагрузите телефон, то разрешения для резервной директории могут отмениться. Чтобы гарантировать их установку при загрузке мы добавляем cronjobs
:
Откройте crontab
:
crontab -e
Добавьте эту задачу:
@reboot chown urbackup [full/path/to/backup_directory] && chgrp urbackup [full/path/to/backup_directory] && urbackupsrv-start
Сохраните и выйдите.
I. Перейдите в веб-интерфейс.
В браузере перейдите на порт 55414 сервера: YOUR_SERVER_IP:55414
Все работает!
Шаг 3. Подключение клиентов
A. В нижней правой части окна состояния кликните Add new client
:
B. Выберите Add new Internet client/client behind NAT
и введите имя клиента:
Им должно быть имя хоста нового клиента.
C. Установка клиента.
- Для клиентов Windows:
Скачайте установщик по ссылке «Download preconfigured client installer for Windows» и следуйте его инструкциям.
- Для клиентов Linux:
Обратите внимание на «Default authentication key» вверху. Он вам понадобится.
Авторизуйтесь на клиенте и запустите скрипт установки (НЕ запускайте скрипт, предоставленный сервером):
TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.4.11/UrBackup%20Client%20Linux%202.4.11.sh" -O $TF && sudo sh $TF; rm -f $TF
(Проверьте наличие последних версий клиентов здесь).
В процессе установки скрипт попросит выбрать механизм сохранения снимков состояния. Введите 2 для «LVM — Logical Volume Manager snapshots»:
Я попробовал использовать dattobd, но постоянно сталкивался с разными ошибками. Учитывайте, что вам нужно будет установить dattobd и на сервер, и на клиентов. При этом сервер и клиенты должны быть с ним совместимы. Для установки dattobd на устройство Android (ARM64) вам придется скомпилировать исходный код, в чем я не преуспел. Тем не менее у вас может оказаться другой случай, в зависимости от модели телефона или используемого дистрибутива. Мне также не удалось установить его в Ubuntu 20.10, при том что с Ubuntu 20.04 все получилось отлично.
По завершению установки убедитесь, что клиент запущен:
service urbackupclientbackend status
Если не запущен, запустите:
service urbackupclientbackend start
В завершении подключите клиента к серверу:
urbackupclientctl set-settings
-k internet_mode_enabled -v true
-k internet_server -v "YOUR_SERVER_IP"
-k internet_server_port -v "55415"
-k computername -v "YOUR_CLIENT_NAME"
-k internet_authkey -v "YOUR_DEFAULT_AUTHENTICATION_KEY"
Убедитесь, что именем хоста, настроенным на шаге 3.B, является YOUR_CLIENT_NAME
, а ранее сгенерированным сервером ключом YOUR_DEFAULT_AUTHENTICATION_KEY
.
D. Настройка сервера.
Вернитесь в веб-интерфейс. Здесь вы можете обнаружить, что клиент не подключен. Кликните Settings
в верхней панели навигации:
В Settings
перейдите на вкладку Internet
и убедитесь, что установлено следующее:
Если у вас все клиенты локальные, то можете убрать галочки Do image backups over the internet
и Do full file backups over the internet
.
Промотайте вниз и кликните Save
.
E. Настройка директории резервного копирования:
Здесь же в Settings
кликните Client settings
. Отметьте Separate settings for this client
, а в строке Default directories to backup
вкладки File Backups
укажите директории для резервного копирования.
Можно добавить несколько директорий через ;
.
Здесь также настравиваются интервалы резервного копирования.
Кликните Save
внизу.
Для клиентов Linux это также можно настроить из командной строки клиента:
urbackupclientctl add-backupdir -d FILE_PATH
Перезапустите сервер:
pkill urbackup
urbackupsrv-start
F. Вернитесь в веб-интерфейс.
Теперь клиент должен быть подключен. В блокеFile backup status
может отобразиться No paths to backup configured
, но это нормально. Такое сообщение будет отображаться до завершения первого резервного копирования. Также имейте ввиду, что если вы подключили клиента Linux, то бэкапы образов поддерживаться не будут. Тем не менее вы можете просто сделать резервный образ с клиента Linux и указать директорию этих образов для резервного копирования сервером.
Можно запускать первое резервное копирование!
Продолжение следует...
Если вы уже подключили хранилище и довольны конфигурацией, то на этом все. Если же вы хотите добавить хранилищу гибкость, то жду вас в Части 2. LVM (менеджер логических томов) позволяет добавлять или удалять хранилище без необходимости переноса данных на другое устройство хранения. Вы можете просто добавить нужный объем хранилища или удалить его неиспользуемую часть, которую хотите задействовать где-то еще. В Части 2 мы в основном будем работать с LVM. Это хоть и не сложно, но все равно является определенным процессом.
Советы
2. Будьте осторожны с обновлениями Android. При успешном выполнении они скорее всего отменят root-доступ к устройству, и рутинг придется делать повторно. Если же вы хотите произвести обновление, то сохраните резервную копию файла .img
, который Linux Deploy создала для контейнера Linux. Если в итоге вы полностью зачистите телефон, то достаточно будет переустановить Linux Deploy и сопоставить ее с резервным образом.
3. Поскольку вы не сможете обновлять телефон часто, то следует ограничить использование ОС Android. Не заходите в браузеры и не скачивайте лишние приложения, чтобы ограничить связь устройства с интернетом. Вы можете (даже рекомендуется) поддерживать версию Debian обновленной и использовать интернет по необходимости.
Wake Lock
. Найти его можно, нажав на верхней левой иконке настроек и перейдя в Settings
. Обратите внимание, что эта функция действует только, когда приложение открыто.
2. Если вам потребуется перезагрузить образ контейнера, просто убедитесь, что расположение целевого образа (.img
) установлено в Installation path
в Properties
. Найти этот пункт можно через нижнюю левую иконку настроек. Убедитесь, что указанный в свойствах дистрибутив совпадает с дистрибутивом файла .img
. Если он не совпадает, Linux Deploy перезапишет файл .img
с настройками из Properties
. Затем вернитесь на основной экран и выберите из верхнего правого меню Install
.
apt-get remove --purge urbackup-server
Для деинсталляции клиента UrBackup выполните:
uninstall_urbackupclient
pkill urbackup
Выполните очистку:
urbackupsrv cleanup -a 0%
И снова запустите UrBackup:
urbackupsrv-start
Если вы делаете бэкап директорий внутри контейнера, то в логах сервера может возникнуть ошибка «Volume group „root“ not found», и создание резервной копии также закончится с ошибками. Ничего страшного, если ваши бэкапы остаются нетронутыми. Так как клиент UrBackup запускается из контейнера, он не сможет проследить свой путь до корня хоста.
2. Мгновенный сбой; без логирования ошибок
Если резервное копирование дает мгновенный сбой, то скорее всего проблема с подключением. Проверьте машину клиента и убедитесь, что UrBackup на нем работает без сбоев. Логи клиента располагаются в /var/log/urbackup.log
. Также можете проверить service urbackupclientbackend status
. Если вы не можете определить причину проблемы, деинсталлируйте и повторно установите клиента.
3. «ERROR: No permission to access [Backup Directory]»
Если вы смонтировали внешнее устройство хранения напрямую и столкнулись с ошибками разрешений, то вам может потребоваться запустить службу от лица root-пользователя. Сначала проверьте разрешения директории бэкапа для пользователя и группы. Если вы не можете изменить разрешения для пользователя “urbackup” и группы “urbackup”, как в шаге 2.E, то сможете определить запуск UrBackup от лица root-пользователя. Для этого измените последнюю строку файла конфигурации (/etc/default/urbackupsrv
) с urbackup
на root
и перезапустите сервер.
4. Ошибки ввода/вывода
Если вы не отсоединяли внешнее устройство хранения и получили ошибки ввода/вывода в процессе резервного копирования, то возможно это устройство повреждено или работает со сбоями. Если перезапуск телефона не решает проблему, скорее всего время подыскать новое блочное устройство.
5. Прочие ошибки
Если вы отклонились от руководства и не выбрали в качестве механизма резервного копирования “LVM”, убедитесь, что клиент и сервер совместимы с выбранной вами альтернативой. К примеру, если на клиенте установлен dattobd, а на сервере нет, резервное копирование провалится.
Остались вопросы по UrBackup? Нужна помощь? Обратитесь к полноценному руководству Administration Manual. Это щепетильный проект, и для каждого телефона возникнут свои сложности, так что, помимо обсуждения в комментариях, можете почитать форумы сообщества UrBackup.
Автор: Дмитрий Брайт