Nandroid backup

Здравствуй, Хабрахабр.
Так случилось, что мне понадобилось создать полную копию Android устройства, в котором полностью отсутствовали обычно используемые для этого средства. Поиски меня привели на форум XDA, где и была найдена данная всеобъемлющая инструкция, которая пришлась как нельзя кстати и которой я решил поделиться с вами.
В статье имеются мои комментарии, так как применял эту инструкцию для создания backup’a планшета Teclast x98 3g.

Общая информация

Это руководство предназначено для помощи в создании полной резервной копии вашего устройства (вся память со всеми разделами) или одного раздела (в том числе sdcards и т.д.) непосредственно на компьютер:

  • На уровне Блоков памяти (с помощью команды dd): для отдельных разделов или полностью всей памяти (все разделы). Резервная копия всегда будет иметь тот же размер, который имеет сохраняемый раздел.
  • На уровне Файлов (с помощью команды tar): только для отдельных разделов. Копия будет содержать только файлы и папки, которые имеются на устройстве, таким образом занимая гораздо меньше места, в зависимости от того, на сколько заполненным будет раздел.

Данная инструкция применима, когда аппарат включен или находится в ClockworkMod Recovery (в данных случаях ADB будет работать, в режиме Fastboot данная инструкция не применима). Если дополнительно не будет никаких ремарок, все команды предназначены для использования в Windows. То же касается и Linux с Unix.

Требования

  • Рутированное Android устройство;
  • Установленный Busybox на устройстве;
  • Если вы используете Linux / OS X, у вас уже имеются необходимые инструменты, для Windows скачайте Cygwin и установите вместе с ним netcat, pv и util-linux, выбрав их во время установки (от себя добавлю, что лучше пользоваться терминалом из Cygwin mintty.exe, чем родным для Windows cmd.exe, так как скорость копирования у первого доходила до 3-4 МБ\с, а у cmd.exe — максимум 400 кб\с);
  • Установленный ADB;
  • Убедитесь, что adb.exe находится в переменной PATH. Посмотрите и , или воспользуйтесь Path Manager;
  • Включенный режим отладки по USB на устройстве и соответствующие драйверы, установленные в Windows. Ввод «adb devices» в терминале должен показать ваше устройство.

Разделы в устройстве

Теперь вам необходимо определить разделы и блоки на вашем устройстве, копию которых вы хотите сделать. Для копирования одного раздела можно использовать команды tar или dd, в то время как для копирования всей памяти нужно использовать только dd.
На Teclast x98 3g для определения разделов используются две команды: cat proc/partitions и mount.
Пример того, что должно появиться у Вас в ответ на их ввод в терминале.127|root@android:/ # mount
mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0

none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mmcblk0p9 /system ext4 ro,noatime,data=ordered 0 0
/dev/block/mmcblk0p7 /cache ext4 rw,nosuid,nodev,noatime,data=ordered 0 0
/dev/block/mmcblk0p6 /config ext4 rw,nosuid,nodev,noatime,data=ordered 0 0
/dev/block/mmcblk0p10 /data ext4 rw,nosuid,nodev,noatime,noauto_da_alloc,data=ordered 0 0
/dev/block/mmcblk0p8 /logs ext4 rw,nosuid,nodev,relatime,data=ordered 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
tmpfs /mnt/libreg tmpfs rw,noexec,noatime,size=4k,mode=700,gid=1003 0 0
/dev/block/vold/179:1 /storage/sdcard_ext fuseblk rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096 0 0
root@android:/ # cat proc/partitions
cat proc/partitions
major minor #blocks name
179 10 30535680 mmcblk0
179 11 229376 mmcblk0p1
179 12 32768 mmcblk0p2
179 13 32768 mmcblk0p3
179 14 131072 mmcblk0p4
179 15 131072 mmcblk0p5
179 16 131072 mmcblk0p6
179 17 786432 mmcblk0p7
179 18 262144 mmcblk0p8
179 19 1048576 mmcblk0p9
259 0 27742188 mmcblk0p10
179 30 2048 mmcblk0boot1
179 20 2048 mmcblk0boot0
179 0 30657536 mmcblk1
179 1 30657504 mmcblk1p1
Обычно на Android весь блок, содержащий все разделы, расположен в /dev/block/mmcblk0, а все остальные разделы являются его подразделами. Вы можете установить parted with GPT support, чтобы просмотреть информацию о всех разделах.
Вся память телефона -> /dev/block/mmcblk0 (хотя, на некоторых телефонах, это может быть и sdcard).
Разделы -> все зависит от конкретного устройства. Обычно в /dev/block/platform/dw_mmc/by-name/ перечислены все разделы для данного устройства.

