Como listar todas as principais partições com seus rótulos?

11

Quero descobrir todas as partições no meu dispositivo, juntamente com as respectivas. pontos ou etiquetas de montagem (ou seja, para saber qual partição está segurando system, recovery, boot, etc.). Isso precisa ser independente do dispositivo (como eu tenho vários dispositivos). O objetivo é para ddeles e saber qual imagem é o quê.

Eu vi o Command para listar os pontos de montagem da partição? - no entanto, o objetivo era apenas uma lista de partições montadas. Eu preciso de todos eles e, por exemplo, /recoverynão está montado ao inicializar no "modo de trabalho normal".

Até agora, minha pesquisa trouxe várias abordagens - mas nenhuma delas funciona em nenhum dos dispositivos que eu testei:

  • cat /proc/mtd: vazio ou inexistente
  • cat /proc/emmc: vazio ou inexistente
  • cat /proc/dumchar_info: inexistente (MTK / MediaTek)
  • ls -al /dev/block/platform/*/by-name: inexistente ou sem os detalhes desejados

Alguma idéia do que eu poderia ter perdido? É claro que eu poderia andar com todos os /dev/block/mmcblk0p*dispositivos, despejá-los e resolvê-los mais tarde - mas então tive que repetir essa investigação para todos os meus dispositivos (e novamente quando alguém aparecer com outro), então isso não tem solução.


Edição: Observe a marca de para esta pergunta. Vou ter que acessar essas informações via ADB e não quero instalar algum aplicativo em um dispositivo que me foi entregue para investigação. Considere "antecedentes forenses" (sem alterações no dispositivo), embora isso não seja exatamente verdade;)

Também peço desculpas por minhas frases errôneas iniciais: os "pontos de montagem" são interessantes apenas até o momento, revelando o objetivo da partição. Eu não quero montar / remontar eles :)

Izzy
fonte
Espero que você não se importe
Adicionei
@HasH_BrowN Realmente não cumpre o objetivo (não estou interessado em montar aqui, razão pela qual não o apliquei inicialmente), mas também não dói;)
Izzy
Estou compondo outra resposta para você. A resposta apontando para o KPARTX funcionará para você? Ele parece correto.
HasH_BrowN
Nenhuma idéia antes de eu vê-lo, eu tenho medo ...
Izzy

Respostas:

7

Como as respostas existentes já mostram, parece não haver uma "maneira única" de conseguir isso. Então, comecei a combinar idéias de todo o lado, juntando-as a um script (ou melhor, a uma "biblioteca de scripts") para verificá-las sequencialmente (até que um bom acerto fosse feito), e integrei isso à minha "Ferramenta de documentação de dispositivos" chamada Adebar . Os interessados ​​podem encontrá-lo no lib/partitions.libarquivo. Como o Adebar é de código aberto (GPLv2), fique à vontade para copiá-lo e usá-lo - ou bifurcar o projeto e melhorá-lo.

A solução completa demora um pouco para ser postada aqui (como dito, você pode acessá-la no Github), mas como nossa política é incluir pelo menos a parte geral da publicação, veja o que ela faz:

Fontes diferentes fornecem conjuntos de detalhes diferentes, então ele tenta os "melhores" primeiro - e depois volta a funcionar até que pelo menos algo foi encontrado.

  • /proc/dumchar_infofornece mais detalhes, portanto, isso é tentado primeiro. Usuários felizes do MTK conseguirão isso.
  • /proc/mtd é a segunda melhor fonte.
  • /proc/emmc deve ter quase tanto quanto os candidatos anteriores, mas é um pouco complicado de usar
  • /dev/block/platform/*/by-name, verificado com…
  • /proc/partitionscom uma verificação cruzada /proc/mountsnos fornece pelo menos as partições montadas

Portanto, o script que eu construí basicamente percorre as fontes nesta ordem, parando assim que foi possível coletar detalhes (por exemplo, se /proc/dumchar_infofoi encontrado, não é necessário analisar todos os outros). Todos eles colocam em funções separadas, retornando dados usando a mesma estrutura, podendo até mesclar os resultados de todos eles.

Se alguém pode encontrar uma solução melhor, é claro que estou sempre aberto à idéia :)

Izzy
fonte
4

Eu me deparei com essa pergunta. Eu gosto de um desafio ...

Ferramentas que eu usei: BusyBox

Eu vim com 3 comandos (um que você listou) para dar algumas informações sobre as partições

