Показаны сообщения с ярлыком recovery. Показать все сообщения
Показаны сообщения с ярлыком recovery. Показать все сообщения

пятница, 26 мая 2017 г.

История одного recovery. На примере МТС Smart Race2 4G.

Не так давно я рассказывал вам о первом операторском смарфтоне с Android 7.0 (Nougat) на борту - МТС Smart Race2 4G, до полноценного обзора нового устройства руки по не дошли, но он обязательно появится на страницах этого ресурса в ближайшее время. Сегодня же я бы хотел поговорить о "кастомизации", а именно особенностях сборки кастомного recovery (TWRP) под этот аппарат. Пост ориентирован скорее не на конечных пользователей, которые используют возможности TWRP в повседневной жизни, а на разработчиков. Честно говоря, начиная собирать TWRP (естественно из исходников) для данного аппарата я и не предполагал, что придется столкнуться с какими-либо сложностями, т.к. по большому счету платформа Mediatek на базе которой построен гаджет, также как и чипсет MT6737M хорошо изучены и никаких потенциальных проблем со сборкой TWRP для подобных устройств никогда не возникало. Однако в случае с МТС Smart Race2 4G, именно из-за Android 7.0, пришлось столкнуться с определенными сложностями и этот пост - небольшое "руководство-размышление" об их решении.

Сразу скажу, что т.к. аппарат построен на базе Nougat, то собирать TWPR для него обязательно на базе исходников из ветки 7.1 OmniROM (можно конечно собрать android_bootable_recovery и в составе CyanogenMod / LineageOS), но опять же, "платформа" 7.1 обязательна. Почему? Если опустить аргумент об идеологической правильности подобного подхода, скажу, что на базе Marshmallow TWRP также прекрасно соберется, но при попытке запуска под его управлением любых стоковых бинарников, например, vold, logcat и т.п. вы неизбежно получите ошибку cannot locate symbol "__write_chk", т.к. все стоковые бинарники используются экспортируемую функцию __write_chk из libc, которой в Marshmallow просто нет. Таким образом собирая TWRP на исходниках от 6.0 вы автоматически собираете libc без __write_chk, что приведет к неработоспособности части бинарников собранных под Nougat внутри получившегося TWRP. Поэтому если вы часто собираете TWRP для различных устройств и еще не успели склонировать репозитарий того же OmniROM 7.1 - сейчас самое время сделать это, т.к. по всей видимости устройств с Nougat на Mediatek будет появляться все больше и вам рано или поздно придется это сделать.

Других особенностей, касающихся именно процесса сборки TWRP - вообщем-то нет, все штатно, также как и в случае с 6.0. Собранный у меня кастомный recovery отлично запустился на аппарате, но вот как раз тут и начались "приключения". Как известно, раздел userdata в Android N является шифрованным, т.к. объявлен в fstab'е как forceencrypt с хранением ключей шифрования в metadata. Вот как раз это и послужило началом всей истории. Загрузившись в только что собранный TWRP я обнаружил что он запрашивает пароль для дешифровки userdata и не монтирует его. При этом пароль в устройстве, т.е. ни PIN-код для разблокировки, либо загрузки Android, ни графический ключ не был явно задан.

Т.е. фактически TWRP по каким-то причинам не смог расшифровать раздел с помощью default_password. Включение отладочных средств TARGET_USES_LOGD и TWRP_INCLUDE_LOGCAT в BoardConfig.mk при сборке также не помогло установить причину проблемы. Вывод logcat и dmesg в этом плане был малоинформативен.

Конечно в данной ситуации можно было поступить проще (подобное решение можно увидеть в многочисленных сборках TWRP, в котором разработчикам было лень разбираться с шифрованием), например, просто разобрав boot и изменив forceencrypt на encryptable с последующим форматированием раздела userdata и потерей всех данных. Но это ведь не наш путь, т.к. в моем понимании у пользователя устанавливающего TWRP на аппарате уже есть какие-то данные и терять их из-за того что TWRP не может справиться с расшифровкой раздела, как минимум не хотелось бы. Другими словами, TWRP должен монтировать существующий на устройстве раздел userdata, все другие варианты (отключение шифрования и т.п.) являются "полумерами", к тому же еще и снижающими безопасность устройства.

