Внутреннее и внешнее хранилище SD недоступны с правами root

У меня странная проблема, когда приложения, adb и т. д. могут правильно получить доступ к моему внутреннему и внешнему хранилищу SD без проблем , если они не работают как root , и в этом случае они полностью недоступны. Это на моем Oppo Find 7 под управлением ColorOS 1.2.7i (Android 4.3), и я убедился, что у меня нет этой проблемы с WRITE_EXTERNAL_STORAGE. Я не уверен, когда это началось, но я думаю, что это было после обновления ОС некоторое время назад.

Когда я запускаю mountнепривилегированную оболочку adb, у нее есть эти записи, которые не появляются, когда я запускаю ее как суперпользователь:

/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

Я могу перемонтировать эти разделы в другом месте под root и получить к ним доступ в той же оболочке , но разрешения странные, и никакие другие корневые приложения не могут получить к ним доступ:

$ 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

... до сих пор хорошо ...

# 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

... разные разрешения, но я могу видеть и читать/записывать файлы внутри ...

скрин из другого приложения

... Root Explorer показывает его с "оригинальными" разрешениями, но папка пуста...

# 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

... хм.

У меня /etc/vold.fstabесть только одна строка:

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

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

Как я могу это исправить?

В первом Android 4.2.2 и более ранних версиях файл конфигурации vold.fstab для конкретного устройства определяет сопоставление устройств sysfs с точками монтирования файловой системы, и каждая строка имеет следующий формат: dev_mount <label> <mount_point> <partition> <sysfs_path> [flags] Yourdevice dev_mount sdcard /storage/sdcard1 auto /devices/msm_sdcc.2/mmc_host. продолжение Следующий комментарий.
В Android 4.3 и более поздних версиях различные файлы fstab, используемые init, vold и recovery, были объединены в файле /fstab.<device>. Для томов внешнего хранилища, которыми управляет vold, записи должны иметь следующий формат. <src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags Вы понимаете, что формат, который вы используете, предназначен для 4.2.2 и ниже, как указано в пост-цвете OS 4.3, который является неправильным форматом ( ссылка )
@BoLawson Я попытался скопировать /fstab.qcomповерх /etc/vold.fstabи перезагрузить, но поведение не изменилось.
Я смотрю, я бы сказал, перейдите к исходному коду для вашей ОС и получите файл storage_list.xml для конкретного устройства где-нибудь вокруг frameworks /base/something: xml, чтобы получить файл storage_list.xml с точками монтирования. Но я думаю, что color os закрыт, я просто не нашел законного. Я не уверен, но я думаю, что платформа Sdk может иметь их благодаря тому, что я исследую. Это [storage_list.xml] ( android.googlesource.com/device/moto/wingray/+/master/overlay/… ) , а не файл вашего устройства , который вы ищете, а внизу указаны точки монтирования

Ответы (1)

Итак, получается, что SuperSU автоматически отметил параметр «Разделение пространства имен монтирования», не сказав мне об этом! Я понятия не имел, что у него даже есть такая функция, не говоря уже о том, что он сломан.

Хорошо, что вы это уже поняли. Не могли бы вы рассказать нам, как вы пришли к такому выводу? Это может помочь кому-то в устранении неполадок в подобном случае.
@Firelord Удачи, правда. Я просматривал настройки SuperSU и увидел это, и сразу понял, что это, вероятно, вызывает проблему.