busybox ls -QAl --color=never /dev/block/platform/*/by-name  
Resultado:
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
Resultado:
/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
Resultado:
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
Ryan Conrad
fonte
11
Obrigado por seus esforços, Ryan! Eu também já brinquei busybox(que infelizmente não está disponível em "dispositivos de alguns amigos" que recebo). blkidnão revela qual partição é (inicialização, recuperação, etc.) e */by-name/*não existe em todos os dispositivos (e quando isso acontece, os nomes às vezes são bem enigmáticos - por exemplo, no meu LG Optimus 4X, os nomes são todos 3- somente caracteres e não necessariamente "falando"). dflista apenas os dispositivos montados, de modo que não será exibido, por exemplo, recuperação ao executar no "modo normal" - portanto, aqui é mais fácil usar /proc/mounts.
Izzy
Você também pode perguntar sobre isso no Unix e Linux . Eles podem estar cientes de maneiras de obter as informações. Tudo o que pesquisei diz 'fdisk' ou outras ferramentas que nada retornam ou que não existem no sistema Android.
Ryan Conrad
Essa foi a minha experiência também. Fiz uma pergunta relacionada ao SO com uma perspectiva diferente, mas ainda não obtive resposta. Com medo de perguntar o impossível. É facilmente alcançado em dispositivos compatíveis /proc/mtd- mas, infelizmente, isso não parece mais ser preenchido com os dispositivos atuais. Em alguns dispositivos, eu até encontrei .fstabarquivos, mas, novamente, a) não em todos eb) mesmo que eles não parecessem confiáveis ​​(algumas partes estavam definitivamente erradas).
Izzy
1

KPARTX

O comando kpartx lê tabelas de partição e mapeia partições para os arquivos do dispositivo. Funciona em dispositivos e imagens de disco. Isso significa que podemos mapear partições HFS em uma imagem de disco para um arquivo de dispositivo de bloco especial e montar essas partições endereçando esse arquivo de dispositivo de bloco como se fosse parte de um dispositivo conectado.

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

Os exemplos no link são para o MacBook Pro, mas imagens de disco diferentes devem funcionar bem, desde que apresentadas ao GNU Linux em RAW. (xmount - veja abaixo)

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`

xmount

O xmount permite converter rapidamente entre vários tipos de imagem de disco rígido de entrada e saída. O xmount cria um sistema de arquivos virtual usando o FUSE (Sistema de Arquivos no Espaço do Usuário) que contém uma representação virtual da imagem de entrada. A representação virtual pode estar no formato bruto de DD, DMG, VHD, disco virtual do VirtualBox ou no formato VMDK do VmWare. As imagens de entrada podem ser arquivos DD, EWF (Expert Witness Compression Format) ou AFF (Advanced Forensic Format). Além disso, o xmount também suporta acesso de gravação virtual aos arquivos de saída que são redirecionados para um arquivo de cache. Isso torna possível inicializar imagens de disco rígido adquiridas usando QEMU, KVM, VirtualBox, VmWare ou similares.

https://www.pinguin.lu/xmount


Posso fornecer detalhes e informações adicionais, se necessário ou necessário.

HasH_BrowN
fonte
Admiro seu entusiasmo, mas: verifiquei os dispositivos que tenho aqui, nenhum deles tem esses comandos disponíveis. A partir dos seus links, essas são ferramentas disponíveis para Linux - mas as partições a serem investigadas estão em dispositivos Android, conforme descrito, e não podem ser acessadas diretamente em uma máquina Linux. Além disso: o mapeamento de uma partição para um dispositivo não revela o que está nele (sistema? Dados? Inicialização?), Então o kpartx está fora. O xmount também não parece resolver isso.
Izzy
Eu realmente pensei que estava em algo. Eu tentei. Obrigado por responder tão rapidamente. Manterá meu nariz na pedra de amolar.
HasH_BrowN
Sou grato por seus esforços! Só que os resultados não coincidem, desculpe. Imagine o seguinte: Preciso pegar a /recoverypartição de um dispositivo em execução. Isso não está montado no modo normal. Como faço para descobrir qual partição escolher? Com o exposto, eu tive que escolher todos eles e descobrir mais tarde. Produz muitos dados e leva muito tempo.
Izzy
11
Esse aplicativo DiskInfo mostrará a partição de recuperação desmontada. Acabei de verificar, o meu (HTC One V) é mmcblk0p21. É bem detalhado para um aplicativo.
HasH_BrowN
11
Meu sentimento, mas onde. Provavelmente não listado / armazenado da maneira que estamos procurando.
HasH_BrowN
0

DiskInfo será o aplicativo que você deseja. Ele mostrará todos os pontos de montagem, além de todas as partições desmontadas e todas as temp.

Esta é apenas uma interface gráfica, sem nenhuma outra funcionalidade real. Perfeito para sua necessidade. Isso requer que seja usado em um dispositivo totalmente inicializado. Raiz não é necessária.

Captura de tela
Captura de tela (clique para uma variante maior)

HasH_BrowN
fonte
11
Desculpe, absolutamente não. Você deve ter perdido a command-lineetiqueta :) Acho que é melhor escrever isso explicitamente. Conheço vários aplicativos que mostram esses detalhes, mas preciso acessá-los / coletá-los por meio adb shelle sem a ajuda de um aplicativo adicional (nem sempre é possível instalá-lo em um dispositivo que me foi entregue).
Izzy
Opa. Não vai doer meus sentimentos, quer que eu apague isso (para que não seja mal direcionado)?
HasH_BrowN
Somente se você sentir a necessidade. Pode ser útil para alguém que procura os mesmos detalhes por "outros meios". Caso contrário, eu o havia marcado como "NAA" (não-resposta);) Não vou votá-lo (ele pode fornecer os detalhes solicitados, não verifiquei - ele mostra qual partição contém o que, conforme descrito na minha pergunta ?) - mas não upvote / aceitá-la também;)
Izzy
Sim, mostrará para que serve a partição (contendo), apenas não mostrará o conteúdo real.
HasH_BrowN
11
Tudo bem, então a partir desse ponto corresponde! Então, por favor, não exclua esta resposta :)
Izzy