Основной вопрос о прошивке резервных копий nandroid

Я хочу знать, что когда мы прошиваем определенные образы разделов (скажем, 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 и других форумах читал, что люди успешно сделали этот мод и добились изменения размеров разделов, но сначала хочу понять, как это происходит.

Ответы (1)

Поскольку у меня есть телефон на базе 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 на любое устройство независимо от размера его внутренней памяти. Затем у вас есть индивидуальные EBR1EBR2) индивидуальные для каждой модели.

Я подумал, могу ли я изменить EBS1 и изменить адресацию LBA так, чтобы третий раздел начинался с 2097152 дополнительных секторов (что составляет 1024 МБ или 1 ГБ, что достаточно для меня), будет ли он автоматически увеличивать мой раздел /data на 1 ГБ и соответственно уменьшите /sdcard на 1GB

Я не совсем уверен в деталях этого.

Вместо этого я поменял местами размеры разделов /dataи на xda-developers.com . Затем в Android используйте приложение Link2SD , которое использует раздел ext4 размером 2 ГБ на внешней SD-карте и перемещает большие приложения./emmcEBR1

Просто решил добавить, что если что-то пойдет не так, как это было изначально для меня, вы можете восстановить, используя резервные копии оригинала 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.