5 votos

¿Se supone que los archivos creados en "/storage/emulated/0" deben aparecer en "/storage/sdcard0"?

Por lo que supongo, el almacenamiento interno está disponible para todos los usuarios. Si el almacenamiento emulado es una ubicación de almacenamiento, hecho para un usuario específico, son los archivos creados en /storage/emulated/0 que se supone que aparece en /storage/sdcard0 ? Supongo que no, porque los archivos creados por el usuario deberían aparecer sólo en emulados, de lo contrario los archivos creados por el usuario estarían disponibles para que todos los demás usuarios los vieran.

0 votos

¿Qué te hace pensar /storage/emulated/0 es específico para un usuario determinado - y no sólo el "primer dispositivo de almacenamiento emulado", como /storage/sdcard0 es la primera tarjeta SD (interna)?

0 votos

@Izzy Porque la numeración (es decir, en este caso "0") indica un espacio de almacenamiento asignado para un usuario específico. ¿No se convirtió Android en una plataforma multiusuario a partir de Android 4.2?

0 votos

Ah, lo siento, lo he vuelto a confundir ( 0 contra. /0 es demasiado fácil de confundir). Por favor, consulte con: ¿Por qué /sdcard/ se convirtió en /sdcard/0/ con 4.2? y Confundido por las múltiples ubicaciones de la tarjeta virtual /sdcard/ . Nunca he jugado con el multiusuario, así que no he profundizado en esto. Si tienes varios usuarios en tu dispositivo, ¿puedes comprobarlo? Tendría curiosidad, pero mi opinión es que /storage/sdcard0 siempre apunta al dir del usuario correspondiente, ya que /storage/emulated/legacy/ lo hace.

6voto

Izzy Puntos 45544

He comprobado uno de mis dispositivos, y como la cadena de comentarios ya sospechaba, no hay que preocuparse de que todo el mundo tenga acceso a los datos de los demás. Primero:

/storage/sdcard0 -> /storage/emulated/legacy

Lo que significa que es sólo un enlace simbólico que siempre apunta a los datos del usuario actual:

/storage/emulated/legacy -> /mnt/shell/emulated/0

(el primer usuario - en mi caso el único). Segundo, donde normalmente lo buscas:

/sdcard -> /storage/emulated/legacy

El mismo juego otra vez. Así que para la tarjeta SD emulada (también conocida como "tarjeta SD interna"), el sistema Android se encarga de mapearla de acuerdo con el usuario actual. No estoy seguro de la tarjeta SD externa (si eso por ejemplo podría ser usado para compartir datos entre múltiples usuarios). Esto se encuentra generalmente en /storage/sdcard1 :

$ mount | grep sdcard
/dev/block/vold/179:65 /mnt/media_rw/sdcard1 vfat […]
/dev/fuse /storage/sdcard1 fuse […]
$ ls /mnt/media_rw/sdcard1
/mnt/media_rw/sdcard1: Permission denied
$ su -c "ls /mnt/media_rw/sdcard1"
[data from external SD card]

Así que puedes ver que la tarjeta SD externa sólo puede ser accedida directamente con los poderes de root, por qué los "usuarios ordinarios" tienen que ir a través de una montura de FUSE superpuesta a eso. Así que el sistema de nuevo podría tener cuidado de que cada usuario sólo pueda acceder a sus propios datos en ese lugar. No estoy lo suficientemente familiarizado con los internos como para decir con seguridad (o incluso para decir qué se hace exactamente allí).

Ahora para su pregunta explícita, si los archivos creados en /storage/emulated/0 que se supone que aparece en /storage/sdcard0 : Asumiendo que estás hablando de /mnt/shell/emulated/0 (No pude encontrar /storage/emulated/0 en mi dispositivo), empíricamente, por supuesto que sí, ya que ambos están en el mismo lugar: /storage/sdcard0 -> /storage/emulated/legacy -> /mnt/shell/emulated/0 - lo que significa que /storage/sdcard0 muestra lo que está contenido en /mnt/shell/emulated/0 . Pero su preocupación es injustificada: debido al "intermediario" ( /storage/emulated/legacy ), /storage/sdcard0 siempre apunta al almacenamiento del "usuario conectado", así que si, por ejemplo, el segundo usuario mira allí, verá lo que hay en /mnt/shell/emulated/1 (o cuál sea su área de almacenamiento emulada).


