Автономное резервное копирование по расписанию на устройствах Android в локальной сети на сервер с OpenWrt_
Автономное резервное копирование по расписанию на устройствах Android в локальной сети на сервер с OpenWrt
Шутов В.В.
Национальный исследовательский университет «Высшая Школа Экономики» Московский Институт Электроники и Математики vshutov@Jtse.ru
Аннотация. В докладе рассматривается способ организации автоматического резервного копирования на устройствах Android, реализованный автором, отличием которого является универсальность, независимость от наличия Интернет-подключения и доступности сервисов Google. Обсуждаются способы подготовки и настройки смартфона в локальной сети для резервного копирования.
Ключевые слова: OpenWrt, встраиваемые системы, Android, домашняя автоматизация, резервная копия, SQLite Browser
Проблема создания резервных копий (бэкапов) устройств Android стала актуальной с тех времен, когда они появились на рынке и начали свой стремительный рост. Данные в смартфонах характеризуются частой изменяемостью (например, список контактов, история звонков, новые сообщения, и т.д.), являются уникальными и важными, что ставит вопрос создания бэкапов еще острее: никто не застрахован от случайного удаления, от кражи или порчи устройства.
Существуют два основных направления решения данной проблемы. Самый простой способ подразумевает синхронизацию контактов и некоторой другой информации с сервисами Google. При потере устройства можно синхронизировать новое устройство со своей учетной записью в Google. Данное решение обладает целым рядом недостатков. Синхронизация не является гибкой - сохранять можно только некоторые данные (контакты, задачи). Синхронизация с другими платформами вызывает сложности, что приводит к проблеме переноса на другую операционную систему. Так, в устройствах, начиная с Windows Phone 7, в бесплатной версии ПО синхронизации контактов и сообщений невозможна [Windows Phone, 2015; Поддержка Microsoft, 2015]. Такая возможность может понадобиться при покупке нового устройства с операционной системой отличной от Android. Синхронизация требует доступа в Интернет, который может быть не всегда под рукой, а в случае мобильного интернета придется платить за трафик в обе стороны. Кроме того, хранить свои персональные данные в Интернете небезопасно. Аккаунт может быть взломан, путем заражения компьютера, с которого производится доступ к электронной почте, потеря пароля приводит к недоступности данных.
Компания Google не гарантирует передачу информации третьим лицам. Так, при регистрации в Facebook и указания своего личного почтового ящика Google без подробных личных данных, в новом аккаунте появляются предложения о добавлении друзей, на основе анализа Facebook сообщений и контактов из почты Google. Пользователь зависит от политики компании Google, которая может в любой момент объявить о приостановке оказания услуг или сделать их платными, как в случае с Microsoft.
Второй основной способ - использование программ, скачанных из Play Market. Одной из самых распространенных программ является Titanium Backup. Данная программа обеспечивает простой, удобный интерфейс, расписания для создания резервных копий и не требует наличия интернет подключения. Резервные копии выполняются на внутреннюю карту памяти. Однако данная программа не позволяет делать гибкие настройки для создания резервных копий, и не все типы личных данных можно сохранять. Кроме того, некоторые программы сохраняют данные в собственном формате, что сильно осложняет в случае утери устройства воспользоваться данными без покупки нового устройства и восстановления.
Для преодоления этих трудностей можно использовать метод автономной системы бэкапов, реализованный автором. Для этого потребуется домашний беспроводной маршрутизатор с наличием USB порта, поддерживаемый проектом OpenWrt. Возможность установки операционной системы на маршрутизатор можно уточнить на веб-сайте проекта [OpenWrt, 2015а]. В USB-разъем подключается устройство хранения данных (внешний жесткий диск, USB-флэш накопитель и т.п.). Для обеспечения хорошего качества электропитания жесткий диск рекомендуется подключать через активный USB-концентратор. Будем рассматривать реализацию системы бэкапов на примере маршрутизатора TP-Link TL-WR1043ND v. 1.7 с установленной операционной системой OpenWrt, смартфона Samsung Galaxy S3 на базе операционной системы Android 4.0.4, 7-портового USB-концентратора H727RK-U3-WH с активным питанием, USB флэш-памяти объемом 1 ГБ и внешнего жесткого диска с NTFS-разделом для бэкапов.
Для начала устанавливаем OpenWrt на маршрутизатор. Для этого скачиваем файл-образ factory прошивки и через веб-интерфейс перепрошиваем маршрутизатор. Входим в систему и выполняем первичные настройки [OpenWrt, 2015Ь]. В данном случае была использована прошивка Attitude Adjustment 12.09. Затем, необходимо получить права суперпользователя в Android-смартфоне. Для каждой системы процесс может отличаться. Подробнее о нем можно прочитать на веб-сайте [Портал 4pda.ru, 2015]. Для получения прав суперпользователя были использованы программы ExynosAbuse [Xda-developers, 2015а] и
Автономное резервное копирование по расписанию на устройствах Android
в локальной сети на сервер с OpenWrt_
SuperSu. Проверить наличие прав можно с помощью программы RootChecher.
Для поддержки монтирования USB-накопителей OpenWrt нужно обеспечить поддержку USB устройств ядром, поддержку файловых систем, а также установить вспомогательные утилиты: libusb-1.0, kmod-usb-core, kmod-usb-ohci, kmod-usb-uhci, kmod-usb2, kmod-ledtrig-usbdev, usbutils, kmod-usb-storage, kmod-scsi-core, block-mount, fdisk [OpenWrt, 2015с]. После установки пакетов нужно либо перезагрузить маршрутизатор командой reboot now. Проверить наличие блочных устройств в системе можно командой Is /dev/sd*. Также полезной может оказаться программа blkid.
Для поддержки файловых систем ядром OpenWrt нужно установить дополнительные пакеты: kmod-fs-ext4, kmod-fuse, ntfs-3g, e2fsprogs. Все эти пакеты рекомендуется устанавливать на флэш-память маршрутизатора, в случае, если имеются смонтированные внешние разделы.
Для установки дополнительных программ рекомендуется расширить память маршрутизатора отдельным USB-накопителем, так как объем встроенной памяти сильно ограничен. Для USB флэш-памяти будем использовать файловую систему ext2.
Подключаем флэш-память к USB-хабу. Используем команду dmesg I tail, чтобы определить присвоенное название устройства. В данном случае система определяет новое устройство /dev/sda. Используем f disk для создания новой таблицы разделов: f disk /dev/sda. В папке /dev появится новое устройство /dev/sdal. Форматируем накопитель в файловую систему ext2 командой mkfs.ext2 /dev/sdal. Создаем папку файловой системы USB-накопителя: mkdiг -р /mnt/usb. Для монтирования файловой системы ext2 используем: mount -t ext4 -о rw /dev/sdal /mnt/usb. Тип файловой системы должен быть указан ext4, так как в OpenWrt для монтирования ext2 используют модули ext4 [OpenWrt, 2015d].
Для расширения памяти маршрутизатора сделаем настройки программы установки пакетов opkg. В файл /etc/орkg.conf добавим строку dest usb /opt. Создадим ссылку opt в корневой файловой системе для удобства доступа к содержимому флэш-памяти: In -s /mnt/usb /opt. В файле /etc/profile изменим строку с переменной PATH, добавив в конец строки:
/opt/bin:/opt/sbin:/opt/usr/bin:/opt
/usr/sbin. Добавим строку export
LD_LIBRARY_PATH=/opt/lib:/opt/us
г/lib. Теперь для установки программ на флэш-память нужно выполнить команду opkg -dest usb install name, где name -имя устанавливаемого пакета.
Для обеспечения безопасности нужно создать отдельного пользователя, который будет иметь доступ к созданию бэкапов. Для этого удобно установить пакеты: shadow-common, shadow-user add. Выполняем команду useradd backup. Добавляем новую группу backup в файл /etc/group. Меняем пароль пользователя с помощью команды passwd backup. Связать пользователя и группу и выбрать домашнюю папку можно с помощью файла /etc/passwd. Создаем папку для монтирования бэкапов с внешнего жесткого диска командой mkdir -р /opt/backups.
Для хранения бэкапов будет использоваться внешний USB жесткий диск, отформатированный в файловую систему NTFS. При подключении к USB порту концентратора система OpenWrt присваивает диску имя /dev/sdb. Создадим отдельную папку для монтирования NTFS раздела командой mkdir -р /mnt/usb-ntfs и папку для бэкапов mkdir -р /mnt/usb-ntf s/backups. Монтируем раздел командой ntfs-3g /dev/sdbl /mnt/usb-ntfs -о rw,sync,umask=000,locale=ru_RU.U
TF-8. Во избежание появление ошибок монтирования NTFS в автоматическом режиме при перезагрузке рекомендуется устанавливать утилиту ntfs-3g во встроенную флэш-память маршрутизатора. Так как все папки и файлы, находящиеся на NTFS-разделе монтируются для пользователя, указанного в параметрах монтирования (по умолчанию для root), а мы хотим использовать NTFS раздел, кроме резервного копирования еще и для других нужд, то для тонкой настройки прав для папки с бэкапами используем команды:
mount -о bind /mnt/usb-ntfs/backups /opt/backups chown -R backup:backup /opt/backups chmod -R 755 /opt/backups
Изменяя права к папке /opt/backups на ext2 разделе, владельца и работая с ней фактически можно управлять доступом к NTFS-разделу. Для автоматического монтирования создадим скрипт bind, sh в /opt/etc с командами, указанными выше и добавим строку /opt/etc/bind, sh в файл /etc/rc. local, который будет вызывать скрипт при каждой загрузке системы. Для автоматического монтирования дисков при подключении также можно воспользоваться программой hotplug. d. Для упрощения монтирования можно настроить файл /etc/config/fstab. В файл /etc/init. d/f stab в функцию start рекомендуется
Автономное резервное копирование по расписанию на устройствах Android
в локальной сети на сервер с OpenWrt_
добавить строки во избежание ошибок, связанных с монтированием жесткого диска:
sleep 15
. /lib/functions/mount.sh
Так как диск будет подключен постоянно, то для снижения нагрузки на жесткий диск можно останавливать шпиндель программой hdparm при неактивности диска.
Для удобства работы можно использовать OpenSSH сервер, который будет осуществлять связь с Android-смартфоном, используя для идентификации ключи. Устанавливаем OpenSSH и SFTP серверы:
opkg -dest usb install openssh-keygen opkg -dest usb install openssh-server opkg -dest usb install sftp-server
Изменяем настройки opens sh сервера в /opt/etc/ssh/sshd_config. Изменяем настройки расположение ключей, расположение PID-файла и SFTP-сервера:
Port 7122
HostKey /opt/etc/ssh/ssh_host_rsa_key HostKey /opt/etc/ssh/ssh_host_dsa_key PidFile /var/run/sshd.pid Subsystem sftp /opt/usr/lib/sftp-server
После чего добавляем сервер в автозагрузку и запускаем его:
/opt/etc/init.d/sshd enable /opt/etc/init.d/sshd start
Добавляем правила межсетевого экрана в
/etc/config/firewall:
config 'rule'
option 'src' 'wan'
option 'proto' 'tcp'
option 'dest_port' '7122'
option 'target' 'ACCEPT'
option 'family' 'ipv4'
Перезагружаем правила командой /etc/init.d/firewall reload. Теперь установим необходимые программы на Android смартфон. После получения прав суперпользователя рекомендуется установить приложение RootBrowser, позволяющее просматривать файловую систему и получать доступ к системным файлам и папкам прямо с Android устройства. Для реализации системы удаленного копирования бэкапов необходимо установить бесплатное приложение SSHDroid,
файле порта,
файл
которое позволяет запустить SSH сервер на смартфоне для подключения к нему с помощью компьютера. Приложением поддерживается SCP протокол, который позволяет передавать файлы с компьютера на смартфон и обратно и утилита взаимного преобразования форматов ключей OpenSSH и Dropbear. Сгенерируем приватный и публичный ключи в системе OpenWrt от пользователя backup и изменим права:
chmod 700 /opt/backups.ssh cd /opt/backups/.ssh
ssh-keygen -b 1024 -C smartphone -t rsa -f id_rsa cat id_rsa.pub » authorized_keys chmod 600 authorized_keys
Создадим директорию /sdcard/backup в файловой системе смартфона с помощью программы Putty для Windows. Настраиваем, запускаем SSHDroid на смартфоне и переписываем с помощью scp файл на смартфон:
scp -Р 7022 /opt/backups/.ssh/id_rsa root@192.168.5.150:/
sdcard/backup
Затем, конвертируем формат ключа на смартфоне и удаляем старый ключ:
cd /sdcard/backup
dropbearconvert openssh dropbear id_rsa id_rsa.db rm id_rsa
Для выполнения резервного копирования по расписанию потребуется планировщик задач сгоп. Чтобы активировать сгоп в Android и для поддержки автоматического запуска скриптов при загрузке системы нужно установить программу Universal Init.d [Xda-developers, 2015b]. Запустив программу, включаем поддержку, передвинув ползунок в положение ON. Скачиваем архив SP8-CRON_v2 . zip и распаковываем в папку /mnt/sdcard на смартфоне, запускаем от имени суперпользователя установочный скрипт install, sh и выбираем пункт enable su. По окончании работы скрипта смартфон перезагружается. Для редактирования заданий сгоп используется файл
/data/сгоп job/root. В задании вставляем строку: 00 1 * * * root /data/scripts/backup, sh. Бэкап будет запускаться автоматически в 1 час ночи от пользователя root, выполняя скрипт backup. sh.
Автором был разработан набор скриптов для Android, который обеспечивает создание автономного бэкапа по расписанию. Набор состоит из трех bash-скриптов backup, sh, checkip.sh и remote, sh и
Автономное резервное копирование по расписанию на устройствах Android в локальной сети на сервер с OpenWrt_
текстового файла настроек бэкапа data. txt. В строках файла data. txt перечислены типы данных для бэкапа и пути. Для добавления новых данных, нужно добавить новую строку в файл data. txt. Символом решетки в начале строки можно закомментировать строку. В этом случае система не будет создавать бэкап для данного типа данных. Скрипт backup. sh считывает из файла data. txt типы данных для резервного копирования, создает архивы на карте памяти и при необходимости вызывает скрипт удаленного копирования в систему OpenWrt. Скрипт remote. sh реализует удаленное копирование архивов с карты памяти в локальной сети. Скрипт делает попытку включить адаптер Wi-Fi. В случае успеха, смартфон подключается к заранее настроенной беспроводной сети. С помощью скрипта checkip.sh определяется доступность маршрутизатора с OpenWrt. Для большей безопасности предполагается, что смартфон находится во внутренней локальной сети. Для проверки доступности используется вывод команды ping. Если система OpenWrt не отвечает, то считается, что смартфон находится во внешней сети и бэкап не производится. Копирование производится с помощью утилиты scp. Все скрипты находятся в папке, смонтированной с возможностью выполнения программ, например, /data/scripts и являются исполняемыми. Ниже приведен листинг скриптов.
Файл данных data.txt:
contacts /data/data/com.android.providers.contacts
messages /data/data/com.android.providers.telephony-
notes /data/data/com.sec.android.provider.smemo
logshistory /data/data/com.sec.android.provider.logsprovider
browser /data/data/com.android.browser
calendar /data/data/com.android.providers.calendar
email /data/data/com.android.email
Файл backup.sh
#!/system/bin/bash
DATA=/mnt/sdcard/backup/data.txt
FOLDERNAME=/mnt/sdcard/backup/"date 1+%d%m%Y-%H.%M.%S'4; NEEDTOREMOTE=l
mkdir $ FOLDERNAME; if [ ! -d $FOLDERNAME ]; then echo -e "\033[31m Error of creating backup folder! Exit \033[Om";
exit;
fir-
cat $DATA | while read -r datatype path; do #Ignore comments
if [ ${datatype:0:1} == "#" ]; then continue;
fi;
if [ ! -d $path ]; then
echo -e "\033[31m $path doesn\'t exist! Exit \033[0m"; continue;
fi;
echo -e "\033[32m Backup of $datatype \033[0m"; cd $path
tar -pcv ./* | gzip > $FOLDERNAME/$datatype,tar.gz done
echo -e "\033[31m Backup is completed! Files were backuped in $FOLDERNAME. Exit \033[0m";
if [ $NEEDTOREMOTE -eq 1 ]; then
sh ./remote.sh $FOLDERNAME; fi;
Файл checkip.sh
#!/system/bin/bash ip=$l
ipaccess=4ping -w 3 -с 1 $ip | grep received | awk ' {print $4}' 4
return $ipaccess
Файл remote, sh
BASEPATH=/data/data/berserker.android.apps.sshdroid/dropbear
SSH=$BASEPATH/ssh
SCP=$BASEPATH/scp
BACKUPDIR=/mnt/sdcard/backup
PRIVKEY=$BACKUPDIR/id_rsa.db
IP=192.168.5.1
WHERE=/opt/backups
USER=backup
PORT=7122
FOLDERNAME=$1
FOLDER="basename $FOLDERNAMEN COMMAND="mkdir $FOLDER"
echo -e "\033[32m \n Starting remote copy backup to $IP\033[0m"; echo "Checking Wi-Fi adapter..."
result=4netcfg I grep wlanO4
if [ -z "$result" ]; then
echo "Wi-Fi is turned off. Lets turn it on" svc wifi enable sleep 15
result2=4netcfg | grep wlanO4 if [ -z "$result2" ]; then
Автономное резервное копирование по расписанию на устройствах Android
в локальной сети на сервер с OpenWrt_
echo "Wi-Fi isn't turned on! Unknown error! Exit without backup to remote device!" exit;
fi; fi;
echo " Wi-Fi is turned on!"
echo " Checking accessibility of host $IP"
#Waiting for the connection to AP and getting IP-address
sleep 30
sh ./checkip.sh $IP
if [ $? -eq 0 ]; then echo -e "\033[31m Storage device $IP is not accessible now or you are connected to untrusted network! Exit!\033[0m" exit; fi
echo " Host $IP is OK!" cd $FOLDERNAME
echo " Trying to create new folder $FOLDER for backup on remote host in $WHERE"
$SSH -p $PORT -i $PRIVKEY $USER@$IP $COMMAND if [ $? -ne 0 ]; then echo "There is some error, while SSHing to server! Exit program without remote copying!" exit; fi;
echo " Success!"
echo -e "\033[32m Copy backup from Android to remote host...\033[0m";
$SCP -r -P $PORT -i $ PRIVKEY $ FOLDERNAME/*
$USER@$IP:$WHERE/$FOLDER if [ $? -ne 0 ]; then echo -e "\033[31m There are some errors while SCPing to server. Please check the result!\033[0m" else
echo -e "\033[32mCopying is completed successfully!\033[0m" fi;
if [ -z "$result" ] then
echo "Return Wi-Fi in turned off state as it was before this script"
svc wifi disable fi;
В статье показано, как реализовать автоматизированную систему создания резервных копий, обладающую большей гибкостью по сравнению с популярными способами для Android. Такой подход имеет множество преимуществ. Можно легко выбирать программы, для которых нужно создавать резервную копию и расширять функционал, добавляя пути в файл data. txt. Система является свободно распространяемой и
представляет собой набор скриптов на языке командного интерпретатора bash, что делает возможным доработку другими разработчиками. Кроме того, можно делать безопасное резервное копирование внутри локальной сети, так как данные не передаются через посредников. Отключение интернета и доступа к сервисам Google не влияет на возможности системы, так как трафик не передается через интернет, что приводит к сокращению расходов, в случае оплаты за трафик. Резервирование проводится в автоматическом режиме в случае нахождения в зоне действия доверенной беспроводной сети, избавляя пользователя от необходимости постоянно делать бэкапы. Система является универсальной - не нужно делать отдельные копии в бинарном формате для восстановления на смартфоне, и в текстовом формате для просмотра на компьютере. Так как данные контактов, сообщений хранятся в базах данных, для просмотра можно использовать программу SQLiteBrowser 3. По сравнению с ClockWorkMod Recovery копирование является более безопасным, так как отсутствует возможность испортить системные файлы Android. Из основных минусов можно отметить сложность первоначальной настройки и необходимость доступа к устройству на уровне суперпользователя.
Список литературы
[Поддержка Microsoft, 2015] Поддержка Microsoft. База знаний. [Офиц. сайт] URL: http://support.microsoft.com/kb/2805948,2015
[Портал 4pda.ru, 2015] Площадка о мобильных устройствам URL: http ://4pda.ru/forum/index.php?act=idx, 2015
Как получить Root в Android и стоит ли это делать, URL: http://4pda.ni/2014/10/09/l 799186,2015
[OpenWrt, 2015а] Веб-сайт операционной системы OpenWrt [Офиц. сайт]. URL: http://wiki.openwrt.org/toh/start, 2015
[OpenWrt, 2015b] Веб-сайт операционной системы OpenWrt [Офиц. сайт]. URL: http://wiki.openwrt.org/doc/howto/user.beginner, 2015
[OpenWrt, 2015с] Веб-сайт операционной системы OpenWrt [Офиц. сайт]. URL: http://wiki.openwrt.org/doc/howto/usb.essentials, 2015 http://wiki.openwrt.org/doc/howto/usb.storage, 2015
[OpenWrt, 2015d] Веб-сайт операционной системы OpenWrt [Офиц. сайт]. URL: http://wiki.openwrt.org/doc/howto/storage, 2015
[Windows Phone, 2015] Часто задаваемые вопросы по синхронизации почты, контактов и календарей Google. Сайт компании Microsoft [Офиц. сайт]. URL: http://www.windowsphone.com/ru-ru/how-to/wp7/people/sync-google-email-contacts-and-calendars-faq, 2015
[Xda-developers, 2015а] Портал xda-developers разработчиков для мобильных устройств URL: http://forum.xda-developers.com/showthread.php?t=2050297, 2015 [Xda-developers, 2015b] Портал xda-developers разработчиков для мобильных URL: http://forum.xda-developers.com/showthread.php?t=1933849,2015 URL: http://forum.xda-developers.com/showthread.php?t=2090284,2015