unir unificar quitar particiones particionar particion para nand memoria internas interna gestionar eliminar desde android shell partition

unificar - ¿Cómo puedo identificar las particiones de un dispositivo Android desde el shell?



unificar memoria interna y nand flash android (2)

Estoy tratando de encontrar qué partición se usa para qué, por ejemplo, /boot , /recovery , /system , desde adb shell . Si bien esto es trivial para las particiones actualmente montadas (usando los comandos mount o df , vea, por ejemplo, cómo identificar los nombres de las particiones ), esto parece ser complicado cuando se trata de particiones que no están montadas actualmente (como /recovery cuando se inicia en "modo usuario" ").

Hay un tutorial en XDA , pero no funcionó con ninguno de los dispositivos que probé:

  • cat /proc/mtd : esto está vacío o no existe
  • cat /proc/emmc : esto está vacío o no existe
  • cat /proc/dumchar_info : no existente (MTK / MediaTek)
  • ls -al /dev/block/platform/*/by-name : no existe o no tiene los detalles deseados
  • parted acaba de producir un Error: Can''t have a partition outside the disk! en /dev/block/mmcblk1 (aunque simplemente falta la columna "nombre" para /dev/block/mmcblk0 ).

Así que estoy en una pérdida. Sé que hay aplicaciones como DiskInfo que pueden mostrar esos detalles, por lo que deben almacenarse en algún lugar del dispositivo. Sin embargo, modificar el dispositivo (instalando una aplicación) no es una opción en mi caso.

Así que básicamente mi pregunta se quema a:

¿Dónde está almacenada esta información en el dispositivo Android?

Si es posible, se prefiere un enfoque genérico. Si no, un "intento y error" de varios enfoques ( if..elseif..fi ) también funcionaría.

Para el fondo: un ejemplo de uso sería "Quiero recuperar solo la partición /boot " (obtener una imagen de ella a través de dd ). No convendría primero capturar todas las particiones y evaluarlas más tarde, demasiado tiempo y demasiados datos producidos;): esto ya describe la intención: escribir una pequeña herramienta para recuperar una imagen de disco en particular.


Como parece que no hay una "manera única" de lograrlo, comencé a combinar ideas de todas partes, uniéndolas en un script (o más bien en una "biblioteca de scripts") para que se verifiquen secuencialmente (hasta que se hizo un buen golpe), y Adebar eso en mi "Herramienta de Documentación de Dispositivos" llamada Adebar . Los interesados ​​pueden encontrarlo en el archivo lib/partitions.lib . Debido a que Adebar es de código abierto (GPLv2), puede copiarlo y usarlo libremente, o bien, bifurcar el proyecto y mejorarlo.

La solución completa es un poco larga para publicar aquí (como se dijo, puedes obtenerla en Github), pero como la política de la SE es incluir al menos la parte general en la publicación, esto es lo que hace:

Diferentes fuentes proporcionan diferentes conjuntos de detalles, por lo que primero prueba los "mejores" y luego recurre hacia abajo hasta que al menos se encuentra algo.

  • /proc/dumchar_info proporciona la mayoría de los detalles, así que esto se intenta primero. Los usuarios felices de MTK obtendrán esto.
  • /proc/mtd es la segunda mejor fuente.
  • /proc/emmc debería tener casi tanto como los candidatos anteriores, pero es un poco difícil de usar
  • /dev/block/platform/*/by-name , cotejado con ...
  • /proc/partitions cotejado con /proc/mounts nos da al menos las particiones montadas

Así que el script que he creado básicamente recorre las fuentes en este orden, deteniéndose tan pronto como pudo recopilar detalles (por ejemplo, si se encontró /proc/dumchar_info , no es necesario analizar todos los demás). Todos ellos colocados en funciones separadas, devolviendo datos usando la misma estructura, incluso se podrían combinar los resultados de todos ellos.

Si alguien puede encontrar una solución mejor, por supuesto, siempre estoy abierto a la idea :)


Puede obtener la información de la partición montada en Linux como https://.com/a/15639867/629118 , pero no creo que el kernel de Linux no sepa acerca de la partición de boot y recovery si /dev/block/platform/**/by-name no lo tiene.

Por lo tanto, puede usar la información actualmente montada para adivinar qué partición es de boot o recovery o alguna otra cosa en / dev / block / * que no esté montada.

De hecho, fastboot solo envía el nombre de la partición que desea flashear. Significa que solo el cargador de arranque para fastboot conoce la información, supongo.

https://github.com/android/platform_system_core/blob/8163104b3feb575a321b194a70ecb9873a70b29d/fastboot/fastboot_protocol.txt