Резервное копирование всей памяти (посредством adb)

Подключите телефон с включенным режимом отладки по USB к компьютеру.
Что касается Teclast x98 3g и того случая, когда аппарат не загружается (bootloop). Очень важно, чтобы до всего этого случившегося был включен режим отладки по USB. Выключите полностью планшет, отсоедините все кабели, дайте пару секунд на «отдых» и подключите кабель от компьютера к планшету, должна появиться такая большая белая батарея, которая будет показывать, что идет процесс зарядки, вот только тогда, даже в выключенном состоянии можно будет работать с аппаратом через терминал и adb.
Запустите Cygwin Терминал и введите (при необходимости замените mmcblk0):
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox dd if=/dev/block/mmcblk0
Вы увидите мигающий курсор на следующей строке слева. На данный момент аппарат ожидает передачи Блока по сети.
Откройте другой Cygwin Терминал и введите:
adb forward tcp:5555 tcp:5555
cd /path/to/store/the/backup
nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.raw
Вы увидите, как начнет увеличиваться размер файла до тех пор, пока полностью не скопируется весь выбранный вами Блок. Теперь у вас имеется полный бекап аппарата в raw формате. Вы можете увидеть всё содержимое в скопированном Блоке с помощью gptfdisk, доступного для Windows, Linux и других ОС (официальный сайт или SourceForge). Аналогичное вы сможете сделать при помощи ClockworkMod Recovery, но первоначально необходимо смонтировать Раздел /system, так как в BusyBox, входящем в ClockworkMod, отсутствует netcat, потому вам необходимо использовать netcat из /system раздела Вашего устройства.

При помощи определенных инструментов в Linux вы можете изменять и извлекать необходимые Разделы из всего Блока.
Вы можете использовать ADB через WiFi, аналогично как и Wi-Fi ADB.

Резервное копирование всей памяти (через WiFi)

Ссылка на автора: Nandroid directly to computer w/o sdcard.
Необходимо:

  • Установленный FTP сервер на компьютере или другом устройстве;
  • Пользователь с паролем;
  • Установленный порт для FTP сервера, по умолчанию 21, но в данном примере используется 40;
  • Домашняя директория пользователя с правами записи.

Правилом хорошего тона будет копирование myfifo в /cache, а не в /data, так как можно случайно затереть важные данные в случае использования raw данных для восстановления.
Запустите Cygwin Терминал и введите:
adb shell
su
mkfifo /cache/myfifo
ftpput -v -u user -p pass -P 40 COMPUTER_IP block.raw /cache/myfifo
Откройте другой Cygwin Терминал и введите:
adb shell
su
dd if=/dev/block/mmcblk0p12 of=/cache/myfifo
Некоторые замечания:

  • FIFOs можно сделать только на Linux Native файловых системах, FAT для этого не подойдет;
  • Процесс чтения Раздела с устройства никоим образом его не видоизменяет.

Резервное копирование всей памяти (через USB-модем или Wi-Fi-модем)

Для этого необходимо отключить все сетевые соединения на компьютере, кроме того, с помощью которого вы будете осуществлять процесс копирования.
Как только соедините компьютер с Android устройством, вы сможете просмотреть IP компьютера и IP устройства в «Свойствах соединения». IP — будет являться IP самого компьютера, а Gateway будет содержать IP Android устройства.
Процесс абсолютно аналогичный передачи данных через Wi-Fi, единственное, скорость передачи данных будет значительно выше, потому что компьютер и Android устройство соединены непосредственно, вместо того, чтобы использовать роутер в качестве шлюза. В данном случае шлюзом будет само Android устройство. USB-модем имеет самый высокий уровень передачи данных.

