Almacenamiento SD interno y externo inaccesible como root

Tengo un problema extraño en el que las aplicaciones, adb, etc. pueden acceder correctamente a mi almacenamiento SD interno y externo sin problemas , a menos que se ejecuten como root , en cuyo caso son completamente inaccesibles. Esto está en mi Oppo Find 7 con ColorOS 1.2.7i (Android 4.3), y verifiqué que no tengo este problema con WRITE_EXTERNAL_STORAGE. No estoy seguro de cuándo comenzó a ocurrir esto, pero creo que fue después de una actualización del sistema operativo hace bastante tiempo.

Cuando ejecuto mountun shell adb sin privilegios, tiene estas entradas que no aparecen cuando lo ejecuto como superusuario:

/dev/block/vold/179:65 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:29 /storage/sdcard0 ext4 rw,seclabel,nosuid,nodev,noexec,relatime,discard,nodelalloc,noauto_da_alloc,data=ordered 0 0
/dev/block/vold/179:29 /mnt/secure/asec ext4 rw,seclabel,nosuid,nodev,noexec,relatime,discard,nodelalloc,noauto_da_alloc,data=ordered 0 0
tmpfs /storage/sdcard0/.android_secure tmpfs ro,seclabel,relatime,size=0k,mode=000 0 0

Puedo volver a montar esas particiones en otro lugar mientras soy root y acceder a ellas sin problemas dentro del mismo shell , pero los permisos son extraños y ninguna otra aplicación root puede acceder a ellos:

$ su
# mkdir /storage/sd_test
# chmod 777 /storage/sd_test
# ls -al /storage | grep sd_test
# drwxrwxrwx root     root              2015-05-28 15:17 sd_test

... bien hasta ahora ...

# mount -o rw,user,umask=0000 -t vfat /dev/block/vold/179:65 /storage/sd_test
# ls -al /storage | grep sd_test
d---rwxr-x system   media_rw          2015-05-28 15:00 sd_test
# chmod 777 /storage/sd_test
# ls -al /storage | grep sd_test
d---rwxr-x system   media_rw          2015-05-28 15:00 sd_test

... diferentes permisos, pero puedo ver y leer/escribir los archivos dentro...

captura de pantalla de otra aplicación

... Root Explorer lo muestra con los permisos "originales" pero la carpeta está vacía...

# mount | grep sd_test
/dev/block/vold/179:65 /storage/sd_test vfat rw,dirsync,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

... Mmm.

Mi /etc/vold.fstabsolo tiene una línea:

dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host

y /fstab.qcom:

/dev/block/platform/msm_sdcc.1/by-name/system         /system      ext4    ro,barrier=1,discard                                wait
/dev/block/platform/msm_sdcc.1/by-name/userdata       /data        ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard      wait,check,encryptable=footer
/devices/msm_sdcc.2/mmc_host                          /storage/sdcard1   vfat    nosuid,nodev         wait,voldmanaged=sdcard:auto
/devices/msm_sdcc.1/mmc_host/mmc0/mmc0:0001/block/mmcblk0         /storage/sdcard0   ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard        wait,voldmanaged=sdcard:29

¿Cómo puedo arreglar esto?

Primero Android 4.2.2 y anteriores, el archivo de configuración vold.fstab específico del dispositivo define las asignaciones de los dispositivos sysfs a los puntos de montaje del sistema de archivos, y cada línea sigue este formato dev_mount <etiqueta> <punto_de_montaje> <partición> <ruta_sysfs> [banderas] dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host. continuación Siguiente comentario.
Android versiones 4.3 y posteriores, los diversos archivos fstab utilizados por init, vold y recovery se unificaron en el archivo /fstab.<dispositivo>. Para los volúmenes de almacenamiento externo administrados por vold, las entradas deben tener el siguiente formato. <src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags ¿Entiende el formato que está ejecutando para 4.2.2 e inferior como se indica en post color OS 4.3, que es un formato incorrecto ( referencia )
/fstab.qcom@BoLawson Intenté copiar /etc/vold.fstaby reiniciar, pero no hay cambios en el comportamiento.
Estoy buscando, diría que vaya al código fuente de su sistema operativo y obtenga el archivo storage_list.xml específico del dispositivo en algún lugar alrededor de frameworks /base/something: xml para obtener el archivo storage_list.xml que tiene los puntos de montaje. Pero creo que color os es de código cerrado. Simplemente no he encontrado el legítimo. No estoy seguro, pero creo que la plataforma Sdk podría tenerlos a través de los que estoy investigando. Este es el [storage_list.xml] ( android.googlesource.com/device/moto/wingray/+/master/overlay/… ) no es el archivo de su dispositivo que está buscando y en la parte inferior están los puntos de montaje

Respuestas (1)

Entonces, ¡resulta que SuperSU marcó automáticamente su configuración de "Separación de espacio de nombres de montaje" sin decírmelo! No tenía ni idea de que tuviera tal característica, y mucho menos que estuviera rota.

Que bueno que ya te diste cuenta. ¿Podría decirnos cómo llegó a esta conclusión? Eso puede ayudar a alguien a solucionar un caso similar.
@Firelord Luck, de verdad. Estaba revisando la configuración de SuperSU y lo vi, e inmediatamente me di cuenta de que probablemente estaba causando el problema.