Тогда я вспомнил, что начиная с определенной версии TWPR в нем появилась возможность использования стоковых бинарников vold с помощью включения TW_CRYPTO_USE_SYSTEM_VOLD в сборку, информация об этом есть в этом коммите - crypto: Use system's vold for decryption. Бегло изучив все что там говорится, а также проанализировав содержимое исходников в /bootable/recovery/crypto/vold_decrypt/ я включил этот флаг в BoardConfig.mk и пересобрал recovery. Т.е. теперь уже TWRP использовал бинарник vold находящийся в system ... Однако дешифрование раздела и его монтирование все равно не происходило, т.к. при сборке vold в стоковой прошивке разработчиками была включена проверка boot_mode. Что она из себя представляет?

Для лучшего понимания приведу следующий исходник:

int get_boot_mode(void)
{
  int fd;
  ssize_t s;
  char boot_mode[4] = {'0'};
  char boot_mode_sys_path[] = "/sys/class/BOOT/BOOT/boot/boot_mode";

  fd = open(boot_mode_sys_path, O_RDONLY | O_NOFOLLOW | O_CLOEXEC);
  if (fd < 0)
  {
    SLOGE("fail to open %s: %s", boot_mode_sys_path, strerror(errno));
    return 0;
  }

  s = read(fd, boot_mode, sizeof(boot_mode) - 1);
  close(fd);

  if(s <= 0)
  {
    SLOGE("could not read boot mode sys file: %s", strerror(errno));
    return 0;
  }

  boot_mode[s] = '\0';
  return atoi(boot_mode);
}

Здесь get_boot_mode возвращает текущий режим загрузки устройства, который она читает из /sys/class/BOOT/BOOT/boot/boot_mode . Так вот стоковый vold вызывает некий аналог этой get_boot_mode и если устройство загружено в режиме отличном от system, т.е. в recovery mode или в любом другом доступном режиме, то монтирование / дешифрование userdata невозможны в принципе. В логах вы увидите нечто вроде <5>fs_mgr: %s: bootmode(%d) is NOT normal mode, disable 'default encrytion', flag=(0x%x -> 0x%x)". Скачав и установив бесплатную demo версию IDA v6.95.160810 мы можем увидеть эту проверку самостоятельно:


Где в дальнейшем используются результаты этой проверки и как именно - разбираться досконально я не стал, однако, факт отключения default encryption в vold при загрузке в режиме recovery, естественно, нас не устраивал. Из этой сложившейся ситуации есть несколько выходов:

  • Непосредственный патч vold для обхода этой проверки.
  • Написание собственной библиотеки с размещением ее в LD_PRELOAD, которая перехватывала бы попытки обращения в цепочке open("/sys/class/BOOT/BOOT/boot/boot_mode") -> __read_chk -> close от любых приложений и всегда возвращала бы нужное значение (т.е. 0 = normal_mode).
  • Сборка vold из исходников Android N для MT6737M от Mediatek с корректировкой всех проверок в исходниках.

Любая из этих реализаций должна привести к успеху, поэтому какой именно воспользоваться - не имеет большого значения. Здесь главное не забыть, что собранный из исходников или модифицированный vold должен корректно загружаться из init.recovery.vold_decrypt.rc, например так:

service sys_vold /path_to_your_vold/vold \
        --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 \
        --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0
    socket vold stream 0660 root mount
    socket cryptd stream 0660 root mount
    setenv PATH /system/bin
    setenv LD_LIBRARY_PATH /system/lib64:/system/lib
    disabled
    oneshot

Однако, даже решив эту проблему - мы не получим полноценного решения по дешифрованию userdata в TWRP, т.к. платформа использует еще и teei_daemon для поддержки шифрования. Изучить как он запускается и работает можно посмотрев внутрь init.microtrust.rc из boot'а. И наконец последний шаг на пути к успеху, это обеспечение корректного запуска и работы этого демона при дешифровании, "красивым" и правильным шагом здесь, на мой взгляд, является помещение его инициализации в соответствующий init.recovery.vold_decrypt.$(item).rc (разобраться с этим подробнее вам поможет /bootable/recovery/crypto/vold_decrypt/Android.mk).

В качестве результата проделанной работы я получил незаменимый опыт (что главное), а также полноценной работающий TWRP 3.1.1-0:


Как видно из фото - раздел userdata успешно расшифрован и примонтирован (Data succefully decrypted, new block device: '/dev/block/dm-0') created). Mission accomplished ;)

