¿Cómo enumerar todas las particiones principales con sus etiquetas?

Quiero averiguar todas las particiones en mi dispositivo junto con su resp. puntos de montaje o etiquetas (es decir, para saber qué partición contiene system, recovery, boot, etc.). Esto debe ser independiente del dispositivo (ya que tengo varios dispositivos). El objetivo es ddellos y saber qué imagen es qué.

He visto Comando para enumerar los puntos de montaje de partición. – sin embargo, allí el objetivo era solo una lista de particiones de particiones montadas. Los necesito todos, y por ejemplo /recovery, no está montado al arrancar en "modo de trabajo normal".

Hasta ahora, mi investigación ha arrojado varios enfoques, pero ninguno de ellos funciona en ninguno de los dispositivos que he probado:

  • 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: ya sea inexistente, o no tener los detalles deseados

¿Alguna idea de lo que me pude haber perdido? Por supuesto, podía recorrer todos los /dev/block/mmcblk0p*dispositivos, tirarlos y ordenarlos más tarde, pero luego tuve que repetir esa investigación para cada uno de mis dispositivos (y nuevamente cuando alguien aparece con otro), así que esa no es una solución.


EDITAR: Tenga en cuenta la etiqueta de Tendré que acceder a esa información a través de ADB, y no quiero instalar alguna aplicación en un dispositivo que me entregaron para investigar. Considérelo "antecedentes forenses" (sin cambios en el dispositivo), aunque eso no es exactamente cierto;)

También me disculpo por mi mala redacción inicial: los "puntos de montaje" solo son interesantes en la medida en que revelan el propósito de la partición. No quiero montarlos/remontarlos :)

Respuestas (4)

Como ya muestran las respuestas existentes, parece que no hay una "forma única" de lograrlo. Así que comencé a combinar ideas de todas partes, uniéndolas en una secuencia de comandos (o más bien una "biblioteca de secuencias de comandos") para verificarlas secuencialmente (hasta que se logró un buen resultado) y las integré en mi "Herramienta de documentación del dispositivo" llamada Adebar . Los interesados ​​pueden encontrarlo en el lib/partitions.libarchivo. Como Adebar es de código abierto (GPLv2), no dude en copiarlo y usarlo, o bifurcar el proyecto y mejorarlo.

La solución completa es un poco larga para publicar aquí (como se dijo, puede obtenerla en Github), pero como nuestra política 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 se encuentra al menos algo.

  • /proc/dumchar_infoda la mayor cantidad de detalles, así que esto se prueba primero. Los usuarios felices de MTK obtendrán esto.
  • /proc/mtdes la segunda mejor fuente.
  • /proc/emmcdebería tener casi tanto como los candidatos anteriores, pero es un poco complicado de usar
  • /dev/block/platform/*/by-name, cotejado con…
  • /proc/partitionscotejado con /proc/mountsnos da al menos las particiones montadas

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

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

Me topé con esta pregunta. Me gusta el reto...

Herramientas que utilicé: BusyBox

Se me ocurrieron 3 comandos (uno que enumeró) para brindar información sobre las particiones

busybox ls -QAl --color=never /dev/block/platform/*/by-name  
Producción:
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "DDR" -> "/dev/block/mmcblk0p4"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "aboot" -> "/dev/block/mmcblk0p5"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "abootf" -> "/dev/block/mmcblk0p16"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "boot" -> "/dev/block/mmcblk0p18"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "cache" -> "/dev/block/mmcblk0p41"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "dbi" -> "/dev/block/mmcblk0p3"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "dbibak" -> "/dev/block/mmcblk0p10"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "drm" -> "/dev/block/mmcblk0p36"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "eksst" -> "/dev/block/mmcblk0p29"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "encrypt" -> "/dev/block/mmcblk0p28"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "factory" -> "/dev/block/mmcblk0p39"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "fota" -> "/dev/block/mmcblk0p34"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "fsc" -> "/dev/block/mmcblk0p25"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "fsg" -> "/dev/block/mmcblk0p24"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "grow" -> "/dev/block/mmcblk0p43"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "laf" -> "/dev/block/mmcblk0p33"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "misc" -> "/dev/block/mmcblk0p32"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "modem" -> "/dev/block/mmcblk0p1"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "modemst1" -> "/dev/block/mmcblk0p21"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "modemst2" -> "/dev/block/mmcblk0p22"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "mpt" -> "/dev/block/mmcblk0p38"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "pad" -> "/dev/block/mmcblk0p8"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "pad1" -> "/dev/block/mmcblk0p23"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "pad2" -> "/dev/block/mmcblk0p27"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "persist" -> "/dev/block/mmcblk0p19"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "rct" -> "/dev/block/mmcblk0p30"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "recovery" -> "/dev/block/mmcblk0p20"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "rpm" -> "/dev/block/mmcblk0p6"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "rpmbak" -> "/dev/block/mmcblk0p11"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "rpmf" -> "/dev/block/mmcblk0p13"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "sbl1" -> "/dev/block/mmcblk0p2"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "sbl1b" -> "/dev/block/mmcblk0p9"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "sdif" -> "/dev/block/mmcblk0p15"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "sns" -> "/dev/block/mmcblk0p37"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "spare1" -> "/dev/block/mmcblk0p17"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "spare2" -> "/dev/block/mmcblk0p31"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "spare3" -> "/dev/block/mmcblk0p35"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "ssd" -> "/dev/block/mmcblk0p26"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "system" -> "/dev/block/mmcblk0p40"
lrwxrwxrwx    1 0        0               20 Jan 30  1970 "tz" -> "/dev/block/mmcblk0p7"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "tzbak" -> "/dev/block/mmcblk0p12"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "tzf" -> "/dev/block/mmcblk0p14"
lrwxrwxrwx    1 0        0               21 Jan 30  1970 "userdata" -> "/dev/block/mmcblk0p42"

