5 votos

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

Por lo que entiendo, el almacenamiento interno está disponible para cada usuario. Si el almacenamiento emulado es una ubicación de almacenamiento creada para un usuario específico, ¿se supone que los archivos creados en /storage/emulated/0 deben aparecer en /storage/sdcard0? Supongo que no, porque los archivos creados por el usuario deberían mostrarse solo en emulado, de lo contrario, los archivos creados por el usuario estarían disponibles para que todos los demás usuarios los vean.

0 votos

¿Qué te hace pensar que /storage/emulated/0 es específico de un usuario en particular, y no solo el "primer dispositivo de almacenamiento emulado", como /storage/sdcard0 es la primera (interna) tarjeta SD?

0 votos

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

0 votos

Ah, lo siento - volví a mezclarlo (0 vs. /0 es demasiado fácil de confundir). Por favor, verifica con: ¿Por qué se convirtió /sdcard/ en /sdcard/0/ con 4.2? y Confundido por las muchas ubicaciones de la / tarjeta sd virtual. Yo nunca jugué con varios usuarios yo mismo, así que no profundicé aquí. Si tienes varios usuarios en tu dispositivo, ¿puedes verificar? Estaría curioso, pero mi suposición es que /storage/sdcard0 siempre apunta al directorio correspondiente del usuario, como lo hace /storage/emulated/legacy/ .

7voto

Izzy Puntos 45544

He comprobado en uno de mis dispositivos, y como ya sospechaba la cadena de comentarios, no necesitas preocuparte por que todos tengan acceso a los datos de todos los demás. Primero:

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

Lo que significa que es solo 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

Nuevamente el mismo juego. Así que para la tarjeta SD emulada (también conocida como la "tarjeta SD interna"), el sistema Android se encarga de mapearla correctamente para el usuario actual. No estoy seguro de la tarjeta SD externa (por ejemplo, si se puede utilizar para compartir datos entre múltiples usuarios). Esto normalmente se encuentra 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"
[datos de la tarjeta SD externa]

Por lo tanto, puedes ver que la tarjeta SD externa solo se puede acceder directamente con permisos de root, por lo que los "usuarios normales" tienen que pasar por una superposición de montaje FUSE. Por lo tanto, el sistema podría encargarse de que cada usuario solo pueda acceder a sus propios datos en ese lugar. No estoy lo suficientemente familiarizado con los aspectos internos como para afirmarlo con seguridad (o incluso para decir qué se hace exactamente allí).

Ahora, para tu pregunta explícita, si los archivos creados en /storage/emulated/0 deberían aparecer en /storage/sdcard0: Suponiendo que estás hablando de /mnt/shell/emulated/0 (no pude encontrar /storage/emulated/0 en mi dispositivo), por supuesto que lo hacen, ya que ambos son 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 tu preocupación es infundada: debido al "intermediario" (/storage/emulated/legacy), /storage/sdcard0 siempre apunta al almacenamiento del "usuario conectado" - por lo que si, por ejemplo, el segundo usuario mira allí, verá lo que está en /mnt/shell/emulated/1 (o cualquiera que sea su área de almacenamiento emulado).


Entonces, como información adicional, permíteme resumir las cosas de los comentarios, como un breve FAQ:

  • Me pregunto qué sucedería si un usuario diferente intentara acceder y guardar datos en el almacenamiento emulado de otro usuario?
    Recibiría un mensaje de error que indica que no está allí o no es 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 sencillos?
    Básicamente son "postes indicadores", que dicen "por favor mira allí". A diferencia de lo que inicialmente asumiste, no contienen datos en sí mismos, realmente son solo señales o "punteros". Los datos mismos residen en la "ubicación objetivo", y solo allí. Para más detalles, consulta el artículo de Wikipedia sobre enlaces simbólicos.

También ver:

0 votos

Esto puede ser ligeramente fuera de tema, pero ¿por qué se necesitan estos enlaces simbólicos? ¿Cuál fue la razón por la que se cambió la arquitectura de almacenamiento y se diseñó de la forma en que está ahora?

0 votos

¿Por qué apunta "/storage/sdcard0" a "/storage/emulated/legacy"? Pensé que el almacenamiento emulado siempre debería apuntar a la ubicación de almacenamiento original (es decir, almacenamiento interno o la ubicación de almacenamiento virtual real) o ¿no hay apuntar en absoluto, es solo una referencia mutua bidireccional entre sí?

0 votos

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

0voto

miksha Puntos 11

El Sr. Expensive Toys dijo: Me sorprende que este problema siga apareciendo, ya que comenzó a ocurrir tan atrás como en Honeycomb.

Entonces, la /storage/emulated/0/DCIM/Camera es la misma carpeta que tu carpeta normal DCIM/Camera. Es solo un enlace simbólico. Entonces, los archivos realmente están en la ubicación correcta, simplemente tienes una aplicación que introdujo datos incorrectos en la base de datos de MediaStore.

Cuando accedes a los archivos desde tu PC, estás enumerando la base de datos de MediaStorage para los archivos. No está extrayendo listas tradicionales de directorios. Entonces, lo que ves se basa en lo que está en esa base de datos y las entradas de rutas en la base de datos.

Los archivos en la base de datos que apuntan a directorios emulados no se muestran, ya que se asume que son duplicados, ya que es la misma carpeta física que tu DCIM/Camera normal. Lo que está sucediendo es que algunas aplicaciones de terceros mal escritas están insertando entradas en la base de datos con la ruta /storage/emulated/0/DCIM/Camera en lugar de la ruta root adecuada a DCIM/Camera. Lo que significa que el servicio MTP no puede verlos cuando estás conectado a tu 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 incorrectas de la base de datos de MediaStore y permitir que el sistema vuelva a indexar los archivos y agregarlos a la base de datos con las rutas correctas.

Configuración-> aplicaciones Presiona el menú de 3 puntos en la esquina superior derecha y selecciona Mostrar sistema Encuentra Almacenamiento de medios, Selecciónalo, Selecciona Almacenamiento, luego Borrar datos Encuentra Almacenamiento externo, Selecciónalo, Selecciona Almacenamiento, luego Borrar datos Apaga el teléfono, enciéndelo nuevamente, espera a que el servicio de indexación reconstruya los datos.

Cuando hayas terminado, los archivos deberían aparecer con el árbol de directorios adecuado y ser visibles desde la PC. Dependiendo de la cantidad de archivos en el teléfono, puede tomar entre 10 y 20 minutos reconstruir la base de datos multimedia, ya que el servicio recorre los directorios del teléfono, obtiene metadatos, crea 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