p.s. Во-избежание наболевшего вопроса "а где можно скачать готовую сборку TWRP" - скажу сразу что дата public релиза пока не определена. Однако все необходимые для сборки моменты уже рассмотрены в этой статье и любой желающий, ориентируясь на мои наработки может пройти тем же путем. 

суббота, 11 марта 2017 г.

Как активировать тачпад в Recovery на MTK или патчим ядро Android.

Как вы заметили я редко пишу узкоспециализированные технические посты, в основном контент расчитан на более широкую аудиторию, но сегодня я не удержался. Предыстория очень простая. Во время сборки кастомного Recovery для одного из аппаратов на чипе от Mediatek я столкнулся с проблемой - тачпад в Recovery не работал, а любые упоминания о mtk-tpd напрочь отсутствовали в /sys/class/input. Надо сказать что mtk-tpd это как раз и есть тот самый MTK Android Linux Touch Panel Device Driver, который отвечает за работу тачпада. Напомню, что в нормальной ситуации, когда тачпад в recovery работает, сделав что-то вроде grep . /sys/class/input/input*/name в консоли мы должны увидеть примерно следующее:


/sys/class/input/input0/name:ACCDET
/sys/class/input/input1/name:mtk-kpd
/sys/class/input/input2/name:hwmdata
/sys/class/input/input3/name:m_alsps_input
/sys/class/input/input4/name:m_acc_input
/sys/class/input/input5/name:m_gyro_input
/sys/class/input/input6/name:mtk-tpd
/sys/class/input/input7/name:mtk-tpd-kpd

Однако в моей ситуации mtk-tpd отсутствовал. Зная что на одном из форумов есть человек, который уже занимался патчами ядра ARM64 для Mediatek, я обратился к нему с вопросом, а каким образом (честно говоря я рассчитывал на ответ в двух словах, такая-то функция, такая-то проверка) он заставил работать тачпад в recovery и что конкретно он патчил в ядре. Правда здесь я почему-то наткнулся на стену глухого непонимания и какой-то секретности. Ну "секрет" так секрет, настаивать, чтобы кто-то что-то рассказал, если человек сам не хочет бессмысленно. Поэтому я решил провести некий анализ, который занял от минут 30-40 ... теперь голые факты. В MTK существует несколько режимов загрузки, который описаны в заголовочных файлах ядра (mt_boot_common.h), вот они:

/* boot type definitions */
enum boot_mode_t {
 NORMAL_BOOT = 0,
 META_BOOT = 1,
 RECOVERY_BOOT = 2,
 SW_REBOOT = 3,
 FACTORY_BOOT = 4,
 ADVMETA_BOOT = 5,
 ATE_FACTORY_BOOT = 6,
 ALARM_BOOT = 7,
#if defined(CONFIG_MTK_KERNEL_POWER_OFF_CHARGING)
 KERNEL_POWER_OFF_CHARGING_BOOT = 8,
 LOW_POWER_OFF_CHARGING_BOOT = 9,
#endif
 DONGLE_BOOT = 10,
 UNKNOWN_BOOT
};

В драйвере дисплея в процедуре инициализации тача есть проверка:

static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
 int err = 0;
 int count = 0;

 GTP_INFO("tpd_i2c_probe start.");
 if (RECOVERY_BOOT == get_boot_mode())
  return 0;
 probe_thread = kthread_run(tpd_registration, client, "tpd_probe");
 if (IS_ERR(probe_thread)) {
  err = PTR_ERR(probe_thread);
  GTP_INFO(TPD_DEVICE " failed to create probe thread: %d\n", err);
  return err;
 }

 do {
  msleep(20);
  count++;
  if (check_flag)
   break;
 } while (count < 50);
 GTP_INFO("tpd_i2c_probe done.count = %d, flag = %d", count, check_flag);
 return 0;
}

Как видно при вызове tpd_i2c_probe проверяется, если boot mode у нас равен RECOVERY_BOOT, то драйвер у нас не инициализируется ;) Т.е. со стороны MTK так и задумано что в recovery тач пользователю не нужен. Но ведь TWRP фактически использует только тач, скажете вы и будете правы. Но девайсы на платформе MTK никогда ведь не идут с TWRP в комплекте, а стоковому recovery тач естественно не нужен. Поэтому сейчас я вам расскажу как найти соответствующую проверку в бинарнике ядра, ну а непосредственно патч будет "домашним заданием" ) Должна же остаться какая-то "изюминка" ... Так вот. Для начала узнаем адрес tpd_i2c_probe, для этого от имени root выполняем:

sh -c "echo 0 > /proc/sys/kernel/kptr_restrict"
cat /proc/kallsyms | grep tpd_i2c_probe

В результате получаем нужный нам адрес 0xffffffc000760494. Далее загружаем в любом дизассемблер распакованное ядро (архитектура моего CPU - ARM64, поэтому offset нужной нам функции как видите 64-битный) с адреса 0xFFFFFFC000080000 (для 32-bit ядер - 0xC0008000) и переходим по найденному адресу:


На скриншоте выше наглядно видно и исходники и дизассемблированный код. На поиск нужной функции, как вы можете убедиться, и места проверки в ядре у нас ушло не более 5 минут. Теперь нам достаточно убрать условный переход по адресу 0xFFFFFFC0007604D0, заменив его NOP'ами или любой другой "пустой операцией" и собрать boot с модифицированным ядром назад. После чего при загрузке в recovery тачпад будет успешно инициализироваться.

Успехов вам!

p.s. Да, забыл сказать ... в данном примере мы разбирали инициализацию MediaTek gt91xx touch panel driver. Естественно, что в вашем устройстве может быть другой драйвер тача.

пятница, 4 сентября 2015 г.

Как получить образ Recovery из boot.img? Учимся работать с applypatch.

В этом посте я вкратце расскажу вам о том как получить образ recovery.img из boot.img, при условии что у нас на руках имеется только update.zip от прошивки телефона. Собственно на написание этого гайда меня сподвиг один из читателей моего блога, который умудрился зашить в Билайн Смарт Dual recovery от абсолютно другого аппарата и попросил о помощи. Прошивок под SP Flash Tool для данного аппарата мне найти не удалось (в этом случае все было бы намного проще, так как там образ стокового recovery уже лежит отдельно), но зато был найден update.zip от данного аппарата.

Вообщем все не просто, а очень просто. Единственное для работы нам понадобится любой телефон на Android с root-доступом и adb. Первое что мы делаем это извлекаем из архива с прошивкой update.zip следующие файлы:

  • boot.img - образ раздела boot
  • recovery-resource.dat (можно взять в system\etc) - набор ресурсов для добавления в образ recovery, так называемый bonus-file.
  • recovery-from-boot.p (в update\recovery) - файл патча (diff), который собственно и поможен нам преобразовать boot.img в recovery.img
  • install-recovery.sh (update\recovery\etc) - скрипт который используется ОС Android в штатном режиме, для восстановления раздела recovery из boot.
Далее все очень просто, смотрим в install-recovery.sh, оттуда нам понадобятся значения SHA1-хешей boot.img, recovery.img и самого патча. В моем случае это строка:

applypatch -b /system/etc/recovery-resource.dat EMMC:boot:4257792:294140ba217ceba662050400bb9488f494b6362b EMMC:recovery 3e9baf0e1ef24480a92d92c5566244a240480fcc 4634624 294140ba217ceba662050400bb9488f494b6362b:/system/recovery-from-boot.p

Теперь заливаем все перечисленные в списке файлы в любое устройство на Android через ADB. Я залил их в папку /data/local/tmp/recovery. Далее изучаем синтаксис утилиты applypatch (кстати ее исходники и собранный бинарник под Linux, если вы, например, хотите собрать ее самостоятельно или использовать ПК с Linux вместо телефона на Android, можно взять здесь):

usage: applypatch [-b <bonus-file>] <src-file> <tgt-file> <tgt-sha1> <tgt-size>
[<src-sha1>:<patch> ...]
   or  applypatch -c <file> [<sha1> ...]
   or  applypatch -s <bytes>
   or  applypatch -l

Filenames may be of the form
  MTD:<partition>:<len_1>:<sha1_1>:<len_2>:<sha1_2>:...
to specify reading from or writing to an MTD partition.

После чего копируем boot.img в recovery.img, например так - cp /data/local/tmp/boot.img /data/local/tmp/recovery.img ... и выполняем следующую команду, уже через ADB на Android устройстве:

applypatch -b /data/local/tmp/recovery/recovery-resource.dat /data/local/tmp/recovery/boot.img /data/local/tmp/recovery/recovery.img 3e9baf0e1ef24480a92d92c5566244a240480fcc 4634624 294140ba217ceba662050400bb9488f494b6362b:/data/local/tmp/recovery/recovery-from-boot.p

