Por que o cartão SD está montado em "/ sdcard / external_sd" em vez de "/ sdcard" (ou "/ mnt / sdcard")?


18

Recentemente, atualizei meu telefone para um LG Motion 4G (Android 4 ICS). Vejo que o sdcard está montado em /sdcard/external_sd. Também notei que isso parece ser o mesmo com alguns outros modelos mais recentes. Os aplicativos esperam que o sdcard esteja em /sdcard. Presumo que os fabricantes desejam incluir muito armazenamento interno, mas por que montar o armazenamento interno /sdcard? Isso não deveria ser contra algum tipo de padrão de especificação do Android?


4
Quanto ao "padrão de especificação", isso não deve causar problemas: como você pode ler na documentação dos desenvolvedores sobre Armazenamento Externo , os aplicativos devem determinar a localização / disponibilidade usando chamadas de API (aqui: getExternalStorageState () ), sem usar caminhos codificados .
Izzy

Bom ponto Izzy, mas aparentemente alguns fabricantes estão redirecionando erroneamente aplicativos para o espaço interno via getExternalStorageDirectory (). stackoverflow.com/questions/11281010/…
Sepero

Ah, bom ponto também - como não desenvolvedor, eu não sabia disso. Mas vejo que o Flow forneceu uma explicação muito boa - novamente com pontos dos quais eu não estava ciente ...
Izzy

Respostas:


26

O motivo é o histórico do Android: a primeira geração de dispositivos Android tinha apenas uma pequena quantidade de armazenamento interno (em torno de 100-400MiB) sob o qual estava montado /data.

Em seguida, os dispositivos com um cartão SD externo naquele momento foram lançados. O cartão SD foi montado embaixo /mnt/sdcard.

Depois disso, os dispositivos com grande armazenamento interno chegaram ao mercado. Esse armazenamento foi dividido em /mnt/sdcardpartes , porque havia se tornado o local padrão para grandes blocos de dados de aplicativos, imagens e outros. Portanto, o ambiente Android precisava ter um diretório /datae /mnt/sdcard. Portanto, uma partição era para /data, a outra para /mnt/sdcard. Esse é o motivo pelo qual o espaço de armazenamento pode ficar baixo (a /datapartição), mesmo que haja muito espaço /mnt/sdcard.

Essa situação foi aprimorada com o Android 3.0: /datae /mnt/sdcardagora está apontando para a mesma partição. Bom trabalho, Google, isso poderia ter sido feito versões atrás. Essa também é a razão pela qual o app2sd não é mais necessário no Android 3.0 ou superior: você só moveria os dados no mesmo volume.

Agora chegamos à resposta se a sua pergunta: Como /mnt/sdcardjá está montado no armazenamento interno, um cartão SD externo precisa usar um ponto de montagem diferente. E esse ponto de montagem não é especificado pelo Google. Poderia ser

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • etc.

A chamada da API getExternalStorageDirectory()geralmente aponta para o diretório de armazenamento interno. Esse comportamento está documentado. Existem projetos de código aberto que fornecem ferramentas para encontrar o diretório externo do cartão SD de maneira canônica.


Isso significa que não há "caminho transparente" para os aplicativos determinarem o cartão SD? Obviamente, há isExternalStorageRemovable()para ver se o armazenamento "externo" é removível, e pode-se determinar os pontos de montagem (usando o mountcomando) e procurar sinalizadores de montagem etc. Mas se não me enganar aqui, isso ainda significa que cada desenvolvedor precisa descobrir por ele mesmo o aplicativo e não há uma chamada de API simples para fazer isso por ele?
Izzy

Está correto. Existem as bibliotecas que vinculei que tentam adicionar esse recurso, mas não há nenhuma chamada oficial da API para fazer isso.
Flow

Se o armazenamento externo e a /datapartição forem mesclados, como eu poderia montar / desmontar com segurança meu cartão SD para conectá-lo, por exemplo, ao meu PC? Parece-me que ter partições separadas é lógico e não vejo por que tudo isso aconteceu.
jadkik94

Não é o armazenamento externo, é o chamado "SD interno" e a /datapartição que é mesclada.
Flow

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Apenas para sua informação, isso NÃO é verdade em pelo menos um telefone com Android 4.0 (Pantech Burst), onde /datahá uma partição ext4 de 1 GB e /mnt/sdcarduma partição FAT32 de 12 GB.
Netvope

3

Afastar a montagem de SD externo /mnt/sdcardnão tem mérito técnico, é a maneira do Google ajudar os fornecedores de hardware a criar um ponto de diferenciação para telefones com mais memória interna.

