dopo svariate ricerche su internet (poco fruttuose) ho deciso di scrivere questa guida per chi come me è curioso e vuole capire la meccanica che c'è dietro al partizionamento dei cellulari MTK e non limitarsi a usare semplicemente dei file per ripartizionare preesistenti (se ne trovano diversi su internet)
premetto che ci sono arrivato più tramite analisi di file esistenti che informazioni "sicure" trovate su internet quindi potrebbero benissimo esserci degli errori
premetto anche che i test e le verifiche le ho fatte sullo zopo 990 quindi un MT6589T, non sono sicuro che per i precedenti dual core oppure nei prossimi octacore sia valido quello che scriverò qui di seguito.
iniziamo con il dire che i file MBR, EBR1 e EBR2 sono semplicemente dei file binari in formato master boot record quindi con una logica ben definita
quello che ci serve per poter analizzare e editare questi file è un editor esadecimale, in windows io uso HxD
ai fini del ripartizionamento della partizione /data (e quindi di conseguenza della sd interna) bisognerà modificare i file EBR1 e EBR2, il file MBR non verrà toccato ma spiego dall'inizio la logica di tutto partendo proprio dal MBR.
iniziamo con l'eseguire un comando sul cell (o tramite terminal emulator o tramite adb shell) per vedere le partizioni presenti:
che sul mio cellulare (ripartizionato con 4GB di /data) mi restituisce questo risultato:
codice:
partno: start_sect nr_sects partition_name
emmc_p1: 00000400 00000002 "ebr1"
emmc_p2: 00006800 00005000 "protect_f"
emmc_p3: 0000b800 00005000 "protect_s"
emmc_p4: 00016c00 00003000 "sec_ro"
emmc_p5: 00020c00 00145000 "android"
emmc_p6: 00165c00 0003f000 "cache"
emmc_p7: 001a4c00 00800000 "usrdata"
emmc_p8: 009a4c00 0308dd00 "fat"
ogni file boot record contiene i dati di 4 partizioni quindi nel MBR troveremo i dati delle prime 4 "ebr1", "protect_f", "protect_s", "sec_ro"
analizziamo il contenuto del MBR
quello che ci interessa sono le 4 righe a partire dall'offset 000001C0
ogni riga rappresenta una partizione, ricordo che la notazione è in esadecimale in little endian e cioè vengono scritti al contrario (il byte più significativo è a destra, per scrivere AABBCCDD si scrive DDCCBBAA)
start address è il settore da dove parte la partizione e la dimensione della partizione è indicata in blocchi (ogni blocco è 512 byte)
gli ultimi 2 byte della quarta riga (55 AA) indicano la fine del boot record
guardando l'output del comando cat /proc/emmc e il contenuto del MBR possiamo vedere le corrispondenze (a parte la partizione ebr1 che viene indicata come dimensione FFFFFFFF che non so spiegare )
per esempio guardiamo la "sec_ro" (la quarta partizione), il comando ci dice start 00016c00 e blocchi 00003000, nell'immagine start 006C0100 che girato è 00016C00 e blocchi 00300000 che girato è 00003000 quindi corrispondono
bene, questo era per far capire come funziona la logica che c'è dietro...adesso andiamo a analizzare i file EBR1 e EBR2 che sono quelli che bisognerà realmente modificare per ridimensionare la /data
nel MBR siamo arrivati alla partizione "sec_ro" quindi continuando nel file EBR1 si parte con la "android" (la system), "cache" e "usrdata" (la famosa /data dove si installano le app)
la quarta partizione nel file EBR1 non è la "fat" ma la ebr2
qui le cose si complicano un pelino perchè essendo inserite nel file EBR1 per avere un riscontro con l'output del comando c'è un offset da applicare (lo start sector della partizione ebr1 e quindi 00000400 che togliendo gli zeri non significativi diventa 400)
prendiamo ad esempio la terza partizione (la "userdata"), il comando ci dice start 001a4c00 e blocchi 00800000
nell'immagine leggiamo start 00481A00 quindi 001A4800 e aggiungendo l'offset 400 otteniamo 001A4C00 che corrisponde al comando
i blocchi 00008000 che girato è 00800000 e corrisponde anche questo
passiamo alla partizione "fat" presente nel EBR2
come per l'EBR1 anche nel EBR2 abbiamo un offset da sommare, l'offset lo ricaviamo direttamente dal file EBR1 alla quarta riga ed è l'indirizzo di partenza della partizione, dall'immagine vediamo che è 00B40100...girato diventa 0001B400 e senza gli zeri non significativi 1B400, questo sarà il nostro offset per il file EBR2
lo start della partizione "fat" corrisponde allo start della partizione "usrdata" + dimensione partizione "usrdata" - l'offset del EBR2 (in questo caso 1B400)
nel file EBR2 leggiamo che lo start della fat è 00949800
dal file EBR1 vediamo lo start "usrdata" (lo scrivo già girato per comodità) 001A4800 e blocchi 00800000, li sommiamo e togliamo l'offset 001A4800+0080000-1B400=00989400 che girato corrisponde allo start del EBR2 00949800
la dimensione riportata nel EBR2 non è quella reale ma corrisponde a FFFFFFFF - lo start della "fat" - l'offset....questo sta praticamente a indicare "fino alla fine dello spazio disponibile"
FFFFFFFF-00940800-1B400=FF65B7FF che girato fa FFB765FF e corrisponde perfettamente al file EBR2
*******************************
fino ad adesso abbiamo guardato i file reali da 4GB, facciamo invece un esempio pratico per portare la /data a 10GB
iniziamo a calcolare quanti blocchi sono 10GB
10*1024*1024*1024/512=20971520 che in esadecimale corrisponde a 01400000 che in little endian diventa 00004001
visto che la partizione parte sempre dallo stesso punto nella terza riga del EBR1 cambieremo solo la dimensione in blocchi
da:
codice:
00 00 83 00 00 00 00 48 1A 00 00 00 80 00 00 00
a:
codice:
00 00 83 00 00 00 00 48 1A 00 00 00 40 01 00 00
ovviamente avendo aumentato la partizione /data di conseguenza dobbiamo diminuire la partizione fat e qui entra in gioco il file EBR2
abbiamo detto che lo start della partizione fat è lo start+dimensione della partizione "usrdata" - l'offset del EBR2
quindi start=001A4800+01400000-1B400=01589400 che in little endian è 00945801
e i blocchi sono FFFFFFFF-01589400-1B400=FEA5B7FF che in little endian é FFB7A5FE
quindi bisogna modificare la prima riga del EBR2 da:
codice:
00 00 83 00 00 00 00 94 98 00 FF B7 65 FF 00 00
a:
codice:
00 00 83 00 00 00 00 94 58 01 FF B7 A5 FE 00 00
ecco fatta la partizione da 10GB
*******************************
ok dopo tutto questo spiegone (probabilmente pure spiegato male, scusate ma ho scritto tutto di getto) vi avverto che ho preparato un foglio elettronico che fa tutti i calcoli per voi e indica come modificare i file EBR1 e EBR2
scusate per l'impaginazione ma sono secoli che non uso un foglio elettronico...ho usato libreoffice quindi è salvato nel suo formato, se serve in altri formati comunicatemelo che provvedo a convertirlo (se in libreoffice è previsto il formato)
per usare questo foglio elettronico dovrete solo impostare i GB che volete avere come partizione /data, l'offset del EBR2 (ricavabile come ho spiegato prima dal file EBR1) e l'indirizzo di start della partizione /data (ricavabile sempre dal file EBR1 come detto prima)
impostati questi 3 valori il foglio calcolerà tutto automaticamente, ecco uno screenshot di esempio:
i 3 campi cerchiati di rosso sono i 3 valori da impostare
DOWNLOAD:
formato libreoffice Partizioni.ods
formato excel Partizioni.xls
ricordo che una volta modificati i file EBR1 e EBR2 vanno flashati sul cellulare o tramite flashtools oppure tramite la custom recovery con un apposito zip, se serve posso postarne uno di esempio.
RIPARTIZIONARE VUOL DIRE formattare sia la /data che la sd interna quindi prima di procedere è necessario fare un backup completo del cellulare (anche della memoria sd interna) se non si vogliono perdere le ventuali foto/musica/video/etc oltre alle app e impostazioni
Non mi assumo nessuna responsabilità per eventuali danni