Резервное копирование одного Раздела (raw = точная побитовая копия раздела)

Все аналогично тому, что было описано выше, только необходимо заменить mmcblk0 на соответствующий Раздел. Вы можете использовать в данном конкретном случае ПО для просмотра содержимого скопированного Раздела. В зависимости от файловой системы: DiskInternals Linux Reader, Ext2Read, Ext2 File System Driver for Windows, Ext4Explore, плагин для Total Commander и ImDisk Virtual Disk Driver. Можно также использовать ПО для восстановления данных с отдельных разделов, например, Recuva совместно с VHD Tool или инструменты командной строки, включенные в сами операционные системы.

Резервное копирование одного Раздела (tar = копируются только файлы и папки)

В данном случае необходим уже смонтированный раздел. (Как найти разделы на Teclast x98 3g я описывал выше.)
Чтобы увидеть список всех смонтированных разделов в Cygwin Терминале введите:
adb shell mount
Теперь вы должны знать, где и какой раздел монтируется, например, Firmware смонтирована в /system, которая по сути является ROM.
В данном случае вам придется открыть три Cygwin Терминала, вследствие ограничений, накладываемых самим Android:

Откройте первый Cygwin Терминал и создайте FIFO, например, в /cach, и перенаправте tar в него:
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox mkfifo /cache/myfifo
/system/xbin/busybox tar -cvf /cache/myfifo /system
Вы должны это сделать потому, что перенаправление tar в stdout (c «-«) не работает на Android и портит сохраняемый файл.
Откройте второй Cygwin Терминал:
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox cat /cache/myfifo
Откройте третий Cygwin Терминал:
adb forward tcp:5555 tcp:5555
cd /path/to/store/the/backup

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

Как создать Nandroid-бэкап?

Прежде всего вы должны иметь за спиной базовые знания, поскольку первым шагом будет перезагрузка устройства в режим рекавери. Данное действие не будет описываться в этой статье, так как на большинстве устройств оно происходит путем нажатия определенных, часто отличающихся между собой, комбинаций клавиш.
Из меню Recovery перейдите в раздел Backup and Restore, где галочками отметьте данные, которые необходимо поместить в резервную копию. Рекомендуется делать полную копию, дабы избежать возможного конфликта разделов. Далее подтвердите процесс архивации, вернитесь в меню и произведите перезагрузку устройства.
Примите во внимание, что установка кастомной прошивки влечет за собой полную очистку памяти. Следовательно, сделанный Nandroid-архив необходимо переместить на другое хранилище, к примеру, отлично подойдет персональный компьютер.

Как восстановить систему с помощью Nandroid-бэкапа?

Если ваша попытка усовершенствовать свое устройство с треском провалилась и вы желаете вернуть предыдущую систему, следуйте нижеуказанным инструкциям:
1. Войдите в меню Recovery.
2. Перейдите в wipe data/factory reset, далее нажмите wipe cache partition и выберите wipe Dalvik Cache.
3. Нажмите на mounts and storage, после чего выберите format/system. Это действие поможет сбросить некорректно работающую прошивку.
3. Воспользуйтесь ранее созданным архивом, используя опцию backup and restore. Если Nandroid-архив находится на внешней карте, выберите пункт restore, в случае хранения копии во внутренней памяти устройства выберите restore from internal sdcard.
4. После подтверждения процесса перезагрузите девайс.
Вполне вероятно, что первый запуск будет длится немного дольше, нежели ранее. Больше полезной информации касаемо Nandroid Backup можно найти на популярном англоязычном ресурсе Android Central forums. Также заслуживает внимания программа Online Nandroid Backup, которая при наличии root прав способна восстановить данные без загрузки в режим рекавери.

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