Здесь:

  • bonus-file: -b /data/local/tmp/recovery/recovery-resource.dat 
  • src-file: /data/local/tmp/recovery/boot.img 
  • tgt-file: /data/local/tmp/recovery/recovery.img 
  • tgt-sha1: 3e9baf0e1ef24480a92d92c5566244a240480fcc 
  • tgt-size: 4634624 
  • <src-sha1>:<patch>: 294140ba217ceba662050400bb9488f494b6362b:/data/local/tmp/recovery/recovery-from-boot.p

Где src-sha1 - это SHA1 хеш исходного файла, tgt-sha1 - это SHA1 хеш результирующего файла, который должен получиться в результате применения патча.

В результате в файле recovery.img, в который изначально мы скопировали boot.img, получится образ recovery.img, полученный применением патча recovery-from-boot.p. Как вы уже поняли, чтобы воспользоваться applypatch нам необходимо знать размер и SHA1 recovery, который должен получиться в итоге (tgt-sha1 и tgt-size), именно эти значения мы и взяли из install-recovery.sh.

Т.е. в процессе работы applypatch к boot.img применяется патч recovery-from-boot.p, после чего размер и sha1-хеш полученного файла сравниваются с указанными нами в аргументах командной строки. Если все совпадает - патч считается примененным корректно (т.е. это гарантирует что на выходе у нас верный образ recovery). По-хорошему, можно попробовать собрать applypatch и под Win32, а также сделать ее использование более простым, например, отключив проверку sha1 и размера результата, чтобы для патча было достаточно только исходного файла и соответствующего .p патча. Но особенной практической необходимости в этом я не вижу ...

p.s. Для тех кто хочет сам создавать файлы патчей в этом архиве imgdiff_bsdiff_tools.7z вы можете найти Win32 порты утилит bsdiff и imgdiff. Также присутствует калькулятор хешей (HashCalc) и исходники applypatch, на случай, если кто-то захочет попробовать собрать его под Win32. imgdiff.exe и imgdiff2.exe - это разные сборки одной и той же утилиты полученные из разных источников.

четверг, 2 апреля 2015 г.

Мегафон Login+ (MFLoginPH). PhilZ Touch Recovery (DeckerZ CWM 6)

"Дело было к вечеру, делать было нечего ... ", да и на 4PDA разгорелся небольшой спор о том, что лучше, CWM или TWRP. Ну и я недолго думая решил собрать PhilZ Touch для Мегафон Login+, почему именно его? Ну, скажем так, ради разнообразия. Т.к. по функциональности PhilZ Touch, естественно, превосходит TWRP - так, например, при создании backup'а можно выбрать не только формат tar, но и tar + gzip со сжатием, а следовательно созданный backup будет занимать меньше места (задать формат по-умолчанию можно в меню Default Backup Format), поддерживается внутренняя память телефона (в этой сборке PhilZ Touch внутренняя память телефона видна как /sdcard, а внешняя SD как /storage/sdcard1), естественно, поддерживается Touch (т.е. все пункты меню можно выбирать не только кнопками громкости, но и с помощью тача) и много других "вкусностей и полезностей". Вот несколько скриншотов:


Установка PhilZ Touch Recovery для Мегафон Login+ ничем не отличается от установки CWM, в посте Мегафон Login+ (MFLoginPH). Установка CWM и получение Root прав. есть подробнейшая инструкция по установке CWM. Единственное отличие - для прошивки вы используете не Login_Plus_CWM_recovery.img, а Login_Plus_PhilZ_Touch_CWM.img.

Важный момент (хотя может многие и сталкивались с этой особенностью) - если в процессе создания backup'а у вас погас экран (это штатная функция энергосбережения) нужно просто дождаться окончания его создания (или нажать на центральную аппаратную кнопку "Домик"), как только ресурсы телефона освободятся - экран автоматически будет включен. Плюс, при завершении создания backup'a телефон подаст длинный вибросигнал. Так что даже если в процессе создания backup'а экран у вас погас - вы не пропустите момент окончания его создания.

понедельник, 24 ноября 2014 г.

CWM Recovery для Alcatel OT-6036Y / OT-6050Y

Сегодняшний пост будет посвящен двум телефонам от Alcatel - Alcatel One Touch 6036Y Idol 2 MINI S и Alcatel One Touch 6050Y Idol 2S. Несмотря на то что эти модели появились в продаже в России уже довольно давно и ветки, посвященные данным моделям на множестве мобильных форумов, в частности, 4pda.ru успели набрать уже за сотню сообщений - полноценного CWM Recovery для 6036Y и 6050Y пока никто так и не собрал. Даже на зарубежных форумах, вроде xda-developers пока тишина.

