Я хочу знать, что когда мы прошиваем определенные образы разделов (скажем, system.img, data.img, cache.img и т. д.), то как программа узнает, куда именно поместить байты этих разделов? Например, если я прошиваю system.img, какой сектор CHS/LBA он будет считать началом этого блока? Если он основан на таблицах MBR/EBR1, что произойдет, если я также прошиваю MBR/EBR1?
Причина, по которой я спрашиваю, заключается в том, что я хочу немного изменить разбиение на разделы в EBR1, чтобы больше места было выделено для /data
раздела, а не для /sdcard
. У меня есть старый, но хороший смартфон на базе MediaTek (MTK-6577) под названием Karbonn-A30, который отлично подходит по качеству сборки и почти во всех других аспектах, но у него всего 500 МБ внутренней памяти (раздел на языке Linux), /data
который недостаточно хорош для приложений. В настоящее время разделы MBR и EBR1 выглядят следующим образом:
$disktype MBR
--- MBR
Regular file, size 512 bytes
DOS/MBR partition map
Partition 1: 2.000 TiB (2199023255040 bytes, 4294967295 sectors from 1024)
Type 0x05 (Extended)
Partition 2: 10 MiB (10485760 bytes, 20480 sectors from 18432)
Type 0x83 (Linux)
Partition 3: 10 MiB (10485760 bytes, 20480 sectors from 38912)
Type 0x83 (Linux)
Partition 4: 650 MiB (681574400 bytes, 1331200 sectors from 113152)
Type 0x83 (Linux)
$disktype EBR1
--- EBR1
Regular file, size 512 bytes
DOS/MBR partition map
Partition 1: 376 MiB (394264576 bytes, 770048 sectors from 1443328)
Type 0x83 (Linux)
Partition 2: 1.293 GiB (1388314624 bytes, 2711552 sectors from 2213376)
Type 0x83 (Linux)
Partition 3: 1.998 TiB (2196501691904 bytes, 4290042367 sectors from 4924928)
Type 0x83 (Linux)
Почему этот последний раздел, который соответствует, /sdcard
остается таким большим (1,998 ТиБ), я не понимаю! Поскольку на моем фактическом разделе есть хорошие 2,5 ГБ свободного места /sdcard
, я подумал, могу ли я изменить EBS1 и изменить адресацию LBA, чтобы третий раздел начинался с 2097152 дополнительных секторов (что составляет 1024 МБ или 1 ГБ, что достаточно хорошо). для меня), будет ли он автоматически увеличивать мой раздел на 1 ГБ и соответственно /data
уменьшать на 1 ГБ? /sdcard
На XDA и других форумах читал, что люди успешно сделали этот мод и добились изменения размеров разделов, но сначала хочу понять, как это происходит.
Поскольку у меня есть телефон на базе MTK-6577, и недавно мне пришлось заняться восстановлением сломанной таблицы разделов, я подумал, что попробую ответить на этот вопрос.
Я хочу знать, что когда мы прошиваем определенные образы разделов (скажем, system.img, data.img, cache.img и т. д.), то как программа узнает, куда именно поместить байты этих разделов?
Если вы прошиваете известные точки монтирования, /system, /data, /cache
вам не нужно знать о базовой структуре, просто достаточно ли места и в правильном ли формате (например, ext4). Точки монтирования указаны в vold.fstab
.
Однако, если вы используете инструмент для прошивки низкого уровня, такой как SP Flash, вам также потребуется изменить связанный файл разброса в соответствии с новым расположением разделов, поскольку он будет напрямую обращаться к адресам памяти для разделов.
Пример точек монтирования файловой системы для MT-6577 (скопировано из /tmp/recovery.log
):
CWM-based Recovery v6.0.2.8
recovery filesystem table
=========================
0 /tmp ramdisk (null) (null) 0
1 /boot emmc /dev/bootimg (null) 0
2 /cache ext4 /dev/block/mmcblk0p4 (null) 0
3 /data ext4 /dev/block/mmcblk0p5 (null) 0
4 /misc emmc /dev/misc (null) 0
5 /recovery emmc /dev/recovery (null) 0
6 /emmc vfat /dev/block/mmcblk0p6 (null) 0
7 /system ext4 /dev/block/mmcblk0p3 (null) 0
8 /sdcard vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 0
9 /sd-ext auto /dev/block/mmcblk1p2 (null) 0
Почему этот последний раздел, соответствующий /sdcard, остается таким большим (1,998 ТиБ), я не понимаю.
Это результат использования GPT
старых MBR
таблиц разделов. Это специальный расширенный раздел с максимальным 32-битным диапазоном адресов (2 ТБ). Это позволяет загружать MBR на любое устройство независимо от размера его внутренней памяти. Затем у вас есть индивидуальные EBR1
(и EBR2
) индивидуальные для каждой модели.
Я подумал, могу ли я изменить EBS1 и изменить адресацию LBA так, чтобы третий раздел начинался с 2097152 дополнительных секторов (что составляет 1024 МБ или 1 ГБ, что достаточно для меня), будет ли он автоматически увеличивать мой раздел /data на 1 ГБ и соответственно уменьшите /sdcard на 1GB
Я не совсем уверен в деталях этого.
Вместо этого я поменял местами размеры разделов /data
и на xda-developers.com . Затем в Android используйте приложение Link2SD , которое использует раздел ext4 размером 2 ГБ на внешней SD-карте и перемещает большие приложения./emmc
EBR1
Просто решил добавить, что если что-то пойдет не так, как это было изначально для меня, вы можете восстановить, используя резервные копии оригинала MBR
и ERB1
файлы для adb shell
подключения к вашему телефону в режиме восстановления.
Восстановить данные раздела:
dd if=/tmp/MBR of=/dev/block/mmcblk0
dd if=/tmp/EBR1 of=/dev/block/mmcblk0p1
Да, и вручную создать резервную копию в первую очередь:
dd if=/dev/block/mmcblk0 of=/tmp/MBR bs=512 count=1
dd if=/dev/block/mmcblk0p1 of=/tmp/ERB1 bs=512 count=1
Смонтируйте внешнюю SD-карту из CWM, и вы можете скопировать файл в / из /sdcard
.