четверг, 20 октября 2016 г.

Как создать EXT4 образ раздела нужной длины?

В этом коротком посте я расскажу вам о том как создать образ файловой системы EXT4 раздела нужной длины. Зачем это может пригодится? Ну например, вы хотите прошить какое-нибудь устройство на базе платформы Mediatek через SP Flash Tool с использованием режима Firmware Upgrade, например, для переразметки. Как известно, в этом режиме необходимо наличие образов всех разделов для прошивки. А что делать если образов разделов cache и userdata у вас нет? Несмотря на то что изначально эти разделы могут быть пустыми, для прошивки все равно потребуются их образы.

Первое что мы делаем это определяемся с размером создаваемого образа. Посмотреть необходимый размер раздела для MTK можно в Scatter файле. Например для раздела userdata в scatter'е у нас указан partition_size 0x4DF80000, т.е. 1308098560 байт. Для создания образа нам понадобится ПК с Ubuntu, в моем случае это был ноутбук с Ubuntu 16.x.

Для начала установим утилиту make_ext4fs, т.к. она есть в пакете android-tools-fsutils, то просто дадим команду:
sudo apt install android-tools-fsutils
После того как пакет будет установлен, перейдем в домашнюю папку (cd ~) и создадим в ней директорию data (mkdir data). Т.к. в принципе образ у нас пустой, то дополнительно помещать в папку data ничего не будем, а просто дадим команду:
make_ext4fs -s -l 1308098560 -a data userdata_new.img data/
Где ключ -l задает размер раздела, -a - точку монтирования Android, а -s указывает нам на то, что нам необходимо создать sparsed образ.

В результате получаем что-то вроде:


В итоге получаем файл userdata.img размером 22 950 444 байт. Напомню что мы делали именно sparsed image (ключ -s), если же сделать образ unsparsed, т.е. не указывать ключ -s, то размер образа будет равен реальному размеру раздела:


Почему я решил рассказать обо всем этом сейчас? Дело в том что последние версии SP Flash Tool, например v5.1620.00 проверяют фактический размер sparsed раздела. И если например в scatter'е у вас указан размер x, а фактический размер sparsed image'а, который вы пытаетесь залить в устройство y, при этом y > x, то SP Flash Tool выдаст вам ошибку S_NOT_ENOUGH_STORAGE_SPACE, что вообщем-то логично. Надеюсь что этот пост чем-то помог вам.

p.s. Ну и еще один небольшой пример напоследок. Как перепаковать sparsed образ раздела system в unsparsed, т.е. raw образ заданной длины. Последовательность команд следующая:

simg2img system2.img system2.raw
mkdir system2
sudo mount -t ext4 -o loop system2.raw system2/
sudo make_ext4fs -l 2256535552 -a system systemnew.img system2/

Немного пояснений: в файле system2.img у нас был sparsed образ раздела system определенной длины. Сначала с помощью утилиты simg2img мы преобразовали его в raw образ, затем смонтировали его в папку, и потом сделали новый образ заданной длины на основе распакованного.

Комментариев нет :

Отправить комментарий