Confuso com os muitos locais do virtual / sdcard /

46

Alguns dispositivos (como o meu Nexus 4) não possuem um slot externo para um cartão SD. Em vez disso, há uma pasta raiz chamada /sdcard/que é tratada da mesma maneira. Mas também encontro outros caminhos que apontam para os mesmos arquivos - deve haver algum tipo de redirecionamento em andamento (acho que isso é chamado de links simbólicos no Linux).

Todos esses caminhos contêm os mesmos arquivos:

/sdcard/
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/

Qual caminho é o "real"? E os outros caminhos? Para que são usados, por que existem?

Torben Gundtofte-Bruun
fonte

Respostas:

38

Palestra recomendada: Por que / sdcard / se transformou em / sdcard / 0 / com 4.2? .

Resumindo: tem a ver com a funcionalidade multiusuário introduzida no Jelly Bean:

  • /storage/emulated/0/: que eu saiba, isso se refere ao "MMC emulado" ("parte do proprietário"). Geralmente este é o interno. O "0" representa o usuário aqui, "0" é o primeiro usuário, também conhecido como proprietário do dispositivo. Se você criar usuários adicionais, esse número será incrementado para cada um.
  • /storage/emulated/legacy/como antes, mas apontando para a parte do usuário atualmente trabalhando (para o proprietário, isso seria um link simbólico para /storage/emulated/0/). Portanto, esse caminho deve levar todos os usuários à sua "parte".
  • /sdcard/: De acordo com um comentário de Shywim , este é um link simbólico para ...
    • /mnt/sdcard (Android <4.0)
    • /storage/sdcard0 (Android 4.0 ou superior)
  • /storage/sdcard0/: Como não há legacypingente aqui (veja os comentários abaixo), o "0" nesse caso identifica o próprio dispositivo (cartão). Eventualmente, pode-se conectar um leitor de cartão a outro SDCard via OTG, que então se tornaria /storage/sdcard1(nenhuma prova disso, apenas um palpite - mas eu diria que é bom)

Embora se possa chegar à conclusão de que também deve haver /storage/sdcard/legacy, não há (veja comentários) - o que faz completamente sentido com minha suposição de que os números aqui não estão relacionados ao usuário, mas sim a possíveis cartões múltiplos: " 0 "seria sempre aquele no slot para cartão do dispositivo, portanto, não é necessário um" link simbólico herdado "aqui.

Izzy
fonte
Obrigado! E não, não há /storage/sdcard/legacycaminho.
Torben Gundtofte-Bruun
2
Estranho. Mas isso pode ter a ver com o fato de que quase não há permissões em um sdcard real (devido ao sistema de arquivos FAT não suportá-las). Observando a diferença ( /sdcard0/versus /emulated/0), o "0" aqui pode ser destinado ao caso de conectar vários SDCards por meio de um leitor de cartão e modo de host USB. Apenas um palpite, não um fato difícil - mas eu diria um bom.
Izzy
Resposta actualizado em conformidade :)
Izzy
2
/sdcard/é simplesmente um link simbólico para /storage/sdcard0/. Na versão anterior à 4.0.0, é /mnt/sdcard/.
Matthieu Harlé
E suponho que, no Android 4.0 ou superior, /mnt/sdcard/é um link simbólico para /storage/sdcard0/? Uma vez que ambos são navegáveis no meu Nexus 4.
MrWhite
2

Sim, um pouco confuso, mas esses são caminhos alternativos para o layout da memória

/ mnt / sdcard0 / (cartão SD virtual interno)

e Izzy estão corretos se houver mais dispositivos conectados, mas a nomeação pode ser diferente dependendo do dispositivo.

ex. / mnt / sdcard1 / (Cartão SD físico no slot SD)

mas outros dispositivos, como uma unidade flash USB conectada a um adaptador, podem ser chamados

/ mnt / media_rw / usbdisk (kitkat android 4.4 e superior?) ou / mnt / usbdisk (jellybean 4.1 - 4.2)

XDarkMario
fonte
1
Sim, a nomeação pode depender do dispositivo / fabricante / ROM. Mas geralmente, /mnt/*é apenas um link simbólico em todos esses casos - com as "montagens reais" residindo abaixo /storage:)
Izzy
Bem, eu tenho uma pasta shell no mnt também. Troco a ROM do dispositivo com frequência e, portanto, para aquelas roms, que tornam o cartão SD externo como a memória padrão, a pasta shell se comporta como minha memória interna e para outras roms que não trocam sdcard como memória interna, o shell nem chega na imagem. Ele permanece na pasta com todos os dados intactos, mas não é acessível pelo gerenciador de arquivos local. Queria saber o que exatamente é.
21415 Ali_Waris