busybox blkid
Producción:
/dev/block/vold/179:65: LABEL="ANDROID" UUID="87B8-10F1"
/dev/block/mmcblk1p1: LABEL="ANDROID" UUID="87B8-10F1"
/dev/block/mmcblk0p42: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p41: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p40: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p38: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p37: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p36: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p19: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b"
/dev/block/mmcblk0p1: UUID="00BC-614E"

busybox df -ma
Producción:
Filesystem           1M-blocks      Used Available Use% Mounted on
tmpfs                     1415         0      1415   0% /dev
devpts                       0         0         0   0% /dev/pts
proc                         0         0         0   0% /proc
sysfs                        0         0         0   0% /sys
selinuxfs                    0         0         0   0% /sys/fs/selinux
debugfs                      0         0         0   0% /sys/kernel/debug
none                         0         0         0   0% /acct
none                      1415         0      1415   0% /sys/fs/cgroup
tmpfs                     1415         0      1415   0% /mnt/asec
tmpfs                     1415         0      1415   0% /mnt/obb
none                         0         0         0   0% /dev/cpuctl
/dev/block/platform/msm_sdcc.1/by-name/system                              2524       715      1808  28% /system
/dev/block/platform/msm_sdcc.1/by-name/userdata                         25620      5066     20514  20% /data
/dev/block/platform/msm_sdcc.1/by-name/cache                           834        13       820   2% /cache
/dev/block/platform/msm_sdcc.1/by-name/persist                            31         4        27  13% /persist
/dev/block/platform/msm_sdcc.1/by-name/modem                            64        56         7  88% /firmware
/dev/block/platform/msm_sdcc.1/by-name/sns                             8         4         4  52% /sns
/dev/block/platform/msm_sdcc.1/by-name/drm                             8         4         3  56% /persist-lg
/dev/block/platform/msm_sdcc.1/by-name/mpt                            31        13        18  41% /mpt
/dev/fuse                25620      5066     20514  20% /mnt/shell/emulated
/dev/block/vold/179:65   60891     10820     50071  18% /mnt/media_rw/sdcard1
/dev/fuse                60891     10820     50071  18% /storage/sdcard1
¡Gracias por tus esfuerzos, Ryan! También he jugado busybox(que desafortunadamente no está disponible en los "dispositivos de algunos amigos" que me entregan). blkidno revela qué partición es (arranque, recuperación, etc.), y */by-name/*no existe en todos los dispositivos (y cuando lo hace, los nombres a veces son bastante crípticos; por ejemplo, en mi LG Optimus 4X, los nombres son todos 3- chars solamente y no necesariamente "hablando"). dfsolo enumera los dispositivos montados, por lo que no mostrará, por ejemplo, la recuperación cuando se ejecuta en "modo normal", por lo que aquí es más fácil de usar /proc/mounts.
Es posible que también desee preguntar esto sobre Unix y Linux . Es posible que conozcan formas de obtener la información. Todo lo que he investigado dice 'fdisk' u otras herramientas que no devuelven nada o no existen en el sistema Android.
Esa fue mi experiencia también. Hice una pregunta relacionada sobre SO con una perspectiva diferente, pero aún no obtuve respuesta. Me temo que estoy pidiendo lo imposible. Es bastante fácil de lograr en dispositivos compatibles /proc/mtd, pero desafortunadamente, eso ya no parece estar poblado con dispositivos actuales. En algunos dispositivos, incluso encontré .fstabarchivos, pero nuevamente, a) no en todos, yb) incluso si no parecían confiables (algunas partes definitivamente estaban mal allí).

KPARTX

El comando kpartx lee tablas de particiones y asigna particiones a archivos de dispositivos. Funciona en dispositivos e imágenes de disco. Esto significa que podemos asignar particiones HFS en una imagen de disco a un archivo de dispositivo de bloque especial y montar esas particiones dirigiendo ese archivo de dispositivo de bloque como si fuera parte de un dispositivo adjunto.

http://linuxsleuthing.blogspot.com/2012/10/christmas-come-early-hfshfs-mounting.html

Los ejemplos en el enlace son enemigos de MacBook Pro, pero diferentes imágenes de disco deberían funcionar bien siempre que se presenten a GNU Linux en RAW. (xmount - ver más abajo)

usage : kpartx [-a|-d|-l] [-f] [-v] wholedisk

-a add partition devmappings
-r devmappings will be readonly
-d del partition devmappings
-u update partition devmappings
-l list partitions devmappings that would be added by -a
-p set device name-partition number delimiter
-g force GUID partition table (GPT)
-f force devmap create
-v verbose
-s sync mode. Don't return until the partitions are created`

montaje x

xmount le permite convertir sobre la marcha entre múltiples tipos de imágenes de disco duro de entrada y salida. xmount crea un sistema de archivos virtual usando FUSE (Filesystem in Userspace) que contiene una representación virtual de la imagen de entrada. La representación virtual puede estar en DD, DMG, VHD, formato de archivo de disco virtual de VirtualBox o en formato de archivo VMDK de VmWare. Las imágenes de entrada pueden ser archivos sin formato DD, EWF (Formato de compresión de testigo experto) o AFF (Formato forense avanzado). Además, xmount también admite el acceso de escritura virtual a los archivos de salida que se redirige a un archivo de caché. Esto hace posible iniciar imágenes de disco duro adquiridas utilizando QEMU, KVM, VirtualBox, VmWare o similares.

https://www.pinguin.lu/xmount


Puedo proporcionar detalles e información adicionales si es necesario o necesario.

Admiro tu entusiasmo, pero: He revisado los dispositivos que tengo aquí, ninguno tiene esos comandos disponibles. Adivinado por sus enlaces, esas son herramientas disponibles para Linux, pero las particiones para investigar están en dispositivos Android, como se describe, y no se puede acceder directamente desde una máquina Linux. Además: la asignación de una partición a un dispositivo no revela qué contiene (¿sistema? ¿datos? ¿arranque?), por lo que kpartx está fuera. xmount tampoco parece resolver eso.
Realmente pensé que estaba en algo. Lo intenté. Gracias por responder tan rápido. Mantendré mi nariz en la piedra de afilar.
¡Estoy agradecido por tus esfuerzos! Es solo que los resultados no coinciden, lo siento. Imagine lo siguiente: necesito tomar la /recoverypartición de un dispositivo en ejecución. Eso no está montado en modo normal. ¿Cómo calculo qué partición elegir? Con lo anterior, tuve que elegirlos todos y averiguarlo más tarde. Produce demasiados datos y tarda demasiado.
Esa aplicación DiskInfo le mostrará la partición de recuperación desmontada. Acabo de comprobar, el mío (HTC One V) es mmcblk0p21. Es bastante detallado para una aplicación.
Esa fue la otra respuesta :) Gracias, lo comprobaré. Podría funcionar como una solución alternativa (cuando es posible instalar una aplicación y evaluar esas cosas manualmente). Solo me preguntaba: si una aplicación puede hacer eso, debe haber un lugar donde se almacenen esos detalles...
Mi sentimiento, pero donde. Probablemente no esté listado/almacenado de la manera que estamos buscando.
¡Ese fue un comentario de oro! Debería haber formulado la pregunta completamente diferente. La forma más fácil es lo que uno piensa al final... Pero reformularlo de esa manera ahora haría que sus respuestas fueran incorrectas. Supongo que mejor hago eso como una nueva pregunta. Aquí o en SO, tengo que pensarlo. Los desarrolladores pueden tener un mejor conocimiento de eso, pero OTOH, es posible que presenten código Java y llamadas al sistema, lo que no me ayuda en absoluto... Qué asco: cómo identificar los nombres de las particiones (pero de nuevo, solo para las que están montadas actualmente). ...)

DiskInfo será la aplicación que desee. Mostrará todos los puntos de montaje, además de todas las particiones desmontadas y temporales.

Esta es solo una interfaz gráfica, sin ninguna otra funcionalidad real. Perfecto para su necesidad. Esto requiere ser utilizado en un dispositivo completamente iniciado. La raíz no es necesaria.

Captura de pantalla
Captura de pantalla (haga clic para una variante más grande)

Lo siento, absolutamente no. Debes haberte perdido la command-lineetiqueta :) Supongo que será mejor que lo escriba explícitamente. Conozco varias aplicaciones que muestran estos detalles, pero necesito acceder/recopilarlos a través adb shellde , y sin la ayuda de una aplicación adicional (no siempre puedo instalarla primero en un dispositivo que me entreguen).
Ups. No lastimará mis sentimientos, ¿quieres que elimine esto (para que no te engañen)?
Solo si sientes la necesidad. Podría ser útil para otra persona que busque los mismos detalles por "otros medios". De lo contrario, lo había marcado como "NAA" (no es una respuesta);) No lo rechazaré (podría dar los detalles solicitados, no lo verifiqué, muestra qué partición contiene qué, como se describe en mi pregunta) ?) – pero tampoco lo votaré/aceptaré;)
Sí, mostrará para qué sirve la partición (que contiene), simplemente no mostrará el contenido real.
¡Está bien, así que desde ese punto coincide! Así que por favor, no borres esta respuesta :)