¿Por qué la tarjeta SD está montada en "/ sdcard / external_sd" en lugar de "/ sdcard" (o "/ mnt / sdcard")?

18

Recientemente actualicé mi teléfono a un LG Motion 4G (Android 4 ICS). Veo que la tarjeta sd está montada en /sdcard/external_sd. También noté que esto parece ser lo mismo con algunos otros modelos más nuevos. Las aplicaciones esperan que la tarjeta SD esté en /sdcard. Supongo que los fabricantes quieren incluir mucho almacenamiento interno, pero ¿por qué montar almacenamiento interno en /sdcard? ¿No debería esto estar en contra de algún tipo de estándar de especificación de Android?

Sepero
fuente
44
En cuanto al "estándar de especificación", esto no debería generar problemas: como puede leer en la documentación de los desarrolladores sobre Almacenamiento externo , las aplicaciones deben determinar la ubicación / disponibilidad utilizando llamadas API (aquí: getExternalStorageState () ), no utilizando rutas codificadas .
Izzy
Buen punto Izzy, pero aparentemente algunos fabricantes están redirigiendo erróneamente las aplicaciones al espacio interno a través de getExternalStorageDirectory (). stackoverflow.com/questions/11281010/…
Sepero
Ah, buen punto también: como no desarrollador no estaba al tanto de eso. Pero veo que Flow brindó una muy buena explicación, nuevamente con puntos que no conocía ...
Izzy

Respuestas:

26

La razón es la historia de Android: la primera generación de dispositivos Android solo tenía una pequeña cantidad de almacenamiento interno (alrededor de 100-400MiB) que se montó debajo /data.

A continuación, salieron dispositivos con una tarjeta SD externa en ese momento. La tarjeta SD fue montada debajo /mnt/sdcard.

Después de eso, los dispositivos con gran almacenamiento interno salieron al mercado. Este almacenamiento se dividió en porciones, ya que se /mnt/sdcardhabía convertido en el lugar predeterminado para grandes fragmentos de datos de aplicaciones, imágenes y demás. Entonces, el entorno de Android tenía que tener un directorio /datay /mnt/sdcard. Por lo tanto, una partición era para /data, la otra para /mnt/sdcard. Esta es la razón por la cual el espacio de almacenamiento podría ser bajo (la /datapartición) incluso si hay mucho espacio activado /mnt/sdcard.

Esta situación se mejoró con Android 3.0: /datay /mnt/sdcardahora apuntan a la misma partición. Buen trabajo Google, eso podría haberse hecho hace versiones. Esa es también la razón por la cual ya no se necesita app2sd en Android 3.0 o superior: solo movería los datos dentro del mismo volumen.

Ahora llegamos a la respuesta si su pregunta: dado /mnt/sdcardque ya está montado en el almacenamiento interno, una tarjeta SD externa tiene que usar un punto de montaje diferente. Y este punto de montaje no está especificado por Google. Podría ser

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

La llamada a la API getExternalStorageDirectory()generalmente apunta al directorio de almacenamiento interno. Este comportamiento está documentado. Hay proyectos de código abierto que proporcionan herramientas para encontrar el directorio externo de la tarjeta SD de forma canónica.

Fluir
fuente
¿Eso significa que no hay una "forma transparente" para que las aplicaciones determinen la tarjeta SD? Por supuesto, hay isExternalStorageRemovable()que ver si el almacenamiento "externo" es extraíble, además uno podría determinar los puntos de montaje (usando el mountcomando) y verificar los indicadores de montaje, etc. Pero si no me equivoco aquí, esto significa que cada desarrollador necesita para descubrir su propia aplicación, y no hay una simple llamada API para hacer eso por él?
Izzy
Eso es correcto. Existen las bibliotecas que he vinculado que intentan agregar esa característica, pero no hay una llamada API oficial para hacerlo.
Flujo
Si /datase fusionan tanto el almacenamiento externo como la partición, ¿cómo podría montar / desmontar de manera segura mi tarjeta SD para conectarla, por ejemplo, en mi PC? Me parece que tener particiones separadas es lógico y no veo por qué todo eso tuvo que pasar.
jadkik94
No es el almacenamiento externo, es la llamada "SD interna" y la /datapartición que se fusiona.
Flujo
This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Solo para su información, eso NO es cierto en al menos un teléfono con Android 4.0 (Pantech Burst), donde /datahay una partición ext4 de 1GB y /mnt/sdcarduna partición FAT32 de 12GB.
netvope
3

Forzar el montaje externo de SD /mnt/sdcardno tiene ningún mérito técnico, es la forma en que Google ayuda a los proveedores de hardware a crear un punto de diferenciación para teléfonos con más memoria interna.

