Interner und externer SD-Speicher als Root nicht zugänglich

Ich habe ein bizarres Problem, bei dem Apps, Adb usw. problemlos auf meinen internen und externen SD-Speicher zugreifen können, es sei denn, sie werden als root ausgeführt . In diesem Fall sind sie vollständig unzugänglich. Dies ist auf meinem Oppo Find 7 mit ColorOS 1.2.7i (Android 4.3) und ich habe überprüft, dass ich nicht unter diesem Problem mit WRITE_EXTERNAL_STORAGE leide. Ich bin mir nicht sicher, wann das auftrat, aber ich glaube, es war nach einem Betriebssystem-Update vor einiger Zeit.

Wenn ich mounteine nicht privilegierte Adb-Shell ausführe, enthält sie diese Einträge, die nicht angezeigt werden, wenn ich sie als Superuser ausführe:

/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

Ich kann diese Partitionen an anderer Stelle neu mounten, während ich root bin, und innerhalb derselben Shell problemlos auf sie zugreifen , aber die Berechtigungen sind unkonventionell und keine anderen Root-Apps können darauf zugreifen:

$ 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

... gut soweit ...

# 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

... unterschiedliche Berechtigungen, aber ich kann die darin enthaltenen Dateien sehen und lesen/schreiben ...

Screenshot aus einer anderen App

... Root Explorer zeigt es mit den "ursprünglichen" Berechtigungen an, aber der Ordner ist leer ...

# 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

... Hmm.

Meine /etc/vold.fstabhat nur eine Zeile:

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

Und /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

Wie kann ich das beheben?

Unter Android 4.2.2 und früher definiert die gerätespezifische vold.fstab-Konfigurationsdatei Zuordnungen von sysfs-Geräten zu Dateisystem-Einhängepunkten, und jede Zeile folgt diesem Format: dev_mount <label> <mount_point> <partition> <sysfs_path> [flags] Yourdevice dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host. Forts. Nächster Kommentar.
Android-Versionen 4.3 und höher wurden die verschiedenen fstab-Dateien, die von init, vold und recovery verwendet werden, in der Datei /fstab.<device> vereinheitlicht. Für externe Speichervolumes, die von vold verwaltet werden, sollten die Einträge das folgende Format haben. <src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags Verstehen Sie das Format Ihrer Ausführung für 4.2.2 und darunter, wie in Post Color OS 4.3 angegeben, was ein falsches Format ist ( Referenz )
@BoLawson Ich habe versucht, es zu kopieren /fstab.qcomund neu zu /etc/vold.fstabstarten, aber es gibt keine Verhaltensänderung.
Ich würde sagen, gehen Sie zum Quellcode Ihres Betriebssystems und holen Sie sich die gerätespezifische storage_list.xml irgendwo um frameworks /base/something:xml, um die storage_list.xml zu erhalten, die die Einhängepunkte enthält. Aber ich denke, Color OS ist Closed Source, ich habe nur nicht das richtige gefunden. Ich bin mir nicht sicher, aber ich denke, die Sdk-Plattform könnte sie haben, während ich recherchiere. Dies ist die [storage_list.xml] ( android.googlesource.com/device/moto/wingray/+/master/overlay/… ) nicht Ihre Gerätedatei , nach der Sie suchen, und ganz unten sind die Einhängepunkte

Antworten (1)

Es stellt sich also heraus, dass SuperSU die Einstellung „Mount-Namespace-Trennung“ automatisch abgehakt hat, ohne es mir zu sagen! Ich hatte keine Ahnung, dass es überhaupt eine solche Funktion hatte, geschweige denn, dass es kaputt war.

Gut, dass du es schon herausgefunden hast. Können Sie uns sagen, wie Sie zu dieser Schlussfolgerung gekommen sind? Das kann jemandem bei der Fehlersuche in einem ähnlichen Fall helfen.
@Firelord Luck, wirklich. Ich ging die Einstellungen von SuperSU durch und sah es und erkannte sofort, dass es wahrscheinlich das Problem verursachte.