Así que como PS, déjame resumir las cosas de los comentarios, como un corto FAQ:

  • Me pregunto qué pasaría si un usuario diferente intenta acceder y guardar datos en el almacenamiento emulado de otro usuario.
    Recibe un mensaje de error de que no está ahí o no está accesible.
  • ¿Por qué se necesitan estos enlaces simbólicos?
    Múltiples razones, muchas de ellas históricas (una palabra: "compatibilidad").
  • ¿Qué son esos enlaces simbólicos y cómo funcionan, en términos simples?
    Son básicamente "señales", que dicen "por favor, mira allí". Aparte de lo que inicialmente asumió, no contienen ningún dato en sí mismos - en realidad son sólo señales o "punteros". Los datos en sí mismos residen en la "ubicación del objetivo", y sólo allí. Para más detalles, por favor vea el Artículo de Wikipedia sobre enlaces simbólicos .

También ver:

0 votos

Esto puede ser un poco fuera de tema, pero ¿por qué son necesarios estos enlaces simbólicos? ¿Cuál fue la razón por la que se cambió la arquitectura de almacenamiento y se diseñó lo que es ahora?

0 votos

¿Por qué "/storage/sdcard0" apunta a "/storage/emulated/legacy"? Pensaba que el almacenamiento emulado debía apuntar siempre a la ubicación de almacenamiento original (es decir, al almacenamiento interno o a la ubicación de almacenamiento virtual real) o no hay ningún tipo de señalización, que es sólo una referencia bidireccional mutua hacia el otro?

0 votos

Lo siento, no puedo responder a eso. ¿Tal vez lo pregunte como una pregunta separada? Además, si esto responde a su pregunta original, considere aceptando que, @Narcotixs ;) Y perdón por haber rechazado tu edición: tu cambio no refleja lo que encontré; /sdcard aquí hay un enlace directo a /storage/emulated/legacy no a /storage/sdcard0 .

0voto

miksha Puntos 11

Mr Expensive Toys dijo: Me sorprende que este problema siga apareciendo ya que empezó a ocurrir desde Honeycomb.

Por lo tanto, el /storage/emulated/0/DCIM/Camera es la misma carpeta que su carpeta normal DCIM/Cámara. Es sólo un enlace simbólico. Así que los archivos están realmente en la ubicación correcta que acaba de tener una aplicación que poner los datos mal en la base de datos MediaStore.

Cuando accedes a los archivos desde tu PC, en realidad estás enumerando la base de datos de MediaStorage en busca de archivos. No se trata de una lista de directorios tradicional. Así que lo que ves se basa en lo que está en esa base de datos y las entradas de ruta en la base de datos.

Los archivos de la base de datos que apuntan a los directorios emulados no se muestran ya que se supone que son duplicados ya que es el mismo directorio físico que su DCIM/Cámara normal. Lo que sucede es que algunas aplicaciones de terceros mal escritas están insertando entradas en la base de datos con el /storage/emulated/0/DCIM/Camera en lugar de la ruta de acceso correcta a DCIM/Cámara. Lo que significa que el servicio MTP no puede verlos cuando está conectado a su PC.

Por lo general, la forma más fácil de solucionar el problema es simplemente borrar las bases de datos de MediaStore para sacar las entradas malas de la base de datos de MediaStore y dejar que el sistema vuelva a indexar los archivos y los ponga en la base de datos con las rutas adecuadas.

Configuración->Aplicaciones Pulse el menú de 3 puntos en la parte superior derecha y seleccione Mostrar sistema Busque el almacenamiento multimedia, selecciónelo, seleccione el almacenamiento y luego borre los datos. Encuentre el almacenamiento externo, selecciónelo, seleccione el almacenamiento y luego borre los datos. Apague el teléfono, vuelva a encenderlo y espere a que el servicio de indexación reconstruya los datos.

Cuando haya terminado, los archivos deberían aparecer con el árbol de directorios adecuado y ser visibles desde el PC. Dependiendo de la cantidad de archivos en el teléfono, puede tardar entre 10 y 20 minutos en reconstruir la base de datos de medios, ya que el servicio recorre los directorios del teléfono, obteniendo metadatos, creando miniaturas, etc.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X