No hay ninguna razón por la cual las aplicaciones tengan que encontrar una manera de ubicar la tarjeta externa cuando /mnt/sdcardera claramente el lugar donde debería haber estado la tarjeta sd y la forma indefinida de Google de cargar la tarjeta SD externa es otra trama menos que amigable para el consumidor para hacer que la tarjeta SD externa sea menos útil en dispositivos Android más nuevos. No hay ninguna razón por qué /datay /mnt/sdcardtuvo que ser combinado en la misma partición en la nueva versión de Android, excepto para el fabricante de teléfonos Diferenciar con mayor memoria interna de unidades de menor costo con menos memoria interna. Incluso si la fusión tuviera que hacerse, Google podría haber definido claramente un ESTÁNDARNuevo punto de montaje para las tarjetas SD externas en lugar de dejarlo completamente vago. Esto funciona completamente contra la prevención de una mayor "segmentación" del ecosistema de Android mediante un diseño torpe para ayudar a los proveedores a diferenciar los teléfonos de gama alta de las unidades de menor costo con menos memoria incorporada.

Los binarios de las aplicaciones de Android son pequeños, los teléfonos con 1-2 Gigas de memoria interna deberían tener espacio más que suficiente para cientos de aplicaciones, y todos los datos grandes podrían guardarse de forma segura en una tarjeta SD externa. Pero luego los proveedores se dieron cuenta de que tenían que tener una manera de diferenciar su producto final superior, y afirman que una memoria interna más alta se convirtió en parte de ese esquema y que la utilidad de la memoria externa es la otra parte integrada que este esquema requería para que esto funcione por completo. API menos útil para encontrar tarjetas SD externas y los puntos de montaje no estandarizados.

Entonces: No, montar la tarjeta SD en un lugar que /mnt/sdcardno sea nada más que una estrategia comercial para vender teléfonos nuevos de mayor precio con una versión más reciente de Android, nada más que eso. Imagínense, si el Nexus 4 8GB y el Nexus 16GB pueden usar 64GB de tarjeta SD externa para aplicaciones y medios, ¿hay alguna razón para que alguien compre la versión de 16 GB? Esos 8 GB adicionales de memoria NAND seguramente no valen la diferencia de precio de $ 50 si se trata de tarjetas SD externas. Dado que la mayoría de los componentes en un teléfono inteligente tiene que ser prácticamente igual (RAM, procesador, radios), el único área que queda para obtener más margen de beneficio es el espacio de memoria interna y, por lo tanto, el extraño punto de montaje de la memoria externa.

¿También han notado todos la ausencia de soporte SD externo de la actual cosecha de dispositivos Android con la marca "Google"? Esta tendencia seguirá expandiéndose en los dispositivos Android de "nivel superior". El soporte externo de la tarjeta SD fue una diferencia clave para que los dispositivos Android superen el dominio del iPhone en el mercado móvil. Ahora, con Android como líder supremo en el juego de los números, hay poca necesidad de que esta práctica de extracción de ganancias se mantenga por mucho más tiempo.

No me sorprenderá Android 5.0, el soporte de la tarjeta SD externa sería cosa del pasado. Porque si es difícil para las aplicaciones encontrar una tarjeta SD externa, entonces la mayoría de los programas simplemente usarán los lugares /datay las /mnt/sdcardubicaciones conocidas, y la mayoría de las aplicaciones usarán más y más datos almacenados para su operación, se crea una estrategia dinámica de marcado de productos de la nada. "simplemente al no montar la tarjeta SD externa en /mnt/sdcard.

Deecee
fuente
1
Ahora, eso es lo que yo llamo un muro de texto . Parece también un poco desaliñado. Agregue algunos párrafos a su respuesta. Además no entiendo por qué no hay "ninguna razón para fusión /datay /mnt/sdcard", como veo claramente una razón: Evitar la fragmentación de la memoria interna.
Flujo
1
Definitivamente fue una queja, Deecee, pero independientemente, agradezco su aporte. Saludos
Sepero
Y hay una cosa más: con los dispositivos que colocan la tarjeta SD xternal dentro de la interna (por ejemplo, /sdcard/external_sden el LG P880), la copia de seguridad del "almacenamiento compartido" incluye ambos y crea un gran archivo. No hay forma de hacer una copia de seguridad de la SD interna solo con un enfoque fácil. Lo que no tiene mucho sentido, ya que hay formas mucho más fáciles de hacer una copia de seguridad de la tarjeta externa. Un hecho que me vuelve loco, ya que tengo el dispositivo mencionado ...
Izzy
2

Debe tener en cuenta (si está rooteado) que puede ir a /system/etc/vold.fstab e intercambiar los puntos de montaje por / sdcard y /mnt/external_sd..... Esto permitirá que su sdcard esté en / sdcard como espera y el "almacenamiento interno" restante se montará en / mnt / external_sd o si lo prefiere / sdcard / external_sd /

Rudi Pittman
fuente
Esto funciona con algunos modelos de teléfonos, pero no todos. No funciona para mi LG Motion 4G, Android 4.0.4. Thx
Sepero