Совместно с пользователем 4pda ruslan_3_ - мы решили восполнить этот пробел. И вот, после значительного количества потраченного времени и даже одного специально приобретенного для экспериментов аппарата - нам это все же удалось. На скриншоте вы видите запущенный на OT-6036Y CWM Recovery v6.0.4.9, точно такой же билд теперь есть и для его старшего собрата - OT-6050Y. Правда вот условия по которым этот recovery будет распространяться - пока еще не продуманы. Другими словами - выкладывать его в public или нет - мы пока не определились.

В идеале, конечно бы хотелось реализовать какую-то схему donate (добровольных пожертвований), где каждый желающий сможет поблагодарить разработчиков рублем. Но с учетом российских реалий и нашей с вами общей страсти к халяве - почему-то мне кажется что все это не сработает. Стоит только одному человеку скачать CWM, как он тут же появится на куче мобильных форумов и других ресурсов как их собственная разработка. Поэтому пока мы в раздумьях ... возможно позже мы и придем к решению - выложить все в public, но пока решение не принято - сам recovery мы выкладывать не будем.

Если у вас есть какие-то мысли, предложения, мнения - с удовольствием выслушаем их в комментариях. И пусть пока "релиза" еще не состоялось, но сама по себе новость "да, cwm возможен на 6036/6050 и он есть", думаю, будет приятна многим ... На этом пока все )

Обновлено 26/11/2014: Теперь CWM общедоступен, скачать его можно по ссылке ниже. Если вы хотите поддержать разработчиков, вы можете сделать это здесь.

Как установить CWM Recovery на Alcatel Idol 2 Mini S (Alcatel OT-6036Y)?

  1. Скачиваем архив cwm_alcatel_6036y_v2.7z
  2. Установить драйвера ADB из прилагаемого архива - AdbDriverInstaller.exe
  3. Перевести телефон в режим FastBoot (выключаем аппарат, далее удерживаем на нем кнопки Громкость Минус + Кнопка включения питания. До появления надписи Alcatel One Touch Idol 2 MINI S)
  4. Если вы все сделали правильно, эта надпись должна остаться на экране
  5. Подключаем телефон к ПК
  6. Запускаем файл check_device.cmd, если вы все сделали правильно, то вы увидите надпись, типа "9e0eb10 fastboot" (цифры могут быть другими). Если надпись появилась, переходим к следующему шагу, если нет усанавливаем драйвера из пункта 1.
  7. Запускаем файл flash_recovery.cmd и прошиваем CWM, по окончании прошивки телефон перезагрузится. Для входа в CWM при включении удерживайте кнопку Громкость Плюс + кнопку включения питания.

Как установить CWM Recovery на Alcatel Idol 2S (Alcatel OT-6050Y)?


Инструкция аналогична предыдущей, только скачиваете архив cwm_alcatel_6050y.7z (!)

Внимание! Recovery для OT-6036Y и OT-6050Y разные (другими словами, они несовместимы). Выбирайте файл CWM для вашей модели телефона.

FAQ по CWM 


Q. Куда создается Backup при backup'е на внутреннюю память и на SD?
A. Итак, если вы находитесь в CWM:

1. /sdcard - внутренняя память телефона
2. /storage/sdcard1 - SD карта

Если вы загрузились в Android:

1. /storage/sdcard0/clockworkmod - это место на SD (!) куда складываются backup'ы
2. /mnt/shell/emulated/clockworkmod - это место во внутренней памяти, куда складываются backup'ы. Увидеть эту папку можно подцепившись к телефону по ADB (root права при этом необязательны).

Q. Что делать, при попытке backup'а во внутреннюю память - при backup'е раздела data он не вмещается. Это нормально?
A. Вполне. По-умолчанию в CWM стоит формат .tar, это значит что все файлы помещаются в backup в несжатом виде. Естественно что так, во внутреннюю память все не войдет. 

Можно попробовать выбрать формат со сжатием, чтобы он уместился во внутреннюю память, правда в этом случае процесс backup'а будет ощутимо дольше. Заходим в меню backup and restore --> choose default backup format и выбираем там tar+gzip. После этого пробуем сделать backup to /sdcard (внутренняя память), скорее всего он поместится.