Não há razão para que os aplicativos tenham que encontrar uma maneira de localizar o cartão externo quando /mnt/sdcardestava claramente o local onde o sdcard deveria estar e a maneira indefinida do Google de carregar o cartão SD externo é outro enredo pouco amigável para o consumidor, para tornar o cartão SD externo menos útil em dispositivos Android mais recentes. Não há motivo para isso /datae /mnt/sdcardteve que ser mesclado na mesma partição na versão mais recente do Android, exceto pelo fabricante para diferenciar telefones com maior memória interna de unidades de menor custo e menos memória interna. Mesmo que a fusão tivesse que ser feita, o Google poderia ter definido claramente um PADRÃOnovo ponto de montagem para os cartões SD externos, em vez de deixá-lo completamente vago. Isso está funcionando completamente contra a prevenção de "segmentação" adicional do ecossistema Android por um design desajeitado para ajudar na diferenciação de fornecedores de telefones de última geração com unidades de menor custo com menos memória interna.

Os binários de aplicativos Android são pequenos, os telefones com 1 a 2 Gigs de memória interna devem ter espaço mais do que suficiente para centenas de aplicativos, e todos os dados grandes podem ser guardados com segurança em um cartão SD externo. Mas os fornecedores perceberam que precisavam ter uma maneira de diferenciar seu produto final mais alto, e alegar que uma memória interna mais alta se tornou parte desse esquema e prejudicar a utilidade da memória externa é a outra parte integrada que esse esquema exigia para que ele funcionasse completamente. API menos útil para encontrar cartões SD externos e pontos de montagem não padronizados.

Portanto: não, montar o cartão SD em um local que /mnt/sdcardnão seja nada além de uma estratégia de negócios para vender novos telefones com preços mais altos na versão mais recente do Android, nada mais que isso. Imagine que, se o Nexus 4 de 8 GB e o de 16 GB do Nexus puderem usar 64 GB de cartão sd externo para aplicativos e mídias, existe uma razão para alguém comprar a versão de 16 GB? Esses 8 GB extras de memória NAND certamente não valem US $ 50 de diferença de preço se estiverem envolvidos cartões SD externos. Como a maioria dos componentes de um smartphone deve ser praticamente a mesma (RAM, processador, rádios), a única área que resta para obter mais margem de lucro é o espaço de memória interna e, portanto, o estranho ponto de montagem de memórias externas.

Todo mundo também percebeu a ausência de suporte externo a SD da safra atual de dispositivos Android com a marca "Google"? Essa tendência continuará se expandindo nos dispositivos Android "de primeira linha". O suporte externo ao cartão SD foi uma diferenciação importante para os dispositivos Android ultrapassarem o domínio do iPhone no mercado móvel. Agora, com a decisão do Android suprema no jogo de números, há pouca necessidade de que essa prática de redução de lucros seja mantida por muito mais tempo.

Não vou me surpreender com o Android 5.0, o suporte ao cartão SD externo seria uma coisa do passado. Como se é difícil para os aplicativos encontrar o cartão SD externo, a maioria dos programas simplesmente usa os locais /datae os /mnt/sdcardlocais conhecidos . Com a maioria dos aplicativos usando mais e mais dados armazenados para sua operação, uma estratégia vibrante de marcação de produtos é criada a partir do nada "simplesmente não montando o cartão SD externo em /mnt/sdcard.


11
Agora, é isso que chamo de parede de texto . Parece também um pouco seguro. Adicione alguns parágrafos à sua resposta. Também não entendo por que "não há motivo para mesclar /datae /mnt/sdcard", como vejo claramente um motivo: Evitando a fragmentação do armazenamento interno.
Fluxo

11
Definitivamente, foi um discurso retórico, Deecee, mas, independentemente disso, agradeço sua opinião. Cheers
Sepero

E há mais uma coisa: com os dispositivos colocando o cartão SD externo dentro do interno (por exemplo, /sdcard/external_sdno LG P880), o backup do "armazenamento compartilhado" inclui os dois e cria um grande arquivo. Não há como fazer backup do SD interno apenas em uma abordagem fácil. O que não faz muito sentido, pois existem maneiras muito mais fáceis de fazer backup do cartão externo. Um fato que me deixa louco, como eu tenho o dispositivo mencionado ...
Izzy

2

Você deve estar ciente (se estiver enraizado) de que pode acessar o /system/etc/vold.fstab e trocar os pontos de montagem por / sdcard e /mnt/external_sd..... Isso permitirá que o seu sdcard esteja no / sdcard conforme o esperado e o "armazenamento interno" restante será montado em / mnt / external_sd ou se você preferir / sdcard / external_sd /


Isso funciona com alguns modelos de telefone, mas não com todos. Não funciona para o meu LG Motion 4G, Android 4.0.4. Thx
Sepero
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.